最新:在TwitterMastodon

保护 Istio 服务网格

cert-manager 可以使用项目 istio-csrIstio 集成。istio-csr 将部署一个代理,负责接收 Istio 网格中所有成员的证书签名请求,并通过 cert-manager 对其进行签名。

istio-csr 是一种代理,允许使用 cert-manager 来保护 Istio 工作负载和控制平面组件。

使用 cert-manager 发行者 签署、交付和续订促进 mTLS 的证书 - 包括集群间和集群内。

安装

请参阅 安装指南,了解如何在新的 kind 集群中设置 istio-csr。

遵循该指南是了解 istio-csr 实践的最佳方式。

低级细节(适用于有经验的 Istio 用户)

⚠️ 如果你只是想尝试 istio-csr,安装指南 是更好的选择!

运行 istio-csr 需要几个步骤和先决条件:

  1. 一个没有安装 Istio 的集群
  2. cert-manager 安装 在集群中
  3. 一个 IssuerClusterIssuer,用于颁发 Istio 证书
  4. istio-csr 已安装(可能通过 helm)
  5. Istio 安装,并需要一些自定义配置,例如使用 仓库 中的示例配置。

为什么需要自定义 Istio 安装清单?

如果你查看 示例 Istio 安装清单 的内容,你会发现几个重要的自定义配置选项。

所需的更改包括将 ENABLE_CA_SERVER 设置为 false,并设置 Istio 将从中请求证书的 caAddress;替换 CA 服务器是 istio-csr 的主要目的!

挂载和静态指定根 CA 也是一个重要的推荐步骤。如果没有手动指定的根 CA,istio-csr 会默认尝试自动发现根 CA,这在理论上可能会导致 签名者劫持攻击,例如,如果签名者的令牌被盗(例如 cert-manager 控制器的令牌)。

Issuer 或 ClusterIssuer?

除非你确定需要一个 ClusterIssuer,否则我们建议从 Issuer 开始,因为更容易理解 Issuer 的访问控制;它们是在命名空间中,因此在范围上自然更有限。

也就是说,如果你将整个 Kubernetes 集群视为一个信任域,那么 ClusterIssuer 将更加自然地适合。最佳选择将取决于你的具体情况。

我们的 安装指南 使用了 Issuer

哪个 Issuer 类型?

无论你选择使用 Issuer 还是 ClusterIssuer,你还需要选择你想要的 Issuer 类型,例如

关键要求是可以将任意值放入 subjectAltName (SAN) X.509 扩展,因为 Istio 会将 SPIFFE ID 放置在那里。

这意味着 ACME Issuer 将无法工作 - 由 Let's Encrypt 等颁发的公开可信证书不允许在 SAN 中放置任意条目,这是出于非常好的理由。

如果你已经在使用 HashiCorp Vault,那么 Vault Issuer 是一个显而易见的选择。如果你想完全控制自己的 PKI,我们建议使用 CA Issuer。最终的选择权在你手中。

在 Istio 之后安装 istio-csr

这是不受支持的,因为这样做非常难以安全地完成。在 Istio 之后安装 istio-csr 很可能无法做到没有停机时间,因为在 Istio 之后安装 istio-csr 需要一段所有 Istio sidecar 都信任旧的 Istio 管理的 CA 和新的 cert-manager 控制的 CA 的时间段。

istio-csr 如何工作?

istio-csr 实现 gRPC Istio 证书服务,该服务验证、授权并签署来自 Istio 工作负载的传入证书签名请求,将所有证书处理路由到集群中安装的 cert-manager。

这与典型安装中的 istiod 行为无缝匹配,同时允许通过 cert-manager 管理证书。