我们想使用 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 将流量路由到后端服务?
提前致谢。
最好的问候, rforberger
正如 RonnyForberger 在他的评论中提到的,这可以通过创建DestinationRule
告诉目标服务的流量进行TLS
连接来实现。
所以在这个场景中:
HTTPS
请求TLS
在GateWay
to 处终止HTTP
。HTTP
请求转换为 TLS 并使用DestinationRule
to HTTPS
。HTTPS
请求到达HTTPS
后端。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句