HTTPS Ingress с Istio и SDS не работает (возвращает 404) при настройке нескольких шлюзов - PullRequest
0 голосов
/ 11 февраля 2020

Когда я настраиваю несколько пар (шлюз - виртуальная служба) в пространстве имен, каждая из которых указывает на базовые c службы HTTP, становится доступной только одна служба. Вызовы другому (обычно второму сконфигурированному) возвращают 404. Если первый шлюз удаляется, тогда второй сервис становится доступным

Я поднял вопрос github через несколько недель go (https://github.com/istio/istio/issues/20661), который содержит всю мою конфигурацию, но нет ответа на дату. Кто-нибудь знает, что я делаю неправильно (если что-нибудь)?

1 Ответ

1 голос
/ 11 февраля 2020

Исходя из этого проблема github

Имена портов шлюза должны быть уникальными, если они совместно используют один и тот же порт. Это единственный способ, которым мы различаем различные блоки RDS. Мы прошли через это движение и раньше. Я не стал бы раскачивать эту лодку без крайней необходимости.

Подробнее о проблеме здесь

Проверено на Документация istio , и на самом деле, если вы настраиваете несколько шлюзов, имя первого - https, а второе - https-bookinfo.

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpbin-gateway
spec:
  selector:
    istio: ingressgateway # use istio default ingress gateway
  servers:
  - port:
      number: 443
      name: https
      protocol: HTTPS
    tls:
      mode: SIMPLE
      serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
      privateKey: /etc/istio/ingressgateway-certs/tls.key
    hosts:
    - "httpbin.example.com"

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway # use istio default ingress gateway
  servers:
  - port:
      number: 443
      name: https-bookinfo
      protocol: HTTPS
    tls:
      mode: SIMPLE
      serverCertificate: /etc/istio/ingressgateway-bookinfo-certs/tls.crt
      privateKey: /etc/istio/ingressgateway-bookinfo-certs/tls.key
    hosts:
    - "bookinfo.com"

РЕДАКТИРОВАТЬ

Это странно, но у меня есть еще одна идея.

Существует github pull , у которого в пилоте следующая строка:

routeName := gatewayRDSRouteName(s, config.Namespace)

This изменение добавляет область видимости пространства имен к именам портов шлюза, добавляя суффикс пространства имен к маршрутам HTTPS RDS. Имена портов по-прежнему должны быть уникальными в пределах границ пространства имен, но это изменение делает добавление более специфичных c областей видимости довольно тривиальным.

Не могли бы вы попробовать сделать 2 пространства имен, как показано в примере ниже

ПРИМЕР

apiVersion: v1
kind: Namespace
metadata:
  name: httpbin
  labels:
    name: httpbin
    istio-injection: enabled
---
apiVersion: v1
kind: Namespace
metadata:
  name: nodejs
  labels:
    name: nodejs
    istio-injection: enabled

И развернуть все (развертывание, служба, виртуальная служба, шлюз) в надлежащем пространстве имен и сообщить мне, если это работает?


Не могли бы вы попробовать изменить хосты с "*" на несколько имен? Это единственное, что пришло мне в голову, кроме попыток serverCertficate и privateKey, но из комментариев я предполагаю, что вы уже пробовали это.

Дайте мне знать, если это поможет.

...