拥有多个GCP项目的Argo

问题描述

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...