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访问的情况下,对等问题也是一样的。
我一直在研究 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访问的情况下,对等问题也是一样的。