Как установить частный IP-адрес AWS NLB при создании сервиса Kubenetes?
Я хотел бы создать контроллер входящего трафика nginx с внутренним NLB AWS, требование - исправить IP-адрес конечной точки NLB, например, в настоящее время DNS-сервер NLB для входящего сервиса Nginx - abc.elb.eu-central-1.amazonaws. com, который разрешен в IP-адрес 192.168.1.10, если я удалю и повторно создаю контроллер входа nginx, я хочу, чтобы DNS NLB был таким же, как и раньше. Заглянув в аннотацию сервиса kubernetes, я не увидел возможности повторно использовать существующий NLB, однако я обнаружил сервис аннотации .beta.kubernetes.io/aws-load-balancer-private-ipv4-addresses в ссылке , Насколько я понимаю, это позволяет мне установить IP-адрес для NLB, но он не работает, как я ожидал, каждый раз, когда я повторно создавал контроллер nginx, IP-адрес отличается. Ниже приведен файл yaml службы K8s.
# Source: ingress-nginx/templates/controller-service.yaml
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/aws-load-balancer-internal: "true"
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
service.beta.kubernetes.io/aws-load-balancer-private-ipv4-addresses: "10.136.103.251"
service.beta.kubernetes.io/aws-load-balancer-subnets: "subnet-00df069133b22"
labels:
helm.sh/chart: ingress-nginx-3.23.0
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/version: 0.44.0
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: controller
name: ingress-nginx-controller
spec:
type: LoadBalancer
externalTrafficPolicy: Local
Я знаю, что это требование неверно, возможно ли это?
2 ответа
Во-первых, я не уверен, что это значение аннотации является действительным, поскольку оно не фигурирует .
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
Если ваш кластер Kubernetes работает в VPC с более чем одной подсетью (что, вероятно, так), вы должны предоставить частный IP-адрес для каждой подсети.
Я установил схему штурвала с помощью этой команды:
helm install nginx-ingress ingress-nginx/ingress-nginx --namespace nginx-ingress -f internal-ingress-values.yaml
Здесь содержимое файла internal-ingress-values.yaml
controller:
ingressClass: nginx
service:
enableHttp: false
enableHttps: true
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: external
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
service.beta.kubernetes.io/aws-load-balancer-scheme: internal
service.beta.kubernetes.io/aws-load-balancer-private-ipv4-addresses: 10.136.103.251, 10.136.104.251
service.beta.kubernetes.io/aws-load-balancer-subnets: subnet-00a1a7f9949aa0ba1, subnet-12ea9f1df24aa332c
ingressClassResource:
enabled: true
default: true
Примечание: согласно в официальной документациидокументации к сервису .beta.kubernetes.io/aws-load-balancer-private-ipv4-addresses аннотации
Длина / порядок должны соответствовать подсетям
Вы должны указать IP-адреса и подсеть в одном и том же порядке (не допускайте несовпадений). Если взять мой пример, вы должны убедиться, что:
- 10.136.103.251 входит в подсеть-00a1a7f9949aa0ba1
- 10.136.104.251 входит в подсеть-12ea9f1df24aa332c
Я тестировал этот K8S на 1.20, и он работает для моего проекта. Не предоставляйте ingressClassResource, если вы используете K8S <= 1.17.
Единственными LB, которые будут управляться (по крайней мере, в текущей версии 2.3 AWS LB Controller), будут типы «nlb-ip» и «external». Это указано по адресу:https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.3/guide/service/annotations/#legacy-cloud-provider.
Аннотация service.beta.kubernetes.io/aws-load-balancer-type используется для определения того, какой контроллер согласовывает службу. Если значение аннотации - nlb-ip или external, устаревший облачный провайдер игнорирует сервисный ресурс (при условии, что он имеет правильный патч), чтобы контроллер AWS Load Balancer мог взять на себя управление. Для всех других значений аннотации устаревший облачный провайдер будет обрабатывать сервис. Обратите внимание, что эта аннотация должна быть указана при создании службы и не редактироваться позже.