带有 TLS 终止的 Istio Ingress Gateway 返回 503 服务不可用

问题描述 投票:0回答:2

我们希望使用 Istio Ingress Gateway 将 https 流量路由到 https 端点。

我们在 Ingress 网关终止 TLS 流量,但我们的后端服务也使用 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 终止的流量(也就是说)HTTP 流量发送到 HTTPS 后端。因此,通过 Istio 访问服务时,我们可能会收到 503 Service Unavailable。

访问它的命令是:

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 使用 https 将流量路由到后端服务?

提前致谢。

最诚挚的问候, 罗福伯格

kubernetes https istio
2个回答
0
投票

正如 RonnyForberger 在他的评论中提到的,这可以通过创建

DestinationRule
来实现,告诉目标服务的流量是
TLS
连接。

所以在这种情况下:

  1. HTTPS
    请求从
    TLS
    终止于
    GateWay
    然后将 
  2. HTTP
  3. 请求转换为 TLS,其中
    HTTP
    转换为
    DestinationRule
  4. HTTPS
  5. 请求到达
    HTTPS
    后端。
    
        

0
投票
PASSTHROUGH

模式下使用 Istio Ingress Gateway。 这会将原始 TLS 流量转发到目的地,您可以避免网关处的 TLS 终止开销。

https://istio.io/latest/docs/tasks/traffic-management/ingress/ingress-sni-passthrough/#configure-an-ingress-gateway

© www.soinside.com 2019 - 2024. All rights reserved.