Правило входа не перенаправляет на развертывание

вход

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: assortment-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - myapp.centralus.cloudapp.azure.com
    secretName: aks-ingress-tls
  rules:
  - host: myapp.centralus.cloudapp.azure.com
    http:
      paths:
      - path: /my-service
        backend:
          serviceName: my-backend
          servicePort: 80

развертывание и обслуживание

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: myservice
    spec:
      containers:
      - name: myservice
        image: myreg.azurecr.io/my-latest
        imagePullPolicy: Always
        ports:
           - name: http
             containerPort: 8080
      imagePullSecrets:
      - name: my-auth

apiVersion: v1
kind: Service
metadata:
 name: my-backend
spec:
 type: ClusterIP
 selector:
   app: myservice
 ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 8080

тем не мение

curl https://myapp.centralus.cloudapp.azure.com/my-service

дает

бэкэнд по умолчанию - 404

Обратите внимание, что myapp.centralus.cloudapp.azure.com уже разрешает общедоступный IP-адрес контроллера входа.

Когда я создаю сервис с типом LoadBalancer с тем же конфигом, он работает с публичным API.

3 ответа

Прежде всего, проверьте, что ваши модули находятся в рабочем состоянии.

или же

может быть причиной перенаправления слишком большого количества портов с 80 на 8080.войдите на службу к целевому порту.

Ваш конфиг абсолютно прав, это простая проблема, которая может быть связана с тем, что модуль не запущен или подождет некоторое время с чистым кэшем браузера

Проблема заключалась в том, что при доступе к внутреннему приложению через контроллер ngix были добавлены следующие заголовки.

X-FORWARDED-PROTO: https
X-FORWARDED-PORT: 443

Хотя доступ к нему через общедоступный IP-адрес LoadBalancer не был проблемой, проблема может быть воспроизведена, когда мы добавим заголовок

curl -v 104.43.164.105 -H "X-Forwarded-Proto: https"

Дает 302 найдено

Эти дополнительные заголовки не понравились следующей конфигурации весенней загрузки в application.yaml

server:
  useForwardHeaders: true

Это было исправлено

server:
  useForwardHeaders: false

или же

удаление вышеуказанной конфигурации в целом.

Когда вы используете TLS с Ingress, у вас также есть два способа использовать сертификаты.

Одним из них является то, что использовать свой собственный сертификат. Вы можете выполнить действия, описанные в разделе Создание входного контроллера HTTPS, и использовать собственные сертификаты TLS в службе Azure Kubernetes (AKS). Но для этого вы можете просто получить доступ к URL-адресу следующим образом:

curl -v -k --resolve demo.azure.com:443:yourIngressExternalIP https://demo.azure.com

Когда вы используете DNS-имя, заданное в Azure с общедоступным IP-адресом, вы можете создать сертификат в следующем случае:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -out aks-ingress-tls.crt \
    -keyout aks-ingress-tls.key \
    -subj "/CN=myapp.centralus.cloudapp.azure.com/O=aks-ingress-tls"

Тогда вы можете подать в суд на команду curl https://myapp.centralus.cloudapp.azure.com, но это покажет так:

Когда вы используете браузер для доступа к URL, он будет отображаться так:

Чтобы использовать другой способ, выполните действия, описанные в разделе Создание входного контроллера со статическим общедоступным IP-адресом в службе Azure Kubernetes (AKS). Я предлагаю этот способ. Попробуй.

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