跳转至

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  # 禁止删除