You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:22:55