Входной шлюз Istio с завершением TLS, возвращающий услугу 503, недоступную - PullRequest
0 голосов
/ 05 февраля 2020

Мы хотим направить https traffi c к конечной точке https с помощью шлюза Istio Ingress.

Мы завершаем трафик TLS c на входном шлюзе, но наша внутренняя служба также использует https.

У меня есть следующие манифесты:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: datalake-dsodis-istio-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - "gw-hdfs-spark.dsodis.domain"
    - "spark-history.dsodis.domain"
    port:
      name: https-wildcard
      number: 443
      protocol: HTTPS
    tls:
      mode: SIMPLE
      serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
      privateKey: /etc/istio/ingressgateway-certs/tls.key
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: gw-spark-history-istio-vs
spec:
  gateways:
  - default/datalake-dsodis-istio-gateway
  hosts:
  - "spark-history.dsodis.domain"
  http:
    - match:
      - uri:
          prefix: /
      route:
        - destination:
            host: gateway-svc-clusterip.our_application_namespace.svc.cluster.local
            port:
              number: 8443
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: originate-tls-for-spark-history
spec:
  host: gateway-svc-clusterip.our_application_namespace.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      simple: ROUND_ROBIN
    portLevelSettings:
    - port:
        number: 8443 
      tls:
        mode: SIMPLE

Скорее всего, проблема в том, что мы отправляем трафик TLS с прекращением c, (так сказать) HTTP traffi c, к бэкэнду HTTPS. Поэтому мы можем получить 503 Сервис недоступен при доступе к сервису через Istio.

Команда доступа к нему:

curl -vvvv -H"Host: spark-history.dsodis.domain" --resolve "spark-history.dsodis.domain:31390:IP" https://spark-history.dsodis.domain:31390/gateway/default/sparkhistory  -k

У меня вопрос, как я могу сказать, что Istio маршрутизирует трафик c в бэкэнд-сервис с использованием https?

Заранее спасибо.

С уважением, rforberger

1 Ответ

0 голосов
/ 13 февраля 2020

Как упомянул РонниФорбергер в своем комментарии, этого можно достичь, создав DestinationRule, который сообщает трафику c службе назначения, что это TLS соединение.

Итак, в этом сценарии:

  1. HTTPS запрос получает TLS, завершенный с GateWay до HTTP.
  2. Затем запрос HTTP транслируется в TLS с DestinationRule до HTTPS.
  3. HTTPS запрос достигает HTTPS бэкэнда.
...