如何通过istio将自定义客户端证书用于外部服务?

时间:2019-08-04 03:31:00

标签: 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

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

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

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以运行istioctl kube-inject -f your-deployment.yaml > your-deployment-with-istio-sidecar.yaml

然后编辑your-deployment-with-istio-sidecar.yaml并添加一些秘密证书的安装。然后根据您的证书创建机密。

或者,创建您的sidecar注入模板,请参见https://istio.io/blog/2019/data-plane-setup/#manual-injection

为证书创建机密的示例:https://istio.io/docs/tasks/traffic-management/egress/egress-gateway-tls-origination/#redeploy-the-egress-gateway-with-the-client-certificates

根据https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod

所述的秘密安装卷

答案 1 :(得分:1)

我找到了解决方法。

  1. 创建机密或配置映射
kubectl create secret generic my-cert --from-file=cert1.crt --from-file=cert2.crt
  1. 使用 sidecar.istio.io/userVolumeMount sidecar.istio.io/userVolume
  2. 注释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"}}]'

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

完成。它已安装到特使代理吊舱。