我们希望使用 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 将流量路由到后端服务?
提前致谢。
最诚挚的问候, 罗福伯格
正如 RonnyForberger 在他的评论中提到的,这可以通过创建
DestinationRule
来实现,告诉目标服务的流量是 TLS
连接。
所以在这种情况下:
HTTPS
请求从 TLS
终止于 GateWay
。然后将 HTTP
HTTP
转换为 DestinationRule
。HTTPS
HTTPS
后端。