Nginx Ingress Kube - PullRequest
       7

Nginx Ingress Kube

0 голосов
/ 02 марта 2019

Я запутался во входе nginx в Kubernetes.Я смог использовать его с «базовой аутентификацией nginx» (пока не могу сделать это с oauth2).

Я установил через helm:

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

Это создает две службы, nginx-ingress-controller и nginx-ingress-backend.

Когда я создаю вход, этот вход нацелен на один и только один nginx-ingress-controller, но я понятия не имею, как:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    nginx.ingress.kubernetes.io/auth-realm: "Authentication Required - foo"
    nginx.ingress.kubernetes.io/rewrite-target: /
  namespace: kube-system
spec:
  rules:
  - host:
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-deployment-service 
          servicePort: 8080

Когда я получаю этот Ingress с выхода kubectl get ingress -n kube-system, он имеет открытый внешний IP-адрес.

Что относительно это то, что basic-auth НЕ ПРИМЕНЯЕТСЯ к этому внешнему IP;это широко открыто!Аутентификация Nginx включается только тогда, когда я пытаюсь посетить IP nginx-ingress-controller.

У меня много вопросов.

  1. Как сделать вход, созданный из kubectl apply -f ingress.yaml нацелен на конкретный nginx-ingress-controller?
  2. Как мне не дать этому новому ingress иметь внешний IP-адрес?
  3. Почему не запускается nginx аутентификация?
  4. Какой IP-адрес я предполагаю использовать (nginx-ingress-controller или сгенерированный?)
  5. Если я предполагаю использовать сгенерированный IP-адрес, как насчет одного из контроллера?

Я искал спуск, рабочие примеры (и разбрасывал разрозненные, изменяющие документацию и проблемы с github) буквально days.

EDIT:

В этой "официальной" документации неясно, будет ли погода или нет http://10.2.29.4/ IP от ingress или controller.Я предполагаю, что controller, потому что, когда я запускаю это, другой даже не аутентифицируется ( это позволяет мне войти без запроса пароля ).Оба IP-адреса, которые я использую, являются внешними (общедоступными) в GCP.

1 Ответ

0 голосов
/ 03 марта 2019

Я думаю, что у вас может быть какое-то недопонимание определения понятия.

  1. Вход - это не работа (ни служба, ни стручок).Это просто конфигурация.У него не может быть «IP».Подумайте о входе как о правиле маршрутизации или таблице маршрутизации в вашем кластере.
  2. Nginx-ingress-controller - это сервис типа Loadbalancer с фактическими запущенными модулями, который облегчает те правила входа, которые вы создали для своего кластера.
  3. Nginx-ingress-backend, скорее всего, будет default-backend, к которому будет направлен ваш nginx-ingress-controller, если не найдено подходящих маршрутов.см. this
  4. В общем, ваша nginx-ingress-controller должна быть единственной записью вашего кластера.Другие службы в вашем кластере должны иметь тип ClusterIP, чтобы они не были доступны вне кластера и были доступны только через ваш nginx-ingress-controller.В вашем случае, поскольку ваш сервис может иметь доступ извне напрямую, он не должен иметь тип ClusterIP.Просто измените тип службы, чтобы обеспечить ее защиту.

Исходя из вышеизложенного, я буду рад предоставить дополнительную помощь по вашему вопросу.

Некоторые показания:

  1. Что такое входящий: https://kubernetes.io/docs/concepts/services-networking/ingress/
  2. K8s Услуги и внешний доступ: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
...