Argo CD 고려 사항 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.

Argo CD 고려 사항

이 주제에서는 계획, 권한, 인증 및 다중 클러스터 배포 패턴을 포함하여 Argo CD에 대한 EKS 기능 사용 시 중요한 고려 사항을 다룹니다.

계획

Argo CD를 배포하기 전에 다음을 고려하세요.

리포지토리 전략: 애플리케이션 매니페스트가 저장될 위치(CodeCommit, GitHub, GitLab, Bitbucket)를 결정합니다. 여러 환경에 대한 리포지토리 구조 및 분기 전략을 계획합니다.

RBAC 전략: 관리자, 편집기 또는 최종 사용자 액세스 권한을 보유해야 하는 팀 또는 사용자를 계획합니다. AWS Identity Center 그룹 또는 Argo CD 역할에 매핑합니다.

다중 클러스터 아키텍처: 단일 Argo CD 인스턴스에서 여러 클러스터를 관리할지 결정합니다. Argo CD에 대해 전용 관리 클러스터를 사용하는 방법을 고려합니다.

Application 구성: Application 및 ApplicationSet를 구조화하는 방법을 계획합니다. 프로젝트를 사용하여 팀 또는 환경별로 애플리케이션을 구성하는 방법을 고려합니다.

동기화 정책: 애플리케이션이 자동으로 동기화되어야 하는지 아니면 수동 승인이 필요한지 결정합니다. 자동화된 동기화는 개발에서 일반적이고, 프로덕션의 경우 수동으로 진행됩니다.

권한

IAM 기능 역할, 신뢰 정책 및 보안 모범 사례에 대한 자세한 내용은 Amazon EKS 기능 IAM 역할EKS 기능에 대한 보안 고려 사항 섹션을 참조하세요.

IAM 기능 역할 개요

Argo CD 기능 리소스를 생성하는 경우 IAM 기능 역할을 제공합니다. ACK와 달리 Argo CD는 AWS 리소스를 직접 관리하지 않고 주로 Kubernetes 리소스를 관리합니다. 그러나 IAM 기능 역할은 다음 경우에 필요합니다.

  • CodeCommit에서 프라이빗 Git 리포지토리에 액세스

  • 인증을 위해 AWS Identity Center와 통합

  • AWS Secrets Manager에서 보안 암호에 액세스(구성된 경우)

  • 다른 EKS 클러스터에 교차 클러스터 배포

CodeCommit 통합

CodeCommit 리포지토리를 사용하는 경우 읽기 권한으로 정책을 연결합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:GitPull" ], "Resource": "*" } ] }
중요

프로덕션에서 사용하는 경우 "*"를 사용하는 대신 Resource 필드를 특정 리포지토리 ARN으로 제한합니다.

예제:

"Resource": "arn:aws:codecommit:us-west-2:111122223333:my-app-repo"

이때 관리해야 하는 리포지토리로만 Argo CD의 액세스를 제한합니다.

Secrets Manager 통합

Secrets Manager에 리포지토리 자격 증명을 저장하는 경우 읽기 액세스를 위해 정책을 연결합니다.

arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess

이 정책에는 secretsmanager:GetSecretValue, secretsmanager:DescribeSecret 및 KMS 복호화 권한과 같은 필수 권한이 포함되어 있습니다.

기본 설정

퍼블릭 Git 리포지토리가 있는 기본 Argo CD 기능의 경우 신뢰 정책 외에 추가 IAM 정책은 필요하지 않습니다.

Authentication

AWS Identity Center 통합

Argo CD 관리형 기능은 AWS Identity Center(이전의 AWS SSO)에 직접 통합되어 기존 ID 제공업체를 인증에 사용할 수 있습니다.

AWS Identity Center 통합을 구성하는 경우:

  1. 사용자는 EKS 콘솔을 통해 Argo CD UI에 액세스함

  2. 사용자는 AWS Identity Center(기업 ID 제공업체에 페더레이션할 수 있음)를 사용하여 인증함

  3. AWS Identity Center는 Argo CD에 사용자 및 그룹 정보를 제공함

  4. Argo CD는 사용자 구성을 기반으로 사용자 및 그룹을 RBAC 역할에 매핑함

  5. 사용자는 액세스 권한이 있는 애플리케이션 및 리소스만 볼 수 있음

Identity Center 권한 세트를 사용하여 액세스 단순화

AWS Identity Center는 Argo CD로 작업할 때 2개의 고유한 인증 경로를 제공합니다.

Argo CD API 인증: Identity Center는 Argo CD UI 및 API에 SSO 인증을 제공합니다. 이는 Argo CD 기능의 RBAC 역할 매핑을 통해 구성됩니다.

EKS 클러스터 액세스: Argo CD 기능은 고객이 제공한 IAM 역할을 사용하여 액세스 항목을 통해 EKS 클러스터로 인증합니다. 이러한 액세스 항목은 권한을 추가하거나 제거하도록 수동으로 구성할 수 있습니다.

Identity Center 권한 세트를 사용하여 단일 자격 증명이 Argo CD 및 EKS 클러스터 모두에 액세스할 수 있도록 허용함으로써 자격 증명 관리를 단순화할 수 있습니다. 이렇게 하면 Argo CD 액세스 및 클러스터 액세스를 위한 별도의 자격 증명을 유지 관리하는 대신, 두 시스템에서 하나의 자격 증명만 관리하면 되므로 오버헤드가 줄어듭니다.

RBAC 역할 매핑

Argo CD에는 AWS Identity Center 사용자 및 그룹에 매핑할 수 있는 기본 제공 역할이 있습니다.

ADMIN: 모든 애플리케이션 및 설정에 대한 전체 액세스 권한. 애플리케이션을 생성, 배포, 업데이트 및 삭제할 수 있습니다. Argo CD 구성을 관리할 수 있습니다.

EDITOR: 애플리케이션을 생성하고 수정할 수 있습니다. Argo CD 설정을 변경하거나 애플리케이션을 삭제할 수 없습니다.

VIEWER: 애플리케이션에 대한 읽기 전용 액세스 권한. 애플리케이션 상태 및 기록을 볼 수 있습니다. 변경을 수행할 수 없습니다.

참고

역할 이름은 대소문자를 구분하며 대문자(ADMIN, EDITOR, VIEWER)여야 합니다.

중요

AWS Identity Center와의 EKS 기능 통합은 Argo CD 기능당 최대 1,000개의 ID를 지원합니다. ID는 사용자 또는 그룹일 수 있습니다.

다중 클러스터 배포

Argo CD 관리형 기능은 다중 클러스터 배포를 지원하므로 단일 Argo CD 인스턴스를 통해 개발, 스테이징 및 프로덕션 클러스터에서 애플리케이션을 관리할 수 있습니다.

다중 클러스터 작동 방식

Argo CD에 추가 클러스터를 등록하는 경우:

  1. ARN으로 대상 EKS 클러스터를 참조하는 클러스터 보안 암호 생성

  2. 다른 클러스터를 대상으로 하는 Application 또는 ApplicationSet 생성

  3. Argo CD는 각 클러스터에 연결하여 리소스를 배포하고 감시함

  4. 단일 Argo CD UI를 통해 모든 클러스터 보기 및 관리

다중 클러스터의 사전 조건

추가 클러스터를 등록하기 전에:

  • Argo CD 기능 역할에 대해 대상 클러스터에서 액세스 항목 생성

  • Argo CD 기능과 대상 클러스터 간 네트워크 연결 보장

  • 대상 클러스터에 액세스하기 위해 IAM 권한 확인

클러스터 등록

argocd 네임스페이스에서 Kubernetes 보안 암호를 사용하여 클러스터를 등록합니다.

대상 클러스터 ARN을 가져옵니다. region-code를 대상 클러스터가 있는 AWS 리전으로 바꾸고 target-cluster를 대상 클러스터 이름으로 바꿉니다.

aws eks describe-cluster \ --region region-code \ --name target-cluster \ --query 'cluster.arn' \ --output text

클러스터 ARN을 사용하여 클러스터 보안 암호를 생성합니다.

apiVersion: v1 kind: Secret metadata: name: target-cluster namespace: argocd labels: argocd.argoproj.io/secret-type: cluster type: Opaque stringData: name: target-cluster server: arn:aws:eks:us-west-2:111122223333:cluster/target-cluster project: default
중요

Kubernetes API 서버 URL이 아니라 server 필드에 EKS 클러스터 ARN을 사용합니다. 대상 클러스터를 식별하려면 관리형 기능에 ARN이 필요합니다.

보안 암호를 적용합니다.

kubectl apply -f cluster-secret.yaml

대상 클러스터에서 액세스 항목 구성

대상 클러스터에는 Argo CD 기능 역할에 애플리케이션을 배포할 권한을 부여하는 액세스 항목이 있어야 합니다. region-code를 대상 클러스터가 있는 AWS 리전으로 바꾸고, target-cluster를 대상 클러스터의 이름으로 바꾸며, ARN을 Argo CD 기능 역할 ARN으로 바꿉니다.

aws eks create-access-entry \ --region region-code \ --cluster-name target-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --type STANDARD \ --kubernetes-groups system:masters
참고

프로덕션 환경에서는 system:masters 대신 보다 제한적인 Kubernetes 그룹을 사용하는 것이 좋습니다.

프라이빗 클러스터 액세스

Argo CD 관리형 기능은 VPC 피어링 또는 특수 네트워킹 구성 없이도 완전한 프라이빗 EKS 클러스터에 배포할 수 있습니다. AWS는 Argo CD 기능과 프라이빗 원격 클러스터 간 연결을 자동으로 관리합니다. 리포지토리 액세스 제어 및 Argo CD RBAC 정책이 올바르게 구성되어 있는지 확인합니다.

교차 계정 배포

교차 계정 배포의 경우 소스 계정의 Argo CD IAM 기능 역할을 대상 클러스터의 EKS 액세스 항목에 추가합니다.

  1. 대상 계정에서 대상 EKS 클러스터에 액세스 항목 생성

  2. 소스 계정에서 Argo CD IAM 기능 역할 ARN을 위탁자로 사용

  3. 액세스 항목에 대해 적절한 Kubernetes RBAC 권한 구성

  4. EKS 클러스터 ARN을 사용하여 Argo CD에 대상 클러스터 등록

추가적인 IAM 역할 생성 또는 신뢰 정책 구성은 필요하지 않습니다. EKS 액세스 항목이 교차 계정 액세스를 처리합니다.

모범 사례

선언적 소스를 신뢰할 수 있는 소스로 사용: 선억적 소스(Git 리포지토리, 헬름 레지스트리 또는 OCI 이미지)에 모든 애플리케이션 매니페스트를 저장하여 버전 제어, 감사 추적 및 협업을 지원합니다.

적절한 RBAC 구현: AWS Identity Center 통합을 사용하여 Argo CD에서 애플리케이션에 액세스하고 관리할 수 있는 사용자를 제어합니다. Argo CD는 애플리케이션 내 리소스(배포, 포드, ConfigMaps, 보안 암호)에 대한 세분화된 액세스 제어를 지원합니다.

다중 환경 배포에 ApplicationSet 사용: ApplicationSet를 사용하여 다른 구성의 여러 클러스터 또는 네임스페이스에서 애플리케이션을 배포합니다.

수명 주기 관리

애플리케이션 동기화 정책

Argo CD가 애플리케이션을 동기화하는 방법을 제어합니다.

수동 동기화: 변경 사항을 동기화하려면 애플리케이션에 수동 승인이 필요합니다. 프로덕션 환경에 권장됩니다.

자동 동기화: Git 변경 사항이 감지되면 애플리케이션이 자동으로 동기화됩니다. 개발 및 스테이징 환경에서 일반적입니다.

자가 복구: 클러스터에 대한 수동 변경 사항을 자동으로 되돌립니다. 클러스터 상태가 Git과 일치하는지 확인합니다.

정리: Git에서 제거된 리소스를 자동으로 삭제합니다. 이 작업은 리소스를 삭제할 수 있으므로 주의해야 합니다.

애플리케이션 상태

Argo CD는 애플리케이션 상태를 지속적으로 모니터링합니다.

  • 정상: 모든 리소스가 예상대로 실행 중임

  • 진행 중: 리소스 생성 또는 업데이트 중임

  • 성능 저하됨: 일부 리소스가 정상이 아님

  • 일시 중단됨: 애플리케이션이 일시 중지됨

  • 누락: 클러스터에서 리소스가 누락됨

동기화 기간

애플리케이션을 동기화할 수 있는 시기를 제어하도록 동기화 기간을 구성합니다.

  • 유지 관리 기간에만 동기화 허용

  • 업무 시간 중 블록 동기화

  • 특정 시간에 자동 동기화 예약

  • 변경을 수행하고 동기화를 중지해야 하는 상황(긴급 시나리오)에서 동기화 기간 사용

더 빠른 동기화를 위한 웹후크 구성

기본적으로 Argo CD는 6분마다 Git 리포지토리를 폴링하여 변경 사항을 감지합니다. 응답성이 뛰어난 배포를 위해 변경 사항이 푸시될 때 즉각적인 동기화를 트리거하도록 Git 웹후크를 구성합니다.

웹후크는 는 다음과 같은 여러 이점을 제공합니다.

  • 코드를 푸시할 때 즉각적인 동기화 응답(초 단위 대 분 단위)

  • 폴링 오버헤드 감소 및 시스템 성능 향상

  • API 속도 제한의 보다 효율적인 사용

  • 더 빠른 피드백으로 사용자 경험 향상

웹후크 엔드포인트

웹후크 URL은 ${serverUrl}/api/webhook 패턴을 따르며, 여기서 serverUrl은 Argo CD 서버 URL입니다.

예를 들어 Argo CD 서버 URL이 https://abc123.eks-capabilities.us-west-2.amazonaws.com인 경우 웹후크 URL은 다음과 같습니다.

https://abc123.eks-capabilities.us-west-2.amazonaws.com/api/webhook

Git 공급자별 웹후크 구성

GitHub: 리포지토리 설정에서 Argo CD 웹후크 URL을 통해 웹후크를 추가합니다. 콘텐츠 유형을 application/json으로 설정하고 '푸시 이벤트만'을 선택합니다.

GitLab: 프로젝트 설정에서 Argo CD 웹후크 URL을 통해 웹후크를 추가합니다. '푸시 이벤트' 및 선택적으로 '푸시 이벤트 태그'를 활성화합니다.

Bitbucket: 리포지토리 설정에서 Argo CD 웹후크 URL을 통해 웹후크를 추가합니다. 트리거로 '리포지토리 푸시'를 선택합니다.

CodeCommit: CodeCommit 리포지토리 상태 변경을 트리거하고 Argo CD 웹후크 엔드포인트로 알림을 보내는 Amazon EventBridge 규칙을 생성합니다.

자세한 웹후크 구성 지침은 Argo CD Webhook Configuration을 참조하세요.

참고

웹후크는 폴링을 보완하며 이를 대체하지 않습니다. Argo CD는 웹후크 알림이 누락된 경우 폴백 메커니즘으로 리포지토리를 계속 폴링합니다.

다음 단계