#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-адрес.
У меня много вопросов.
- Как мне сделать, чтобы вход, созданный из
kubectl apply -f
, предназначался для определенного nginx-ingress-controller?
ingress.yaml - Как мне сохранить для этого нового
ingress
внешний IP-адрес? - Почему не запускается
nginx
аутентификация? - Какой IP-адрес я должен использовать (
nginx-ingress-controller
или сгенерированный?) - Если я предполагаю использовать сгенерированный IP-адрес, как насчет того, который от контроллера?
Я искал спуск, рабочие примеры (и заливал разреженную, изменяющуюся документацию и проблемы github) в течение буквально дней.
Редактировать:
В этой «официальной» документации неясно, является ли weather или нет http://10.2.29.4/
IP от ingress
или controller
. Я предполагаю, controller
потому что, когда я запускаю это, другое даже не проходит аутентификацию (оно позволяет мне войти, не запрашивая пароль). Оба IP-адреса, которые я использую, являются внешними IP-адресами (общедоступными) в GCP.
Ответ №1:
Я думаю, у вас может быть какое-то недопонимание определения концепции.
- Вход — это не задание (ни служба, ни модуль). Это всего лишь конфигурация. У него не может быть «IP». думайте о входе как о правиле маршрутизации или таблице маршрутизации в вашем кластере.
Nginx-ingress-controller
это служба с типомLoadbalancer
, за которой стоят фактические запущенные модули, облегчающие выполнение правил входа, которые вы создали для своего кластера.Nginx-ingress-backend
скорее всего, это тот,default-backend
к которому выnginx-ingress-controller
направитесь, если не найдете подходящих маршрутов. смотрите это- В общем, ваша
nginx-ingress-controller
должна быть единственной записью вашего кластера. Другие службы в вашем кластере должны иметь такой тип,ClusterIP
чтобы они не были доступны за пределами кластера и были доступны только через вашnginx-ingress-controller
. В вашем случае, поскольку к вашему сервису можно получить прямой доступ извне, он не должен иметь типClusterIP
. Просто измените тип сервиса, чтобы защитить его.
Исходя из вышеизложенного понимания, я буду рад предоставить дальнейшую помощь по возникшему у вас вопросу.
Некоторые показания:
- Что такое вход: https://kubernetes.io/docs/concepts/services-networking/ingress /
- Сервисы K8s и внешний доступ: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types