서론
EKS 환경에서 GitOps를 구현하기 위한 도구인 ArgoCD의 설치 과정을 다룹니다. Kustomize를 통해 Helm Chart를 래핑하여 활용하는 방법을 다룹니다.
본 포스트에서 사용되는 설정 파일과 샘플 코드는 다음 레포지토리에서 확인하실 수 있습니다 Github 링크
설치 환경
- EKS Cluster
- Istio Service Mesh
- Amazon ElastiCache (Valkey 8.2)
ArgoCD 설치 (Kustomize + Helm)
ArgoCD를 보다 선언적으로 관리하기 위해 ./argocd 디렉토리에 Kustomize 설정을 구성했습니다. 이 방식은 Helm Chart의 유연함과 Kustomize의 구조적 관리 장점을 동시에 가져갈 수 있습니다.
1. 프로젝트 구조
argocd/
├── kustomization.yaml
├── namespace.yaml
├── values.yaml
├── gateway.yaml
└── virtual-service.yaml
2. Kustomize 및 Namespace 설정
먼저 Namespace에 Istio 사이드카 주입을 위한 레이블을 추가하고, kustomization.yaml에서 Helm Chart를 정의합니다.
namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: argocd
labels:
istio-injection: enabled
kustomization.yaml
namespace: argocd
resources:
- namespace.yaml
- gateway.yaml
- virtual-service.yaml
helmCharts:
- name: argo-cd
repo: https://argoproj.github.io/argo-helm
version: 9.2.3
releaseName: argocd
valuesFile: values.yaml
3. values.yaml
환경을 고려하여 알맞게 구성해주시면 됩니다.
global:
domain: argocd.domain.com
controller:
replicas: 1
server:
replicas: 1
autoscaling:
enabled: true
minReplicas: 1
service:
type: ClusterIP
configs:
params:
server.insecure: true # ALB에서 TLS를 처리하므로 내부 통신은 insecure 설정
redis:
enabled: false # ElastiCache valkey 사용으로 자체 Redis 비활성화
externalRedis:
host: valkey.example.cache.amazonaws.com
port: 6379
4. 설치 실행
Kustomize를 빌드하여 클러스터에 적용합니다.
kubectl apply -k ./argocd
Istio manifests
Istio 환경을 기준으로 작성하여 Gateway와 VirtualService를 설정했습니다.
gateway.yaml
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: argocd-gateway
namespace: argocd
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- argocd.domain.com
virtual-service.yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: argocd-server
namespace: argocd
spec:
gateways:
- argocd-gateway
hosts:
- argocd.domain.com
http:
- route:
- destination:
host: argocd-server
port:
number: 80
핵심 고도화 전략 요약
1. Helm Chart & Kustomize 융합
- Helm의
values.yaml을 통해 복잡한 차트 설정을 관리하면서, Kustomize의resources기능을 통해 Namespace, Gateway 등 추가 리소스를 깔끔하게 병합했습니다.
2. Redis를 Valkey(v8.2)로 교체
- ArgoCD 내부 Redis 대신 AWS ElastiCache Valkey 클러스터를 활용하여 성능과 안정성을 높였습니다.
externalRedis설정을 통해 손쉽게 전환이 가능합니다.
3. Istio 통합 및 보안
istio-injection: enabled레이블을 통해 ArgoCD 컴포넌트 간 통신을 서비스 메쉬 내에서 보호합니다.server.insecure: true설정을 통해 Istio Gateway 단계에서 종료되는 TLS 이후의 내부 통신 효율을 최적화했습니다.
접속 및 확인
1. 초기 비밀번호 조회
설치 직후 admin 계정의 초기 비밀번호는 아래 명령어로 확인할 수 있습니다.
kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d
다음 편에서는 이렇게 구축된 ArgoCD에 실제 리포지토리와 외부 클러스터를 연결하는 전략을 다룹니다.