YUMSERV
Published 2024. 4. 10. 14:18
ArgoCD Multi Cluster Setting DEV/CI CD
반응형

대규모 조직이나 여러 환경(Dev/Prod)을 운영하는 경우, 각각의 Kubernetes 클러스터에 Argo CD를 설치하는 것은 관리 포인트가 많아지고 운영이 복잡해질 수 있습니다.
이 글에서는 하나의 중앙 Argo CD 인스턴스로 여러 Kubernetes 클러스터를 관리하는 Multi-Cluster GitOps 환경 구성 방법을 소개합니다.

목적

  • Infra 전용 Argo CD 인스턴스를 통해 여러 환경(EKS Dev/Prod 등)의 리소스를 통합 관리
  • Argo CD의 cluster add 기능을 활용해 멀티 클러스터로 애플리케이션 배포
  • 동일한 GitOps Workflow를 모든 클러스터에 일관성 있게 적용

ArgoCD Multi-Cluster Setting

1. 네트워크 연결 확인

  • 멀티 클러스터 구성을 위해서는 Argo CD가 대상 클러스터 API 서버에 접근할 수 있어야 합니다.
  • 전제 조건: Argo CD가 설치된 클러스터에서 다른 클러스터의 Kubernetes API Server에 통신 가능해야 합니다.

2. Argo CD에서 클러스터 추가 (Same Account)

argocd login <ARGOCD_SERVER> --sso

# 클러스터 추가
argocd cluster add arn:aws:eks:ap-northeast-2:<account-id>:cluster/<cluster-name> --name <cluster-alias>

# 확인
argocd cluster list

3. Cross-Account 클러스터 연결 (다른 AWS 계정)

운영 환경처럼 AWS 계정이 서로 다를 경우, 추가로 IAM Role 기반의 cross-account 설정이 필요합니다.

1) 대상 계정 (클러스터 소유 계정)에 IAM Role 생성

예시: eks-infra-argocd Role

  • 신뢰 관계 설정
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<argocd-account-id>:role/eks-infra-argocd"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

2) aws-auth ConfigMap에 Role 추가

해당 Role이 EKS 클러스터에 접근할 수 있도록 aws-auth에 등록합니다.

# Namespace: kube-system
# ConfigMap: aws-auth

mapRoles: |
  - rolearn: arn:aws:iam::<account-id>:role/eks-infra-argocd
    username: eks-infra-argocd
    groups:
      - system:masters

4. Argo CD에서 Cross-Account 클러스터 등록

Argo CD가 있는 계정에서 대상 클러스터를 등록합니다.

# SSO 로그인
argocd login <ARGOCD_SERVER> --sso

# Role 기반 클러스터 등록
argocd cluster add arn:aws:eks:ap-northeast-2:<target-account-id>:cluster/<cluster-name> \
  --name <cluster-alias> \
  --aws-role-arn arn:aws:iam::<argocd-account-id>:role/eks-infra-argocd

5. 애플리케이션 배포 테스트

애플리케이션 배포 테스트
이제 등록된 클러스터 대상으로 배포가 가능합니다.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: nginx-dev
spec:
  destination:
    server: https://
    namespace: default
  project: default
  source:
    repoURL: https://github.com/your-org/infra-manifests
    targetRevision: main
    path: nginx
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
  • server: 필드는 argocd cluster list에서 확인한 API 서버 주소
  • 각 클러스터마다 Application 하나씩 만들어 배포 가능
반응형

'DEV > CI CD' 카테고리의 다른 글

기존 멀티클러스터 배포 방식을 App of Apps 패턴으로 전환한 이유  (0) 2025.11.27
Keycloak + ArgoCD 연동  (0) 2024.01.29
무중단 배포  (0) 2023.01.16
profile

YUMSERV

@lena04301

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!