Глобальное статическое 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