Istio中如何将外部HTTPS流量路由至内部HTTP服务及证书验证
Istio同Pod内HTTPS请求转发的证书验证处理
针对你描述的场景——Pod内容器Y发起的https://www.example.com/*请求通过Istio边车转发到同Pod内容器X的8080端口,证书验证的核心是解决容器Y与Istio边车之间的HTTPS信任问题,以下是三种可行方案:
方案1:让容器Y信任Istio默认根证书(生产环境推荐)
Istio边车会对出站HTTPS请求做SNI劫持,重新加密后转发到内部服务,但容器Y默认不信任边车的自签根证书,因此需要将Istio的根证书注入到容器Y的信任存储中:
步骤1:配置流量转发规则
创建VirtualService拦截www.example.com的流量,转发到同Pod内的容器X:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: example-redirect spec: hosts: - "www.example.com" http: - route: - destination: host: localhost # 同Pod内可直接用localhost访问容器X port: number: 8080
步骤2:注入Istio根证书到容器Y
Istio默认将根证书挂载在边车容器的/var/run/secrets/istio/root-cert.pem,你可以通过修改Pod的Deployment配置,将该证书拷贝到容器Y的系统信任目录并更新证书列表:
containers: - name: container-y image: your-app-image:tag command: ["/bin/sh", "-c"] args: - > cp /var/run/secrets/istio/root-cert.pem /usr/local/share/ca-certificates/istio-root.crt && update-ca-certificates && exec your-app-start-command # 替换为容器Y的实际启动命令 volumeMounts: - name: istio-certs mountPath: /var/run/secrets/istio readOnly: true volumes: - name: istio-certs secret: secretName: istio.default # Istio默认根证书的Secret名称
配置完成后,容器Y发起的HTTPS请求会信任Istio边车的证书,验证通过后正常转发到容器X。
方案2:临时禁用证书验证(仅测试场景)
如果只是测试需求,可以直接关闭容器Y的HTTPS证书校验,比如:
- 使用
curl时添加--insecure参数:curl --insecure https://www.example.com - Java应用添加JVM参数:
-Djavax.net.ssl.trustStore=/dev/null - Python
requests库设置verify=False
⚠️ 此方案存在严重安全风险,绝对禁止在生产环境使用。
方案3:使用自定义证书替代Istio默认证书
若需要使用与www.example.com匹配的合法证书,可按以下步骤配置:
步骤1:创建自定义证书的Secret
将你的证书文件(example.crt)和私钥文件(example.key)创建为K8s Secret:
kubectl create secret tls example-cert --cert=example.crt --key=example.key
步骤2:配置DestinationRule使用自定义证书
让Istio边车使用该证书加密转发到容器X的流量:
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: example-dest-rule spec: host: localhost trafficPolicy: tls: mode: SIMPLE credentialName: example-cert # 对应上面创建的Secret名称
步骤3:让容器Y信任自定义证书
将自定义证书拷贝到容器Y的信任存储(同方案1的步骤2,替换证书路径即可),确保容器Y验证证书时通过。
额外注意事项
- 确认Pod已被Istio Sidecar正确注入(检查Pod内是否存在
istio-proxy容器) - 同Pod内的流量转发无需额外配置服务发现,直接使用
localhost即可访问容器X
内容的提问来源于stack exchange,提问作者wollow
相关产品推荐
相关产品推荐

