Глобальное статическое IP-имя на выходе NGINX Ingress
У меня возникают трудности с запуском моего контроллера Ingress в Google Container Engine. Я хочу использовать NGINX Ingress Controller с Basic Auth и использовать зарезервированное глобальное статическое ip-имя (это можно сделать в разделе "Внешние IP-адреса" в интерфейсе Google Cloud Admin). Когда я использую класс gce, все работает отлично, за исключением Basic Auth (который, я думаю, не поддерживается в классе gce), код anenter, который используется, когда я пытаюсь использовать класс nginx, запускается Ingress Controller, но IP-адрес, который я зарезервировал в интерфейс облачного администратора Google не будет подключен к Ingress Controller. Кто-нибудь знает, как заставить это работать? Вот мой файл конфигурации:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: webserver
annotations:
kubernetes.io/ingress.global-static-ip-name: "myreservedipname"
kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/auth-type: basic
ingress.kubernetes.io/auth-realm: "Auth required"
ingress.kubernetes.io/auth-secret: htpasswd
spec:
tls:
- secretName: tls
backend:
serviceName: webserver
servicePort: 80
Ответы
Ответ 1
Внешний IP-адрес можно подключить к балансировщику нагрузки, который вы можете указать на свой контроллер Ingress.
Одно из основных замечаний - внешний IP-адрес должен быть зарезервирован в том же регионе, что и кластер Kubernetes.
Для этого вам просто нужно развернуть свою службу Nginx-ingress с type: LoadBalancer
и установить значение ExternalIP
, например:
kind: Service
apiVersion: v1
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app: ingress-nginx
spec:
loadBalancerIP: <YOUR_EXTERNAL_IP>
type: LoadBalancer
selector:
app: ingress-nginx
ports:
- name: http
port: 80
targetPort: http
- name: https
port: 443
targetPort: https
После развертывания Kubernetes создаст новый балансировщик нагрузки с желаемым статическим IP-адресом, который станет отправной точкой для вашего Ingress.
@silgon, как я вижу, вы уже пытались это сделать, но без положительного результата. Но это должно сработать. Если нет - проверьте область IP-адреса и конфигурацию еще раз.
Ответ 2
Я нашел решение с рулем.
helm install --name nginx-ingress stable/nginx-ingress \
--set controller.service.loadBalancerIP=<YOUR_EXTERNAL_IP>
Вы должны использовать external-ip
а не имя, которое вы дали с gcloud.
Кроме того, в моем случае я также добавил --set rbac.create=true
для разрешений.
Ответ 3
Здесь пример, который я знаю, работает, может быть проблемой вокруг вашего синтаксиса:
kind: Ingress
metadata:
name: nginx
spec:
rules:
- host: nginx.192.168.99.100.nip.io
http:
paths:
- backend:
serviceName: nginx
servicePort: 80