- Argo CD에는 다양한 시크릿 관리 도구(HashiCorp Vault, IBM Cloud Secrets Manager, AWS Secrets Manager 등)플러그인을 통해 Kubernetes 리소스에 주입할 수 있도록 지원합니다.
- 플러그인을 통해 Operator 또는 CRD(Custom Resource Definition)에 의존하지 않고 GitOps와 Argo CD로 시크릿 관리 문제를 해결할 수 있습니다.
- 특히 Secret 뿐만 아니라, deployment, configMap 또는 기타 Kubernetes 리소스에도 사용할 수 있습니다.
CloudNet@팀의 EKS 스터디 AEWS 2기에 작성된 자료를 토대로 작성합니다.
- 사이드카 컨테이너를 통한 설치:
- 사이드카 컨테이너를 추가하여 플러그인과 필요한 도구들을 포함시킵니다.
- 또는 플러그인이 사전 설치된 커스텀 사이드카 이미지를 생성하여 사용합니다.
사이드카 컨테이너를 활용한 방법은 Argo CD v2.4.0부터 도입된 최신 방식으로, 보안성과 유지보수 측면에서 권장됩니다.
Vault + ArgoCD Plugin 패턴 실습
Step 1. ArgoCD Vault Plugin을 위한 Credentials 활성화 - AppRole 인증
# ttl이 1시간이기 때문에 새로 만들었습니다.
vault write auth/approle/role/sampleapp-role3 \
token_policies="sampleapp-policy" \
secret_id_ttl="1h" \
token_ttl="1h" \
token_max_ttl="4h"
Success! Data written to: auth/approle/role/sampleapp-role3
ROLE_ID=$(vault read -field=role_id auth/approle/role/sampleapp-role3/role-id)
SECRET_ID=$(vault write -f -field=secret_id auth/approle/role/sampleapp-role3/secret-id)
echo "ROLE_ID: $ROLE_ID"
echo "SECRET_ID: $SECRET_ID"
ROLE_ID: 0e8596ea-b507-fb08-1566-6bfa252751f1
SECRET_ID: 222b9c83-9584-5472-745e-9814086c39c9
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: 0e8596ea-b507-fb08-1566-6bfa252751f1 #Role_ID
AVP_SECRET_ID: 222b9c83-9584-5472-745e-9814086c39c9 #Secret_ID
EOF
Step 2. ArgoCD Vault Plugin 설치 - Blog
git clone https://github.com/hyungwook0221/argocd-vault-plugin.git
cd argocd-vault-plugin/manifests/cmp-sidecar
# 예전 문법으로 적용된 부분을 edit fix 명령으로 현행화
# kustomize edit fix
# argocd 네임스페이스 설정
kubens argocd
# 생성될 메니페스트 파일에 대한 확인
kubectl kustomize .
# -k 옵션으로 kusomize 실행
kubectl apply -n argocd -k .
Step 3. 샘플 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



'DevOps' 카테고리의 다른 글
[AWS EKS] (27) EKS 스터디 10주차 ( Jenkins + Vault (AppRole) ) (0) | 2025.04.12 |
---|---|
[AWS EKS] (26) EKS 스터디 10주차 ( Vault ) (0) | 2025.04.11 |
[AWS EKS] (25) EKS 스터디 8주차 (Blue-Green Upgrade) (1) | 2025.04.02 |
[AWS EKS] (24) EKS 스터디 8주차 (In-place Upgrade) (0) | 2025.03.31 |
[AWS EKS] (23) EKS 스터디 8주차 (Amazon EKS Upgrades: Strategies and Best Practices) (0) | 2025.03.31 |