| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 외부 모듈
- aews vault
- eks endpoint access
- VPA
- karpenter
- 합격 후기
- aews
- EKS
- kubernetes
- k8s
- aews ci/cd
- 클라우드 국비지원교육
- grafana
- observability
- Jenkins
- Python
- keda
- docker
- Terraform
- 단기 합격
- outposts local cluster
- aws outposts
- 도커
- 클라우드 국비지원교육 후기
- POD
- prometheus
- 국비지원교육
- AWS
- 클라우드 엔지니어
- storageclass
- Today
- Total
모험가
AEWS 10주차 - K8S Secret Update(ArgoCD 패턴) 본문
| 본 글은 가시다님이 진행하시는 AEWS(AWS EKS Workshop Study)를 참여하여 정리한 글입니다. 모르는 부분이 많아서 틀린 내용이 있다면 말씀 부탁드리겠습니다! |
Vault + ArgoCD Plugin 패턴
💡 배경: GitOps 환경의 Secret 관리 고민
ArgoCD는 GitOps 툴로서 Git 저장소의 상태를 Kubernetes 클러스터에 동기화해 줍니다. 그런데 Secret도 Git에 올려두면?
🚨 큰일 납니다! 민감 정보가 노출될 수 있어요.
그래서 많은 팀이 HashiCorp Vault 같은 외부 Secret Manager를 사용해 민감 정보를 보관하고, 애플리케이션이 실행될 때 동적으로 주입하는 방식을 채택합니다.
🔌 ArgoCD Vault Plugin 이란?
ArgoCD Vault Plugin은 ArgoCD가 Vault로부터 Secret을 읽어와 Kubernetes Manifest에 주입할 수 있게 도와주는 플러그인입니다. Helm이나 Kustomize를 사용하는 앱 배포 시, 템플릿 내에 Vault 경로를 지정하고, 동적으로 값을 채워줍니다.
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
stringData:
username: "{{ vaultkvpath "secret/data/sampleapp/config" "username" }}"
password: "{{ vaultkvpath "secret/data/sampleapp/config" "password" }}"
템플릿은 Git에 올라가 있지만 실제 값은 Vault에서 주입되므로 Git에 민감 정보가 저장되지 않습니다.
🏗️ 구성 아키텍처
┌────────────────┐
│ Vault │
└────────┬───────┘
│ (AppRole, Token 등)
▼
┌─────────────┐ ┌──────────────┐ ┌────────────────────┐
│ Git Repo ├──►│ ArgoCD ├──────►│ Kubernetes Cluster │
└─────────────┘ │ + Vault Plugin│ └────────────────────┘
└──────────────┘
- Vault는 실제 Secret을 저장
- Git에는 템플릿과 Vault 경로만 저장
- ArgoCD Vault Plugin이 Git 템플릿을 렌더링할 때 Vault로부터 값을 주입
🧪 인증 방식: Vault와 ArgoCD의 연결
Vault는 다양한 인증 방식을 제공합니다. 이 중 Kubernetes Auth Method와 AppRole 방식이 많이 사용됩니다.
예: AppRole 방식 설정 요약
- Vault에서 AppRole 생성 (vault write auth/approle/role/my-role ...)
- role_id, secret_id 발급
- ArgoCD Vault Plugin Pod에 이 정보 전달 (ConfigMap, Secret, 또는 sidecar agent 방식 등)
✅ 장점 요약
| 장점 | 설명 |
| 🔐 Git에 Secret 없음 | 민감한 정보는 Vault에서 관리 |
| 🔁 동적 주입 | 앱 배포 시점에 최신 Secret 자동 주입 |
| ⚙️ 다양한 Vault 인증 연동 | Kubernetes, AppRole, Token 등 유연한 인증 방식 |
| 🔄 GitOps 흐름 유지 | GitOps 방식 그대로 유지하면서 보안 강화 가능 |
🧩 추천 패턴: Sidecar Vault Agent vs ArgoCD Plugin
| 패턴 | 특징 |
| ArgoCD Vault Plugin | 배포 시점에 Secret을 주입하는 방식 (정적 주입) |
| Vault Agent Sidecar | Pod 실행 시마다 Vault로부터 Secret을 주입하는 방식 (동적 주입) |
보안이 중요하지만 주입 주기가 긴 경우 → ArgoCD Vault Plugin
동적으로 Secret이 자주 바뀌는 경우 → Vault Agent Sidecar
kubectl apply -f - <<EOF
kind: Secret
apiVersion: v1
metadata:
name: argocd-vault-plugin-credentials
namespace: argocd
type: Opaque
stringData:
VAULT_ADDR: "http://vault.vault:8200"
AVP_TYPE: "vault"
AVP_AUTH_TYPE: "approle"
AVP_ROLE_ID: c0661d63-ca5f-d22d-fb1a-a38382bff931 #Role_ID
AVP_SECRET_ID: b03c167e-224e-1ea7-463e-1c5fe25fdf94 #Secret_ID
EOF
AgroCD vault Plugin 설치
git clone https://github.com/hyungwook0221/argocd-vault-plugin.git
cd argocd-vault-plugin/manifests/cmp-sidecar
# argocd 네임스페이스 설정
kubens argocd
# 생성될 메니페스트 파일에 대한 확인
kubectl kustomize .
# -k 옵션으로 kusomize 실행
kubectl apply -n argocd -k .

샘플 Application 배포하여 Vault와 동기화
GitHub에 저장된 Helm Repo을 배포하며, Helm 메니페스트 내에 변수로 치환된 값(username/password)을 CD 단계에서 Vault 통해서 읽고 렌더링하여 배포
kubectl apply -n argocd -f - <<EOF
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: demo
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
destination:
namespace: argocd
server: https://kubernetes.default.svc
project: default
source:
path: infra/helm
repoURL: https://github.com/hyungwook0221/spring-boot-debug-app
targetRevision: main
plugin:
name: argocd-vault-plugin-helm
env:
- name: HELM_ARGS
value: -f new-values.yaml
syncPolicy:
automated:
prune: true
selfHeal: true
EOF

이렇게 application을 배포하여 vault와 동기화 되는 것을 확인했습니다.
해당 argocd는 sidecar 형태로 vault와 연동이 되어있습니다. 이후 많은 패턴을 공부해보아야겠습니다.
'쿠버네티스 > AEWS' 카테고리의 다른 글
| AEWS 12주차 - Amazon VPC Lattice for Amazon EKS(VPC Lattice) (1) | 2025.04.26 |
|---|---|
| AEWS 11주차 - ML Infra(GPU) on EKS(Inferentia 및 FSx를 활용한 GenAI) (1) | 2025.04.19 |
| AEWS 10주차 - K8S Secret Update(vault sidecar & jenkins(AppRole) CI) (0) | 2025.04.11 |
| AEWS 10주차 - K8S Secret Update(vault 설치 및 kv 구성) (1) | 2025.04.11 |
| AEWS 9주차 - EKS Upgrade (0) | 2025.04.02 |