Argocd projects ¶
ArgoCD 中的 Project 功能为应用部署提供了精细化的访问控制与资源隔离能力:通过配置 Project,可精准指定用户或团队在特定命名空间、集群中的部署权限(如创建、同步、删除应用等操作权限),同时实现资源层面的严格隔离,避免不同项目间的资源冲突与干扰,从而在多团队、多应用场景下维持清晰的边界划分。
结合实际场景的最佳实践是:为 Gitea 中的每个 Group 在 ArgoCD 中创建对应的 Project。这种一一映射的方式,既能让各团队仅在自身 Project 内开展部署工作,确保权限与资源的严格隔离,也能通过统一的映射关系简化管理,提升多团队协作时的环境可控性。
Project 简介 ¶
ArgoCD 的 Project 是资源隔离和权限控制的核心单元,主要解决:
- 权限隔离:限制不同团队对应用的操作权限(如部署、同步、删除)。
- 资源边界:控制应用可部署的目标集群、命名空间,以及可使用的 Kubernetes 资源类型。
- 流程规范:定义应用同步策略、源仓库白名单等,确保部署符合团队规范。
单 Project 创建 ¶
1. yaml创建 ¶
示例文档: https://argo-cd.readthedocs.io/en/stable/operator-manual/project.yaml
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: dev-project # Project 名称(建议与团队/环境名一致)
namespace: argocd # Project 必须部署在 argocd 命名空间
spec:
description: "开发环境 Project,供研发团队使用"
# 1. 源仓库白名单:限制应用可拉取代码的仓库(防止恶意仓库)
sourceRepos:
- 'https://gitea.gitops.linuxcdn.com:60000/test/ruoyi-ui-argo.git'
# 2. 目标部署集群与命名空间(资源隔离核心)
destinations:
- server: https://kubernetes.default.svc # 目标集群(本地集群)
namespace: dev-* # 允许部署到所有 dev- 前缀的命名空间
# - server: https://cluster-2.example.com # 其他集群
# namespace: dev-test # 仅允许部署到指定命名空间
# 3. 允许操作的 Kubernetes 资源(白名单)
clusterResourceWhitelist: # 集群级资源白名单
- group: ""
kind: Namespace # 允许创建命名空间
namespaceResourceWhitelist: # 命名空间级资源白名单
- group: "apps"
kind: Deployment
- group: ""
kind: Service
# 4. 禁止操作的资源(黑名单,可选)
namespaceResourceBlacklist:
- group: "batch"
kind: CronJob # 开发环境禁止定时任务,避免资源滥用
# 5. 权限配置:定义角色与策略(RBAC)
roles:
- name: dev-team-lead # 团队负责人角色
description: 可管理应用的全权限
policies:
- p, proj:dev-project:dev-team-lead, applications, *, dev-project/*, allow #-l 允许所有操作
- name: read-only
description: Read-only privileges to my-project
policies:
- p, proj:my-project:read-only, applications, get, my-project/*, allow
groups:
- my-oidc-group
# A role which provides sync privileges to only the guestbook-dev application, e.g. to provide
# sync privileges to a CI system
- name: ci-role
description: Sync privileges for guestbook-dev
policies:
- p, proj:my-project:ci-role, applications, sync, my-project/guestbook-dev, allow
jwtTokens: # 生成 API 令牌(可选,供 CI/CD 调用)
- iat: 1717209600 # 令牌生效时间(Unix 时间戳)
exp: 1748745600 # 令牌过期时间(1 年后)
- name: dev-developer # 普通开发角色
description: 仅允许查看和同步应用
policies:
- p, proj:dev-project:dev-developer, applications, get, dev-project/*, allow # 允许查看
- p, proj:dev-project:dev-developer, applications, sync, dev-project/*, allow # 允许同步
- p, proj:dev-project:dev-developer, applications, delete, dev-project/*, deny # 禁止删除