Argo CD 사용하기

Argo CD 사용하기

Argo CD를 사용해 Git 리포지토리에서 애플리케이션을 정의하고 Kubernetes 클러스터에 자동으로 동기화하는 방법을 설명합니다.

출처: 문서

본문

Argo CD를 사용하면 Git 리포지토리에서 애플리케이션을 정의하고 Argo CD가 이를 Kubernetes 클러스터에 자동으로 동기화합니다. 이를 통해 자동 드리프트 감지와 함께 선언적이고 버전 관리되는 애플리케이션 배포가 가능합니다.

사전 요구 사항

Argo CD를 사용하기 전에 다음이 필요합니다.

  • Argo CD 캐퍼빌리티가 생성된 EKS 클러스터(Argo CD 캐퍼빌리티 생성 참고)
  • Kubernetes 매니페스트를 포함하는 Git 리포지토리
  • 클러스터와 통신하도록 구성된 kubectl

일반적인 작업

다음 항목이 일반적인 Argo CD 작업을 안내합니다.

  • 리포지토리 접근 구성 - AWS Secrets Manager, AWS CodeConnections 또는 Kubernetes 시크릿으로 Argo CD가 Git 리포지토리에 접근하도록 구성
  • 대상 클러스터 등록 - Argo CD가 애플리케이션을 배포할 대상 클러스터 등록
  • Argo CD Projects 작업 - 멀티 테넌트 환경에서 Projects를 사용해 애플리케이션을 구성하고 보안 경계를 강제
  • Argo CD 설정 구성 - 커스텀 리소스용 커스텀 상태(health) 검사를 포함해 argocd-cm ConfigMap으로 Argo CD 동작 구성
  • Application 생성 - 자동 또는 수동 동기화 정책으로 Git 리포지토리에서 배포하는 Application 생성
  • ApplicationSet 사용 - 템플릿과 제너레이터를 사용해 여러 환경이나 클러스터에 걸쳐 애플리케이션을 배포하는 ApplicationSet 사용

Argo CD UI 접근

EKS 콘솔을 통해 Argo CD UI에 접근합니다.

  1. Amazon EKS 콘솔을 엽니다.
  2. 클러스터를 선택합니다.
  3. Capabilities 탭을 선택합니다.
  4. Argo CD를 선택합니다.
  5. Open Argo CD UI를 선택합니다.

UI는 시각적 애플리케이션 토폴로지, 동기화 상태와 이력, 리소스 상태(health)와 이벤트, 수동 동기화 컨트롤, 애플리케이션 관리를 제공합니다.

Argo CD 엔드포인트 URL

Argo CD 캐퍼빌리티를 만들면 Argo CD UI와 API 모두에 대한 고유 엔드포인트를 받습니다. 엔드포인트 호스트 이름은 결정적입니다. 즉 캐퍼빌리티 이름, 클러스터 이름, AWS 계정 ID, AWS Region 등 이미 알고 있는 값을 사용합니다. 캐퍼빌리티를 삭제하고 같은 클러스터 이름과 캐퍼빌리티 이름으로 다시 만들면 같은 엔드포인트를 받습니다. 호스트 이름은 예측 가능하므로 미리 구성할 수 있습니다. 예를 들어 캐퍼빌리티 프로비저닝이 끝나기 전에 DNS, 자동화, Git 웹훅 통합을 미리 구성할 수 있습니다. 어떤 캐퍼빌리티에 대해서도 describe-capability의 serverUrl 값이 결정적인 엔드포인트입니다.

참고

엔드포인트는 재사용되므로 이전 캐퍼빌리티를 가리키던 통합(Git 웹훅, 토큰, DNS 레코드)은 인스턴스가 변경되었다는 표시 없이 새 캐퍼빌리티에 자동으로 연결됩니다. 캐퍼빌리티를 다시 만든 후에는 이러한 통합을 다시 검증하고 이전 인스턴스와 공유한 웹훅 시크릿이나 토큰을 교체하세요.

엔드포인트 검색

캐퍼빌리티의 정확한 엔드포인트를 얻으려면 describe-capability 명령을 사용해 serverUrl 값을 읽으세요. region-code, my-cluster, my-argocd를 자신의 값으로 바꾸세요.

aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd \
  --query 'capability.configuration.argoCd.serverUrl' \
  --output text

참고

serverUrl 필드와 엔드포인트의 DNS 레코드는 캐퍼빌리티 상태가 ACTIVE로 변경된 후 사용할 수 있습니다.

엔드포인트 형식

Argo CD 엔드포인트는 다음 형식을 사용합니다.

https://capability-name-hash-account-id.eks-capabilities.region-code.amazonaws.com

호스트 이름은 다음 구성 요소로 이루어집니다.

  • capability-name - Argo CD 캐퍼빌리티의 이름. 소문자로 정규화되며 각 밑줄(_)은 하이픈(-)으로 바뀝니다. 정규화된 이름이 41자를 초과하면 41자로 잘립니다.
  • hash - 호스트 이름을 고유하게 만드는 8자 16진수 값. 캐퍼빌리티 이름과 클러스터 이름의 SHA-256 해시의 처음 8자입니다. 이름은 슬래시(capability-name/cluster-name)로 연결됩니다. 캐퍼빌리티를 만들 때 지정한 정확한 이름을 사용하세요. 이 값은 고유성만 제공하며 보안 제어는 아닙니다.
  • account-id - 12자리 AWS 계정 ID.
  • eks-capabilities.region-code.amazonaws.com - AWS 리전의 EKS 캐퍼빌리티 서비스 도메인.

예를 들어 us-west-2 리전의 계정 111122223333에서 클러스터 my-cluster에 있는 my-argocd라는 캐퍼빌리티의 엔드포인트는 다음과 유사합니다.

https://my-argocd-dc855fdf-111122223333.eks-capabilities.us-west-2.amazonaws.com

호스트 이름은 정규화된 캐퍼빌리티 이름을 사용하지만, 해시는 지정한 원래 이름을 사용합니다. 예를 들어 클러스터 my-cluster의 캐퍼빌리티 Payments_GitOps는 호스트 이름에서 payments-gitops로 정규화되고, 해시는 원래 문자열 Payments_GitOps/my-cluster에서 나옵니다.

https://payments-gitops-4ce0b382-111122223333.eks-capabilities.us-west-2.amazonaws.com

참고

AWS 리전의 정확한 엔드포인트를 확인하려면 describe-capability 출력을 사용하세요.

hash 구성 요소는 직접 계산할 수 있습니다. Linux에서는 sha256sum, macOS에서는 shasum -a 256을 사용하세요. 다음 명령은 예시 캐퍼빌리티 my-argocd와 클러스터 my-cluster를 사용합니다. 캐퍼빌리티를 만들 때 지정한 정확한 이름으로 대체하세요.

# Linux
printf '%s' "my-argocd/my-cluster" | sha256sum | cut -c1-8

# macOS
printf '%s' "my-argocd/my-cluster" | shasum -a 256 | cut -c1-8

두 명령 모두 dc855fdf를 반환합니다.

엔드포인트 접근과 보안

엔드포인트 호스트 이름은 시크릿이 아니며, 이를 안다고 해서 Argo CD 인스턴스에 접근할 수 있는 것은 아닙니다. 호스트 이름은 캐퍼빌리티 Amazon 리소스 이름(ARN)에 이미 나타나는 것과 같은 비시크릿 정보를 노출합니다. create-capability, describe-capability, list-capabilities 작업이 이 ARN을 반환합니다. AWS Identity Center 인증과 Argo CD 역할 기반 접근 제어(RBAC)가 Argo CD UI와 API에 대한 접근을 제어합니다.

프라이빗 엔드포인트 접근을 구성하면 호스트 이름은 VPC 엔드포인트와 연결된 프라이빗 IP 주소로만 해석됩니다. VPC 또는 연결된 네트워크에서만 엔드포인트에 접근할 수 있습니다. 자세한 내용은 Argo CD용 프라이빗 엔드포인트 접근 구성을 참고하세요.

업스트림 문서

Argo CD 기능에 대한 자세한 정보:

  • Argo CD 문서 - 완전한 사용자 가이드
  • Application Spec - 전체 Application API 레퍼런스
  • ApplicationSet 가이드 - ApplicationSet 패턴과 예시
  • Argo CD GitHub - 소스 코드와 예시

더 알아보기 (Learn more)