Как добавить статический IP в nginx-ingress, установленный через helm

#kubernetes #kubernetes-helm #nginx-ingress

#kubernetes #kubernetes-helm #nginx-ingress

Вопрос:

Я хотел бы создать nginx-ingress, который я мог бы связать с зарезервированным IP-адресом. Основная причина в том, что я хочу свести к минимуму действия вручную. В настоящее время инфраструктура автоматически настраивается с помощью Terraform, но я не могу заставить nginx-ingress использовать с ней зарезервированный IP-адрес. У меня уже работает nginx-ingress, но он создает свой собственный IP-адрес.

Согласно сайту nginx-ingress (https://kubernetes.github.io/ingress-nginx/examples/static-ip /), это должно быть возможно. Сначала следует создать службу балансировки нагрузки:

 apiVersion: v1
kind: Service
metadata:
  name: nginx-ingress-lb
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  loadBalancerIP: 34.123.12.123
  ports:
  - port: 80
    name: http
    targetPort: 80
  - port: 443
    name: https
    targetPort: 443
  selector:
    # Selects nginx-ingress-controller pods
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  

Однако затем можно обновить IP через nginx-ingress-controller.yaml файл с --publish-service флагом. Однако я устанавливаю это через helm:

 helm install stable/nginx-ingress --name my-nginx --set rbac.create=true
  

Как я могу связать службу публикации с nginx-ingress-lb при установке (или обновлении) helm.

Ответ №1:

Предполагая, что ваш облачный провайдер поддерживает LBs со статическими IP-адресами (AWS, например, предоставит вам CNAME вместо IP-адреса):

Вам нужно будет установить его в качестве тега следующим образом. Как только вы сделаете это, вы можете установить свою аннотацию ingress: kubernetes.io/ingress.class: nginx и ваш ingress автоматически получит тот же IP-адрес.

 helm install stable/nginx-ingress  --set controller.service.loadBalancerIP=XXXX,rbac.create=true
  

Комментарии:

1. Я использую GKE. У меня статический IP 34.123.12.123, но я получаю сообщение «Ошибка при создании балансировщика нагрузки (повторю попытку): не удалось убедиться, что балансировщик нагрузки для службы по умолчанию / ng3-nginx-ingress-controller: запрошенный ip «34.123.12.123» не является ни статическим, ни назначенным LB после запуска выше».

2. Я получаю то же сообщение, если пытаюсь запустить static-ip-svc.yml (выше) для nginx-ingress-lb

3. Это глобальный IP? Или региональный?

4. это глобальный ip

5. этот ответ правильный, но IP должен быть региональным и находиться в том же регионе, что и кластер

Ответ №2:

Первоначальный ответ немного устарел, поэтому вот рабочий пример для 2022 года.

Примечание: Вы не можете редактировать существующую ingress-nginx службу балансировки нагрузки, но вы можете передать внешний IP, который вы хотите, чтобы он использовал при его установке. Имейте в виду, вам необходимо заранее настроить этот внешний IP-адрес в вашей облачной среде.

Вот команда, которая сработала у меня при выполнении установки helm:

 helm upgrade --install ingress-nginx ingress-nginx 
  --repo https://kubernetes.github.io/ingress-nginx 
  --namespace ingress-nginx --create-namespace 
  --debug 
  --set controller.service.loadBalancerIP=<YOUR_STATIC_IP>
  

Подробная информация: