如何使用 istio 为外部服务使用自定义客户端证书?

cha*_*eyk 3 kubernetes istio

我需要设置从 kubernetes pod 到外部服务的相互 tls 通信。我的系统正在运行 istio 系统。

我找到了关于这个的参考。

https://istio.io/docs/reference/config/networking/v1alpha3/destination-rule/#TLSSettings

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: external-mtls
spec:
  host: *.external.com
  trafficPolicy:
    tls:
      mode: MUTUAL
      clientCertificate: /etc/certs/myclientcert.pem
      privateKey: /etc/certs/client_private_key.pem
      caCertificates: /etc/certs/rootcacerts.pem
Run Code Online (Sandbox Code Playgroud)

根据此文档,我需要做的就是设置模式 MUTUAL(不是 ISTIO_MUTUAL)并设置证书文件。如您所见,clientCertificateprivateKeycaCertificates是本地文件路径。

我认为它们应该在特使代理的磁盘中。但是我找不到将我的证书文件放入特使代理卷的方法。

我怎样才能做到这一点?

cha*_*eyk 5

我找到了解决方案。

  1. 创建秘密或配置映射
kubectl create secret generic my-cert --from-file=cert1.crt --from-file=cert2.crt
Run Code Online (Sandbox Code Playgroud)
  1. 使用sidecar.istio.io/userVolumeMountsidecar.istio.io/userVolume注释 pod 或部署
annotations:                                                                                       
  sidecar.istio.io/userVolumeMount: '[{"name":"my-cert", "mountPath":"/etc/my-cert", "readonly":true}]'
  sidecar.istio.io/userVolume: '[{"name":"my-cert", "secret":{"secretName":"my-cert"}}]'
Run Code Online (Sandbox Code Playgroud)

关于这些和其他注释的文档:https : //preliminary.istio.io/docs/reference/config/annotations/

完毕。它已安装到特使代理 pod。