Istio: один шлюз и несколько VirtualServices (каждый в своем пространстве имен)

Как я могу настроить один шлюз в Istio 1.9 и несколько VirtualServices (каждый в своем пространстве имен). Я не могу установить один шлюз для каждой виртуальной службы, потому что браузеры используют повторное использование HTTP / 2-соединения (https://httpwg.org/specs/rfc7540.html#reuse) для выдачи 404 ошибки.

Если я следовать инструкциям https://istio.io/latest/docs/ops/common-problems/network-issues/#404-errors-occur-when-multiple-gateways-configured-with-same-tls-certificate это не будет работать, потому что шлюз и виртуальный сервис не могут находиться в разных пространствах имен.

Это файлы манифеста:

APP1:

      apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: app1-gateway
  namespace: app1
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "app1.example.com"
    tls:
      httpsRedirect: true # sends 301 redirect for http requests
  - port:
      number: 443
      name: https-app1
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: sslcertificate
    hosts:
    - "app1.example.com"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: app1
  namespace: app1
spec:
  hosts:
  - "app1.example.com"
  gateways:
  - app1-gateway
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        host: app1
        port:
          number: 80

APP2:

      apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: app2-gateway
  namespace: app2
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "app2.example.com"
    tls:
      httpsRedirect: true # sends 301 redirect for http requests
  - port:
      number: 443
      name: https-app2
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: sslcertificate
    hosts:
    - "app2.example.com"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: app2
  namespace: app2
spec:
  hosts:
  - "app2.example.com"
  gateways:
  - app2-gateway
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        host: app2
        port:
          number: 80

1 ответ

Чтобы ответить на ваш вопрос, because gateway and virtualservice can't be in different namespaces, на самом деле они могут находиться в разных пространствах имен.

Если он не находится в том же пространстве имен, что и виртуальная служба, вам просто нужно указать это пространство имен в своей виртуальной службе.

Проверить spec.gateways раздел

      apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo-Mongo
  namespace: bookinfo-namespace
spec:
  gateways:
  - some-config-namespace/my-gateway # can omit the namespace if gateway is in same
                                       namespace as virtual service.

      apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: my-gateway
  namespace: some-config-namespace

Об этом есть соответствующая документация istio .

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