0

我一直在研究 Argo 作为 Gitops 风格的 CD 系统。它看起来真的很整洁。也就是说,我不了解如何在多个 GCP 项目中使用 Argo。具体来说,该计划是有依赖于环境的项目(即 prod、stage dev)。似乎 Argo 并非旨在协调跨环境依赖集群的部署,或者是这样吗?

4

1 回答 1

2

您的问题主要是关于安全管理。您有多种可能性和多种观点/安全级别。

1.项目隔离

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

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

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

2.命名空间隔离

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

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

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

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

3.服务账户隔离

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

此外,您还为每个交付项目授权了 1 个服务帐户。在交付项目中需要私有 IP 访问的情况下,对等问题是相同的。

于 2020-08-16T19:16:16.600 回答