Argo CD 프로젝트 작업 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 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

프로젝트는 세분화된 액세스 제어를 위해 사용자 지정 역할을 정의할 수 있습니다. 기능 구성의 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 필드를 사용하여 각 프로젝트의 용도와 이를 사용해야 하는 사용자를 설명합니다.

정기적으로 프로젝트 권한 검토: 정기적으로 프로젝트를 감사하여 제한 사항이 팀 요구 사항 및 보안 요구 사항에 여전히 부합하도록 보장합니다.

추가 리소스