我们想使用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
答案 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
连接。
在这种情况下:
TLS
请求将HTTPS
终止于TLS
至GateWay
。HTTP
请求转换为TLS,其中HTTP
转换为DestinationRule
。HTTPS
请求到达HTTPS
后端。