대상 클러스터 등록 - Amazon EKS

이 페이지 개선에 도움 주기

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

대상 클러스터 등록

Argo CD가 애플리케이션을 배포할 수 있도록 클러스터를 등록합니다. Argo CD가 실행 중인 동일한 클러스터(로컬 클러스터) 또는 다른 계정이나 리전에서 원격 클러스터를 등록할 수 있습니다. 클러스터가 등록되면 해당 클러스터 내에서 애플리케이션을 생성할 때까지 클러스터는 알 수 없는 연결 상태로 유지됩니다. 클러스터가 등록된 후 Argo CD 애플리케이션을 생성하려면 애플리케이션 생성 섹션을 참조하세요.

사전 조건

  • Argo CD 기능이 생성된 EKS 클러스터

  • 클러스터와 통신하도록 구성된 kubectl

  • 원격 클러스터의 경우: 적절한 IAM 권한 및 액세스 항목

로컬 클러스터 등록

Argo CD가 실행 중인 동일한 클러스터에 애플리케이션을 배포하려면 배포 대상으로 등록합니다.

중요

Argo CD 기능은 로컬 클러스터를 자동으로 등록하지 않습니다. 애플리케이션을 동일한 클러스터에 배포하려면 명시적으로 등록해야 합니다. 온라인에서 대부분의 Argo CD 예제와의 호환성을 위해 클러스터 이름 in-cluster를 사용할 수 있습니다.

참고

Argo CD 기능 역할을 통해 로컬 클러스터에 대해 EKS 액세스 항목이 자동으로 생성되지만, Kubernetes RBAC 권한은 기본적으로 부여되지 않습니다. 이 경우 최소 권한 원칙을 따릅니다. 따라서 사용 사례에 따라 Argo CD에 필요한 권한을 명시적으로 구성해야 합니다. 예를 들어 이 클러스터를 Argo CD 허브로만 사용하여 원격 클러스터를 관리하는 경우 로컬 배포 권한은 필요하지 않습니다. 구성 옵션은 아래 액세스 항목 RBAC 요구 사항 섹션을 참조하세요.

Argo CD CLI 사용:

argocd cluster add <cluster-context-name> \ --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/my-cluster \ --name local-cluster

Kubernetes 보안 암호 사용:

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

구성을 적용합니다.

kubectl apply -f local-cluster.yaml
참고

Kubernetes API 서버 URL이 아니라 server 필드에 EKS 클러스터 ARN을 사용합니다. 관리형 기능을 사용하려면 ARN으로 클러스터를 식별해야 합니다. 기본 kubernetes.default.svc는 지원되지 않습니다.

원격 클러스터 등록

원격 클러스터에 배포하는 방법:

1단계: 원격 클러스터에서 액세스 항목 생성

region-code를 원격 클러스터가 있는 AWS 리전으로 바꾸고, remote-cluster를 원격 클러스터 이름으로 바꾸며, ARN을 Argo CD 기능 역할 ARN으로 바꿉니다.

aws eks create-access-entry \ --region region-code \ --cluster-name remote-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --type STANDARD

2단계: 액세스 정책을 Kubernetes RBAC 권한에 연결

Argo CD에서 애플리케이션을 배포하려면 액세스 항목에 Kubernetes RBAC 권한이 필요합니다. 빠르게 시작하기 위해 AmazonEKSClusterAdminPolicy를 사용할 수 있습니다.

aws eks associate-access-policy \ --region region-code \ --cluster-name remote-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \ --access-scope type=cluster
중요

AmazonEKSClusterAdminPolicy는 전체 cluster-admin 액세스 권한(system:masters와 동등함)을 제공합니다. 이는 시작하기에 편리하지만 프로덕션에서 사용해서는 안 됩니다. 프로덕션 환경의 경우 액세스 항목을 사용자 지정 Kubernetes 그룹에 연결하고 적절한 Role 또는 ClusterRole 바인딩을 생성하여 보다 제한적인 권한을 사용합니다. 최소 권한 구성은 아래 프로덕션 설정 섹션을 참조하세요.

3단계: Argo CD에서 클러스터 등록

Argo CD CLI 사용:

argocd cluster add <cluster-context-name> \ --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster \ --name remote-cluster

Kubernetes 보안 암호 사용:

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

구성을 적용합니다.

kubectl apply -f remote-cluster.yaml

교차 계정 클러스터

다른 AWS 계정의 클러스터에 배포하는 방법:

  1. 대상 계정에서 소스 계정의 Argo CD IAM 기능 역할 ARN을 위탁자로 사용하여 대상 EKS 클러스터에서 액세스 항목 생성

  2. 액세스 정책을 적절한 Kubernetes RBAC 권한에 연결

  3. 해당 EKS 클러스터 ARN을 사용하여 Argo CD에서 클러스터 등록

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

클러스터 ARN 형식에는 리전이 포함되므로 교차 리전 배포는 동일 리전 배포와 동일한 프로세스를 사용합니다.

클러스터 등록 확인

등록된 클러스터 보기:

kubectl get secrets -n argocd -l argocd.argoproj.io/secret-type=cluster

또는 Argo CD UI의 설정 → 클러스터에서 클러스터 상태를 확인합니다.

프라이빗 클러스터

Argo CD 기능은 VPC 피어링 또는 특수 네트워킹 구성 없이도 완전한 프라이빗 EKS 클러스터에 대한 투명한 액세스를 제공합니다.

AWS에서는 Argo CD 기능과 프라이빗 원격 클러스터 간 연결을 자동으로 관리합니다.

추가 네트워킹 설정 없이도 ARN을 사용하여 프라이빗 클러스터를 등록합니다.

액세스 항목 RBAC 요구 사항

Argo CD 기능을 생성하면 기능 역할에 대한 EKS 액세스 항목이 자동으로 생성되지만, Kubernetes RBAC 권한은 기본적으로 부여되지 않습니다. 이 의도적인 설계는 최소 권한 원칙을 따르며, 사용 사례마다 필요한 권한이 다릅니다.

예: * 클러스터를 Argo CD 허브로만 사용하여 원격 클러스터를 관리하는 경우 로컬 배포 권한은 필요하지 않음 * 애플리케이션을 로컬로 배포하는 경우 클러스터 범위의 읽기 액세스와 특정 네임스페이스에 대한 쓰기 액세스가 필요함 * CRD를 생성해야 하는 경우 추가 cluster-admin 권한이 필요함

요구 사항에 따라 Argo CD에 필요한 권한을 명시적으로 구성해야 합니다.

Argo CD에 대한 최소 권한

오류 없이 작동하려면 Argo CD에 두 가지 유형의 권한이 필요합니다.

읽기 권한(클러스터 범위): Argo CD는 다음과 같은 경우에 클러스터 전체에서 모든 리소스 유형 및 사용자 지정 리소스 정의(CRD)를 읽을 수 있어야 합니다.

  • 리소스 검색 및 상태 확인

  • 원하는 상태와 실제 상태 간 드리프트 감지

  • 배포 전 리소스 검증

쓰기 권한(네임스페이스별): Argo CD에는 애플리케이션에 정의된 리소스에 대한 생성, 업데이트 및 삭제 권한이 필요합니다.

  • 애플리케이션 워크로드(배포, 서비스, ConfigMaps 등) 배포

  • 사용자 지정 리소스(애플리케이션별 CRD) 적용

  • 애플리케이션 수명 주기 관리

빠른 설정

빠르게 시작하는 경우와 테스트 또는 개발 환경에서는 AmazonEKSClusterAdminPolicy를 사용합니다.

aws eks associate-access-policy \ --region region-code \ --cluster-name my-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \ --access-scope type=cluster
중요

AmazonEKSClusterAdminPolicy는 CRD를 생성하고, 클러스터 범위의 리소스를 수정하며, 모든 네임스페이스에 배포하는 기능을 포함하여 전체 cluster-admin 액세스(system:masters와 동등함)를 제공합니다. 이는 개발 및 POC에 편리하지만 프로덕션에서 사용해서는 안 됩니다. 프로덕션의 경우 아래의 최소 권한 설정을 사용합니다.

최소 권한으로 프로덕션 설정

프로덕션 환경의 경우 다음을 부여하는 사용자 지정 Kubernetes RBAC를 생성합니다.

  • 모든 리소스에 대한 클러스터 범위의 읽기 액세스(검색 및 상태 확인용)

  • 네임스페이스별 쓰기 액세스(배포용)

1단계: 액세스 항목을 사용자 지정 Kubernetes 그룹에 연결

aws eks associate-access-policy \ --region region-code \ --cluster-name my-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy \ --access-scope type=namespace,namespaces=app-namespace

2단계: 읽기 액세스를 위해 ClusterRole 생성

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: argocd-read-all rules: # Read access to all resources for discovery and health checks - apiGroups: ["*"] resources: ["*"] verbs: ["get", "list", "watch"]

3단계: 애플리케이션 네임스페이스에 대한 쓰기 액세스를 위해 역할 생성

apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: argocd-deploy namespace: app-namespace rules: # Full access to deploy application resources - apiGroups: ["*"] resources: ["*"] verbs: ["*"]

4단계: 역할을 Kubernetes 그룹에 바인딩

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: argocd-read-all subjects: - kind: Group name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: argocd-read-all apiGroup: rbac.authorization.k8s.io --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: argocd-deploy namespace: app-namespace subjects: - kind: Group name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: argocd-deploy apiGroup: rbac.authorization.k8s.io
참고

액세스 항목의 그룹 이름 형식은 eks-access-entry: 및 위탁자 ARN으로 구성됩니다. Argo CD가 애플리케이션을 배포해야 하는 각 네임스페이스에 대해 RoleBinding을 반복합니다.

중요

Argo CD는 특정 네임스페이스에만 배포되더라도 상태 확인 및 검색을 위해 클러스터 전체에서 모든 리소스 유형을 읽을 수 있어야 합니다. 클러스터 범위의 읽기 액세스 권한이 없으면 애플리케이션 상태를 확인할 때 Argo CD에 오류가 표시됩니다.

프로젝트로 클러스터 액세스 제한

Projects를 사용하여 spec.destinations에서 허용되는 대상 클러스터 및 네임스페이스를 구성함으로써 Applications가 배포할 수 있는 클러스터 및 네임스페이스를 제어합니다.

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: production namespace: argocd spec: destinations: - server: arn:aws:eks:us-west-2:111122223333:cluster/prod-cluster namespace: '*' - server: arn:aws:eks:eu-west-1:111122223333:cluster/prod-eu-cluster namespace: '*' sourceRepos: - 'https://github.com/example/production-apps'

자세한 내용은 Argo CD 프로젝트 작업을 참조하세요.

추가 리소스