AKS NGINX использует статический внутренний IP

#nginx #nginx-ingress #azure-aks #azure-virtual-network

#nginx #nginx-вход #azure-aks #azure-виртуальная сеть

Вопрос:

У меня есть кластер Kubernetes в Azure (AKS), работающий с NGINX в качестве входа спереди. Установка Nginx была довольно простой:

 kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/cloud/deploy.yaml
 

Но при этом балансировщик нагрузки был создан с общедоступным IP. Вот почему я изменил сервис и добавил две аннотации:

 apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    loadBalancerIP: 10.29.30.250
  labels:
    helm.sh/chart: ingress-nginx-3.10.1
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/version: 0.41.2
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
    - name: https
      port: 443
      protocol: TCP
      targetPort: https
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/component: controller
 

Теперь LoadblancerIP является частным. Но это не IP из аннотаций.

Моя подсеть: 10.29.30.240 /28

Результат:

 $ sudo kubectl get svc --all-namespaces --watch
NAMESPACE       NAME                                 TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                      AGE
...
ingress-nginx   ingress-nginx-controller             LoadBalancer   10.0.125.51   10.29.30.248   80:30158/TCP,443:32714/TCP   57s
 

Что я делаю не так?

Ответ №1:

Вы используете неправильный способ указания статического IP-адреса для балансировщика нагрузки. Это должно быть так:

 apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
  labels:
    helm.sh/chart: ingress-nginx-3.10.1
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/version: 0.41.2
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  type: LoadBalancer
  loadBalancerIP: 10.29.30.250     # here is the location for the special IP address
  externalTrafficPolicy: Local
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
    - name: https
      port: 443
      protocol: TCP
      targetPort: https
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/component: controller
 

Смотрите пример здесь . Обратите внимание на то, какую подсеть вы используете, другую или ту же, что и в кластере AKS.