Входящий куб Nginx

#kubernetes #nginx-ingress

#kubernetes #nginx-вход

Вопрос:

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

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

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

Это создает две службы, nginx-ingress-controller и an 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
  

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

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

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

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

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

Редактировать:

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

Ответ №1:

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

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