У меня была чистая подписка Azure, и я создал AKS, используя стандартный SKU и очень простую настройку (2 узла D2as_v4, настройки по умолчанию). Установил NGINX вроде:
helm install ingress-nginx ingress-nginx/ingress-nginx
Затем поместите туда фиктивное приложение и сделайте его доступным через службу Ingress + ClusterIP:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ingress-demo
spec:
replicas: 1
selector:
matchLabels:
app: ingress-demo
template:
metadata:
labels:
app: ingress-demo
spec:
containers:
- name: ingress-demo
image: mcr.microsoft.com/azuredocs/aks-helloworld:v1
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: ingress-demo
spec:
type: ClusterIP
ports:
- port: 80
selector:
app: ingress-demo
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: development-ingress
spec:
ingressClassName: nginx
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ingress-demo
port:
number: 80
Этот работает и я можем получить доступ к фиктивному приложению на общедоступном IP-адресе, назначенном моему Ingress (связь).
Я не могу получить доступ к моему приложению, используя любую конфигурацию пути, отличного от значения по умолчанию. Я получаю Error: Request timed out
ни для чего, кроме /
. Это изменение Ingress не работает для меня:
- path: /foo
Та же проблема с использованием регулярного выражения:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
...
- path: /dev(/|$)(.*)
Я пробовал несколько исправлений, предложенных в Проблема с GitHub, упомянутая молчаливым пользователем.
Использование следующей опции делает работу пути /foo
:
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz
Но это все еще не работает для регулярного выражения. Чтобы сделать путь типа /dev(/|$)(.*)
работоспособным, вам нужно либо изменить зонд Azure Load Balancer с HTTP на TCP (сохранив порт), либо установить контроллер NGINX с этим флагом:
--set controller.service.externalTrafficPolicy=Local
Не совсем уверен, но похоже, что вы столкнулись с этой проблемой: https://github.com/Azure/AKS/issues/2903
Решение было размещено в этом сообщении: https://github.com/Azure/AKS/issues/2903#issuecomment-1109758644
Оно работает. Спасибо еще раз!
helm install nginx-ingress ingress-nginx/ingress-nginx --set controller.service.externalTrafficPolicy=Local