帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 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 字段说明每个项目的用途以及适用人员。
定期审查项目权限:定期审核项目,确保限制始终符合团队需求和安全性要求。
其他资源
-
配置 Argo CD 权限:配置 RBAC 和 Identity Center 集成
-
创建应用程序:在项目内创建应用程序
-
使用 ApplicationSets:将 ApplicationSets 与项目结合使用,以进行多集群部署
-
Argo CD Projects Documentation
:完整的上游参考