Kubernetes跨信任域Pod访问HTTPS Istio Ingress Gateway配置咨询
Istio跨安全域通信实现方案
方案1:基于ISTIO_MUTUAL双向TLS的跨域通信(推荐,兼容现有Gateway/VS/DR规则)
前提:两个安全域的Istio实例共享同一根CA证书(单集群下不同命名空间默认满足该条件,多集群部署需提前完成根证书同步配置)
该方案完全匹配你原定的流量路径,证书由Istio自动管理无需手动配置,步骤如下:
- 调整中信任域Ingress Gateway的TLS模式,将原有SIMPLE模式改为ISTIO_MUTUAL,启用Istio自动双向认证:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: mediumtrust-gateway namespace: mediumtrust spec: selector: istio: ingressgateway # 对应中信任域的Ingress Gateway实例标签 servers: - port: number: 443 name: https protocol: HTTPS tls: mode: ISTIO_MUTUAL # 替换原有独立证书的SIMPLE模式 hosts: - "mediumtrust.avengers.local"
- 在低信任域命名空间创建代理服务,绑定中信任域Ingress Gateway的集群IP:
apiVersion: v1 kind: Service metadata: name: mediumtrust-gw-proxy namespace: lowtrust spec: ports: - port: 443 protocol: TCP targetPort: 443 clusterIP: None # 采用Headless模式自主绑定端点 --- apiVersion: v1 kind: Endpoints metadata: name: mediumtrust-gw-proxy namespace: lowtrust subsets: - addresses: - ip: <中信任域Ingress Gateway的CLUSTER_IP_ADDRESS> ports: - port: 443 name: https
- 在低信任域配置DestinationRule,指定调用中信任域网关时的双向TLS策略:
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: mediumtrust-gw-dr namespace: lowtrust spec: host: "mediumtrust-gw-proxy.lowtrust.svc.cluster.local" trafficPolicy: portLevelSettings: - port: number: 443 tls: mode: ISTIO_MUTUAL sni: "mediumtrust.avengers.local"
- 调整低信任域HTTPD反向代理配置,将原转发目标
https://mediumtrust.avengers.local改为https://mediumtrust-gw-proxy.lowtrust.svc.cluster.local即可,无需在HTTPD中配置任何证书,TLS握手由Istio Sidecar自动完成,也不需要再修改HTTPD Pod的/etc/hosts配置。
方案2:ExternalName Service适配方案(轻量跨域调用)
该方案默认绕过中信任域Ingress Gateway直接访问服务Pod,要兼容原有VS/DR规则可按如下方式调整:
场景A:希望流量直接访问中信任域服务Pod,不走Ingress Gateway
- 修改中信任域的VirtualService配置,在hosts列表中添加低信任域ExternalName服务的FQDN,让Istio识别到跨域请求时触发当前路由规则:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: cr1-avengers-vs namespace: mediumtrust spec: hosts: - "cr1-avengers-app.mediumtrust.svc.cluster.local" # 原有内部域名 - "cr1-avengers-app.lowtrust.svc.cluster.local" # 新增低信任域ExternalName服务的FQDN # 原有路由规则无需调整 http: - route: - destination: host: cr1-avengers-app port: number: 8080
- 在低信任域配置对应DestinationRule,匹配中信任域的mTLS策略:
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: cr1-avengers-dr namespace: lowtrust spec: host: "cr1-avengers-app.lowtrust.svc.cluster.local" trafficPolicy: tls: mode: ISTIO_MUTUAL # 和中信任域的PeerAuthentication策略保持一致
- 确认中信任域的PeerAuthentication配置为PERMISSIVE或STRICT模式,允许跨命名空间的mTLS请求接入即可。
场景B:希望流量仍经过中信任域Ingress Gateway触发原有规则
直接修改ExternalName配置,将externalName指向中信任域Ingress Gateway的域名即可:
apiVersion: v1 kind: Service metadata: name: cr1-avengers-app namespace: "lowtrust" spec: type: ExternalName externalName: "mediumtrust.avengers.local" ports: - port: 443 targetPort: 443 protocol: TCP name: https
同时参照方案1的步骤配置低信任域的DestinationRule,指定调用该服务时使用ISTIO_MUTUAL模式即可。
内容的提问来源于stack exchange,提问作者caffeine_inquisitor
相关产品推荐
相关产品推荐

