#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>
Подробная информация: