在微服务架构(MSA)环境中,服务间通信的安全性再怎么强调也不为过。服务网格的代表Istio通过mTLS(相互TLS)优雅地解决了这个问题。这就像为每个服务配备了一位无形的保镖。💂♂️💂♀️
然而,在Istio中配置mTLS时,你会遇到两种模式:ISTIO_MUTUAL和MUTUAL。它们相似的名称可能会让你觉得它们是一样的,或者存在微妙的差异。
今天,我们将明确剖析这两种模式的关键区别以及何时使用它们!
TL;DR: 核心摘要 📝
- ISTIO_MUTUAL: Istio 自动颁发和管理证书的方式(便捷 ✨)
- MUTUAL: 用户需要手动准备并提供证书的方式(灵活性/控制力 🔑)

🤔 ISTIO_MUTUAL: 让Istio处理一切!
ISTIO_MUTUAL是使用Istio时最标准和推荐的mTLS方式。
使用此模式,Istio控制平面中内置的CA(证书颁发机构),即istiod,将自动处理所有事情。
- 自动证书颁发: 当创建新的工作负载(Pod)时,istiod会自动颁发与该工作负载服务身份匹配的证书。
- 安全分发: 颁发的证书和私钥会安全地传递给Sidecar代理(Envoy)。
- 自动续订(Rotation): 当证书有效期临近时,现有证书会自动替换为新证书,从而在不中断服务的情况下保持安全性。⚙️
优点:
- 极大的便利性: 完全无需担心证书的创建、管理和续订。只需说“开启mTLS!”即可。
- 强大的安全性: Istio以经过验证的方式自动化整个过程,减少了人为错误导致安全事故的可能性。
在大多数情况下,您将使用ISTIO_MUTUAL,仅凭此即可构建足够强大的安全性。
YAML配置示例
这是一个使用PeerAuthentication资源将ISTIO_MUTUAL模式应用于特定命名空间(default)中所有工作负载的示例。
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: "default-mtls"
namespace: "default"
spec:
mtls:
mode: ISTIO_MUTUAL
是的,就是这样!真的很简单,不是吗? 😉
🧐 MUTUAL: 我要自己管理!
MUTUAL模式用于用户需要直接负责证书管理的情况。
什么时候需要它呢?
- 公司已经有自己构建并使用的外部CA(私有CA)时。
- 出于安全规定,有合规性要求只能使用特定CA颁发的证书时。
- 希望完全控制证书的生命周期或规范时。
要使用此模式,用户必须手动准备以下内容并提供给工作负载:
- 服务器证书 (tls.crt)
- 服务器私钥 (tls.key)
- CA链证书 (ca.crt)
这些文件必须作为Kubernetes Secret创建,挂载到工作负载中,并告知Istio使用这些Secret。
缺点:
- 高管理成本: 证书创建、Secret管理、定期续订都需要手动处理。🥵
- 复杂性增加: 配置过程复杂,证书管理不当可能导致服务故障或安全漏洞。
YAML配置示例
MUTUAL模式主要用于DestinationRule中,以指定客户端与特定目标(服务器)通信时应使用的证书。
1. 首先,使用准备好的证书文件创建Secret。
# 创建一个名为 httpbin-credential 的 Secret
kubectl create -n default secret tls httpbin-credential
--key=client.key.pem
--cert=client.cert.pem
--cacert=ca.cert.pem
2. 在DestinationRule中指定MUTUAL模式和Secret。
这是一个配置示例,当向httpbin.default.svc.cluster.local服务发送请求时,使用刚刚创建的httpbin-credential Secret中的证书。
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: "egress-mtls-httpbin"
namespace: "default"
spec:
host: httpbin.default.svc.cluster.local
trafficPolicy:
tls:
mode: MUTUAL
credentialName: httpbin-credential # 在第1步中创建的 Secret 名称
sni: httpbin.default.svc.cluster.local
与ISTIO_MUTUAL相比,这显然需要更多的手动操作。
从全局视角看:何时选择什么?
理解了两种模式的区别后,现在可以从整体角度决定何时选择哪种模式。
| 特点 | ISTIO_MUTUAL | MUTUAL |
|---|---|---|
| 证书管理主体 | Istio (istiod) 🤖 | 用户 🙋♂️ |
| 配置复杂性 | 低(简单) | 高(复杂) |
| 管理便利性 | 非常高 | 低 |
| 使用场景 | 通用服务网格环境,快速应用安全 | 与现有PKI基础设施集成,遵守严格的安全规定 |
| 推荐对象 | 大多数用户 | 有特定需求的高级用户 |
最终,选择的标准是“谁应该控制证书?”
如果您希望将一切都交给Istio的自动化生态系统,请选择ISTIO_MUTUAL;如果您需要将Istio与现有的安全策略和基础设施集成,请选择MUTUAL。
结论 🚀
ISTIO_MUTUAL和MUTUAL不仅仅是名称相似,它们是决定证书管理责任主体的关键设置。
- ISTIO_MUTUAL: 享受Istio提供的强大自动化优势。
- MUTUAL: 在有特殊要求(如外部CA集成)时使用。
请准确了解您的环境和需求,选择正确的mTLS模式,以构建更安全、更可靠的微服务环境!
发表回复