使用 Argo CD 项目 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

使用 Argo CD 项目

Argo CD 项目(AppProject)为应用程序提供逻辑分组和访问控制。项目定义了应用程序可以使用哪些 Git 存储库、目标集群和命名空间,从而在 Argo CD 共享实例中实现多租户和安全边界。

何时使用项目

使用项目以:

  • 按团队、环境或业务部门分离应用程序

  • 限制团队可以从中部署哪些存储库

  • 限制团队可以部署到哪些集群和命名空间

  • 强制执行资源配额和允许的资源类型

  • 提供带护栏的应用程序自助部署

默认项目

每个 Argo CD 功能都包含 default 项目,该项目允许访问所有存储库、集群和命名空间。这对于初始测试很有用,但对于生产用途,请创建具有明确限制的专用项目。

有关默认项目配置以及如何对其进行限制的详细信息,请参阅 Argo CD 文档中的 The Default Project

创建项目

通过将 AppProject 资源应用到集群来创建项目。

示例:团队特定项目

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a namespace: argocd spec: description: Applications for Team A # Source repositories this project can deploy from sourceRepos: - 'https://github.com/my-org/team-a-*' - 'https://github.com/my-org/shared-libs' # Destination clusters and namespaces destinations: - name: dev-cluster namespace: team-a-dev - name: prod-cluster namespace: team-a-prod # Allowed resource types clusterResourceWhitelist: - group: '' kind: Namespace namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service - group: '' kind: ConfigMap

应用项目:

kubectl apply -f team-a-project.yaml

项目配置

源存储库

控制此项目中的应用程序可以使用哪些 Git 存储库:

spec: sourceRepos: - 'https://github.com/my-org/app-*' # Wildcard pattern - 'https://github.com/my-org/infra' # Specific repo

您可以使用通配符和否定模式(! 前缀)来允许或拒绝特定的存储库。有关详细信息,请参阅 Argo CD 文档中的 Managing Projects

目标限制

限制可以部署应用程序的位置:

spec: destinations: - name: prod-cluster # Specific cluster by name namespace: production - name: '*' # Any cluster namespace: team-a-* # Namespace pattern
重要

对于生产项目,请使用特定的集群名称和命名空间模式,而不是通配符。这样可以防止意外部署到未经授权的集群或命名空间。

您可以使用通配符和否定模式来控制目标。有关详细信息,请参阅 Argo CD 文档中的 Managing Projects

资源限制

控制可以部署的 Kubernetes 资源类型:

集群范围资源

spec: clusterResourceWhitelist: - group: '' kind: Namespace - group: 'rbac.authorization.k8s.io' kind: Role

命名空间范围资源

spec: namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service - group: '' kind: ConfigMap - group: 's3.services.k8s.aws' kind: Bucket

使用黑名单拒绝特定资源:

spec: namespaceResourceBlacklist: - group: '' kind: Secret # Prevent direct Secret creation

将应用程序分配给项目

创建应用程序时,在 spec.project 字段中指定项目:

apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app namespace: argocd spec: project: team-a # Assign to team-a project source: repoURL: https://github.com/my-org/my-app path: manifests destination: name: prod-cluster namespace: team-a-prod

未指定项目的应用程序将使用 default 项目。

项目角色和 RBAC

项目可以定义自定义角色以实现精细访问控制。在功能配置中将项目角色映射到 Amazon Identity Center 用户和用户组,以控制哪些人可以同步、更新或删除应用程序。

示例:具有开发人员和管理员角色的项目

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a namespace: argocd spec: sourceRepos: - '*' destinations: - name: '*' namespace: 'team-a-*' roles: - name: developer description: Developers can sync applications policies: - p, proj:team-a:developer, applications, sync, team-a/*, allow - p, proj:team-a:developer, applications, get, team-a/*, allow groups: - team-a-developers - name: admin description: Admins have full access policies: - p, proj:team-a:admin, applications, *, team-a/*, allow groups: - team-a-admins

有关项目角色、用于 CI/CD 管道的 JWT 令牌以及 RBAC 配置的详细信息,请参阅 Argo CD 文档中的 Project Roles

常见模式

基于环境的项目

为每个环境创建单独的项目:

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: production namespace: argocd spec: sourceRepos: - 'https://github.com/my-org/*' destinations: - name: prod-cluster namespace: '*' # Strict resource controls for production clusterResourceWhitelist: [] namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service

基于团队的项目

使用专用项目隔离团队:

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: platform-team namespace: argocd spec: sourceRepos: - 'https://github.com/my-org/platform-*' destinations: - name: '*' namespace: 'platform-*' # Platform team can manage cluster resources clusterResourceWhitelist: - group: '*' kind: '*'

多集群项目

使用一致的策略部署到多个集群:

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: global-app namespace: argocd spec: sourceRepos: - 'https://github.com/my-org/global-app' destinations: - name: us-west-cluster namespace: app - name: eu-west-cluster namespace: app - name: ap-south-cluster namespace: app

最佳实践

从限制性项目开始:从范围较小的权限开始,然后根据需要进行扩展,而不是一开始就授予广泛的访问权限。

使用命名空间模式:在命名空间限制中使用通配符(例如 team-a-*),在保持边界的同时提供灵活性。

隔离生产项目:为生产环境使用具有更严格控制和手动同步策略的专用项目。

记录项目用途:使用 description 字段说明每个项目的用途以及适用人员。

定期审查项目权限:定期审核项目,确保限制始终符合团队需求和安全性要求。

其他资源