问题描述
我一直在研究Argo作为Gitops风格的CD系统。看起来真的很整洁。也就是说,我不了解如何在多个GCP项目中使用Argo。具体来说,该计划是制定与环境相关的项目(即产品,阶段dev)。看来Argo并非旨在协调跨依赖环境的群集的部署,不是吗?
解决方法
您的问题主要是关于安全管理。您有几种可能,有几种观点/安全级别。
1。项目隔离
最简单和安全的方法是让Argo在每个项目中运行,而没有每个环境之间的关系/桥梁。没有安全风险或部署在错误的项目上。默认项目隔离(VPC和IAM角色)就足够了。
但这意味着在多个群集上部署和维护同一应用程序,并支付多个群集费用(Dev,Staging和prod CD的使用频率不同)
在安全性方面,您可以使用Compute Engine默认服务帐户进行授权,也可以依靠Workload identity(首选方式)
2。命名空间隔离
另一种方法是只在一个项目上部署一个集群,每个交付项目都使用一个kubernetes命名空间。顺便说一下,您可以为公司中的所有项目重用同一群集。
您仍然必须在每个名称空间中更新和维护Argo,但是由于节点相同,集群管理更加容易。
在安全性方面,您可以为每个命名空间使用Workload identity (因此,在交付项目中为每个名称空间授权了1个服务帐户),并保持权限隔离
这里,要权衡的是私有IP访问。如果您的部署需要访问交付项目中的私有IP(出于测试目的或访问私有K8S主设备),则必须设置VPC对等(每个项目仅限于25个对等)或设置共享VPC。
3。服务帐户隔离
不建议使用最新的解决方案,但这是最容易维护的。您只有一个适用于所有环境的GKE集群,并且只有1个部署了Argo的名称空间。通过配置,您可以告诉Argo使用特定的服务帐户来访问交付项目(使用存储在GKE机密或密钥管理器中的服务帐户密钥文件(不建议使用的解决方案),或者(更好的)使用服务帐户模拟)
在此,您还为每个交付项目授权了1个服务帐户。在交付项目中需要私有IP访问的情况下,对等问题也相同。