При использовании nginx kubernetes маршрутизации LoadBalancer с перенаправлениями пути, почему я не могу получить доступ к своему сервису правильно? - PullRequest
0 голосов
/ 30 апреля 2020

Я использую AKS с Helm v2.2, чтобы попытаться развернуть диаграмму, которая использует nginx LoadBalancer Pod, чтобы контролировать все входы в мои сервисы через один IP-адрес. Это очень много на этапе эксперимента, но я доказал, что, когда я использую следующую конфигурацию входа Helm для моей службы net core webapi:

ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
  hosts:
    - host:
      paths:
        - /

, что я действительно смогу тогда посетить мои открытые API и см. пользовательский интерфейс Swagger по адресу

http://[My External IP]/index.html 

. Затем я хочу разместить несколько служб за одним и тем же LoadBalancer (как вы и предполагали), поэтому я ожидал, что я смогу затем изменить указанную выше конфигурацию службы на что-то другое. как это:

ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
  hosts:
    - host:
      paths:
        - /serviceA

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

http://[My External IP]/serviceA/index.html

Это то, что я должен ожидать работать? Нужно ли мне использовать какую-либо систему перезаписи, поскольку до сих пор я получаю сообщения об ошибках из этого URL, говорящие о том, что она не может найти определенные недостающие ресурсы. Любые попытки использовать аннотацию переписывания также не помогли мне здесь. Может ли кто-нибудь помочь мне и указать, что я могу делать неправильно? С новым путем URL я в конечном итоге получаю следующие типы ошибок в файлах, которые индекс загружает. html страница пытается загрузить, предполагая, что она наполовину работает, но нуждается в некоторой перезаписи или чем-то еще?

Failed to load resource: the server responded with a status of 404 ()

В результате механизма шаблонов диаграммы Helm создается следующий входной yaml-файл:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: myrelease-release-manager
  labels:
    app.kubernetes.io/name: release-manager
    helm.sh/chart: release-manager-0.1.0
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "1.0"
    app.kubernetes.io/managed-by: Tiller
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /serviceA
    nginx.ingress.kubernetes.io/ssl-redirect: "false"

spec:
  rules:
    - host:
      http:
        paths:
          - path: /serviceA
            backend:
              serviceName: myrelease-release-manager
              servicePort: 80

В результате этого входного файла я хочу посетить этот сервис, когда я go на мой внешний IP-адрес с путем /serviceA/index.html.

1 Ответ

2 голосов
/ 05 мая 2020

Закрыть, вам нужно обновить цель перезаписи на / $ 2

nginx.ingress.kubernetes.io/rewrite-target: /$2

Перезаписать

/ serviceB / foo -> / foo

/ serviceA / foo - > / foo

Но каждый из них будет направлен на службы по этому пути

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: myrelease-release-manager
  labels:
    app.kubernetes.io/name: release-manager
    helm.sh/chart: release-manager-0.1.0
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "1.0"
    app.kubernetes.io/managed-by: Tiller
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
 spec:
   rules:
   - http:
       paths:
       - backend:
           serviceName: serviceB
           servicePort: 80
         path: /serviceB(/|$)(.*)
       - backend:
           serviceName: serviceA
           servicePort: 80
         path: /serviceA(/|$)(.*)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...