如何配置Istio使用客户端证书向要求客户端认证的外部HTTPS服务发起请求
配置方案说明
你的需求完全可以通过Istio现有资源实现,核心调整点如下:
1. 版本兼容与基础要求
- Istio 1.14及更高版本支持
SIMPLETLS模式下的客户端证书挂载,如果你使用的版本低于1.14,需要将DestinationRule中的tls.mode改为MUTUAL - 你配置的
credentialName: app-secret对应的Kubernetes Secret必须部署在业务Pod所在的命名空间(无需放在istio-system命名空间),Secret类型必须为kubernetes.io/tls,需包含以下字段:tls.crt:你的客户端证书内容tls.key:客户端证书对应的私钥- 可选字段
ca.crt:签发目标服务证书的自定义CA根证书,配置后可以关闭insecureSkipVerify: true提升安全性
2. 现有配置修改点
你当前的ServiceEntry配置是符合TLS origination要求的,80端口映射到443的逻辑无需调整,仅需要修改DestinationRule的TLS配置:
apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: app-dr spec: host: app.k8s.ssg-masamune.com trafficPolicy: portLevelSettings: - port: number: 80 tls: # 1.14+版本保留SIMPLE即可,低于该版本改为MUTUAL mode: SIMPLE credentialName: app-secret # 配置ca.crt后可删除以下行,启用服务端证书校验 insecureSkipVerify: true sni: app.k8s.ssg-masamune.com subjectAltNames: - app
3. 效果验证
配置下发完成后,直接在业务Pod内通过HTTP协议访问目标服务即可,Istio会自动完成TLS握手并携带指定客户端证书完成身份校验,无需修改业务代码。
内容的提问来源于stack exchange,提问作者Jason Hirata
相关产品推荐
相关产品推荐

