Argo 与多个 GCP 项目

Argo with multiple GCP projects

我一直在研究 Argo 作为 Gitops 风格的 CD 系统。它看起来真的很整洁。也就是说,我不了解如何在多个 GCP 项目中使用 Argo。具体来说,计划是拥有依赖于环境的项目(即生产、阶段开发)。似乎 Argo 并不是为了协调跨环境依赖集群的部署而设计的,是吗?

你的问题主要是关于安全管理的。你有几种可能性和几个 views/level 安全点。

1.项目分离

最简单和安全的方法是在每个项目中使用 Argo 运行,而无需在每个环境之间使用 relation/bridge。没有安全风险或部署在错误的项目上。默认项目隔离(VPC 和 IAM 角色)就足够了。

但它意味着在多个集群上部署和维护同一个应用程序,并为多个集群付费(Dev、Staging 和 prod CD 的使用频率不同)

在安全方面,可以使用Compute Engine默认服务账号进行授权,也可以依赖Workload identity(首选方式)

2。命名空间隔离

另一种方法是只有一个项目,上面部署了一个集群,每个交付项目有一个 kubernetes 命名空间。顺便说一句,你可以为你公司的所有项目重复使用同一个集群。

您仍然需要在每个命名空间中更新和维护 Argo,但集群管理更容易,因为节点是相同的。

在安全方面,您可以为每个命名空间使用 Workload identity (因此在交付项目中授权每个命名空间有 1 个服务帐户)并保持权限隔离

在这里,权衡是私有 IP 访问。如果您的部署需要访问交付项目内的私有 IP(出于测试目的或访问私有 K8S master),您必须设置 VPC 对等互连(每个项目限制为 25 个对等互连)或设置共享VPC.

3。服务帐号隔离

不推荐使用最新的解决方案,但它最容易维护。对于所有环境,您只有一个 GKE 集群,并且只有 1 个名称空间部署了 Argo。通过配置,您可以告诉 Argo 使用特定的服务帐户来访问交付项目(服务帐户密钥文件(不推荐的解决方案)存储在 GKE 秘密或秘密管理器中,或者(更好)通过使用服务帐户模拟) .

在这里,您还为每个交付项目授权了 1 个服务帐户。并且在交付项目中需要私有IP访问的情况下,对等问题也是一样的。