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

时间:2020-02-05 11:25:57

标签: kubernetes https istio

我们想使用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服务不可用。

访问它的命令是:

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

谢谢。

最好的问候, rforberger

1 个答案:

答案 0 :(得分:0)

正如RonnyForberger在他的评论中提到的那样,可以通过创建TYPES ty_hashed_table TYPE HASHED TABLE OF string WITH UNIQUE KEY table_line WITH NON-UNIQUE SORTED KEY by_table_line COMPONENTS table_line ##TABKEY[PRIMARY_KEY][BY_TABLE_LINE]. DATA(hashed_table) = VALUE ty_hashed_table( ( `World` ) ( `Hello` ) ). ASSIGN hashed_table[ KEY by_table_line INDEX 1 ] TO FIELD-SYMBOL(<line>). ASSERT <line> = `Hello`. 来实现这一点,该访问告诉目的地服务的流量是DestinationRule连接。

在这种情况下:

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