首先,mTLS 和 TLS/SSL 终止并不完全相同。mTLS 是相互身份验证 ,这意味着客户端对服务器进行身份验证,而服务器对客户端进行身份验证。
通常,SSL 终止负责服务器对客户端的身份验证,但它需要客户端支持服务器才能对客户端进行身份验证。
此外,证书颁发机构和我相信您所说的证书管理器是两个不同的东西。
对于 Kubernetes,您可以使用Nginx 等入口控制器在入口上设置TLS/SSL 终止。您可以完全使用带有您自己的证书颁发机构的自签名证书。唯一的问题是您的请求不会被验证,而是您的客户端/浏览器,除非 CA(证书颁发机构)被添加为受信任的实体。
现在,对于 mTLS,您不必关心是否使用完全相同的 CA、Cert 和 Key 来进行两种身份验证。但是,您必须强制您的入口对客户端进行身份验证,并且使用 Nginx 入口控制器,您可以使用以下注释来做到这一点:
nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
nginx.ingress.kubernetes.io/auth-tls-secret: "default/mycerts"
您将在 K8s 中创建上述秘密,如下所示:
kubectl create secret generic mycerts --from-file=tls.crt=server.crt --from-file=tls.key=server.key --from-file=ca.crt=ca.crt
此博客中的更多详细信息。
注意:Istio、Linkerd和Consul等服务网格在您的服务之间开箱即用地支持 mTLS。
✌️