이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 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' # Source namespaces (required for EKS capability) sourceNamespaces: - argocd - team-a-dev - team-a-prod # 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
소스 네임스페이스
EKS Argo CD 기능을 사용하는 경우 spec.sourceNamespaces 필드가 AppProject 정의에 필요합니다. 이 필드는 이 프로젝트를 참조하는 Applications 또는 ApplicationSets를 포함할 수 있는 네임스페이스를 지정합니다.
중요
이 필드는 EKS Argo CD 기능의 필수 필드이며, 이 필드는 선택 사항인 OSS Argo CD와 다릅니다.
기본 AppProject 동작
default AppProject는 sourceNamespaces에 argocd 네임스페이스를 자동으로 포함합니다. 추가 네임스페이스에서 Applications 또는 ApplicationSets를 생성해야 하는 경우 sourceNamespaces 필드를 수정하여 해당 네임스페이스를 추가합니다.
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: default namespace: argocd spec: sourceNamespaces: - argocd # Already included by default - team-a-apps # Add additional namespaces as needed - team-b-apps
사용자 지정 AppProject 구성
사용자 지정 AppProject를 생성할 경우 Applications 또는 ApplicationSets를 생성하려는 argocd 시스템 네임스페이스 및 기타 네임스페이스를 수동으로 포함해야 합니다.
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a-project namespace: argocd spec: description: Applications for Team A # Required: Manually specify all namespaces sourceNamespaces: - argocd # ArgoCD system namespace (required) - team-a-dev # Custom namespace for dev Applications - team-a-prod # Custom namespace for prod Applications # Source repositories this project can deploy from sourceRepos: - 'https://github.com/my-org/team-a-*' # Destination restrictions destinations: - namespace: 'team-a-*' server: https://kubernetes.default.svc
참고
sourceNamespaces에서 네임스페이스를 생략하면 해당 네임스페이스의 Applications 또는 ApplicationSets가 이 프로젝트를 참조할 수 없으므로 배포에 실패합니다.
대상 제한 사항
애플리케이션을 배포할 수 있는 위치를 제한합니다.
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
프로젝트는 세분화된 액세스 제어를 위해 사용자 지정 역할을 정의할 수 있습니다. 기능 구성의 AWS 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 통합 구성
-
애플리케이션 생성 - 프로젝트 내에서 애플리케이션 생성
-
ApplicationSet 사용 - 다중 클러스터 배포를 위해 프로젝트와 함께 ApplicationSet 사용
-
Argo CD 프로젝트 설명서
- 전체 업스트림 참조