Почему только /path работает в AKS с NGINX Ingress Controller

У меня была чистая подписка 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
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
0
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не совсем уверен, но похоже, что вы столкнулись с этой проблемой: 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

Mamut 04.05.2022 00:15

Другие вопросы по теме