Kubernetes Tools/ArgoCD

[Ep.43] [Argo CD ์‹ค๋ฌด ์ ์šฉ #1] Argo CD์™€ Vault๋ฅผ ํ™œ์šฉํ•œ ๋ณด์•ˆ ๊ฐ•ํ™” ๋ฐ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ ์ตœ์ ํ™”

ygtoken 2025. 3. 18. 10:29
728x90

๐Ÿ”น Argo CD ํ™˜๊ฒฝ์—์„œ ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•œ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ์˜ ํ•„์š”์„ฑ

GitOps ๊ธฐ๋ฐ˜ ๋ฐฐํฌ ๋ฐฉ์‹์—์„œ๋Š” Kubernetes ๋ฆฌ์†Œ์Šค์™€ ํ•จ๊ป˜ ์‹œํฌ๋ฆฟ(Secrets) ์ •๋ณด๋„ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ Git ์ €์žฅ์†Œ์— ํ‰๋ฌธ(Plain Text)์œผ๋กœ ์‹œํฌ๋ฆฟ์„ ์ €์žฅํ•˜๋ฉด ๋ณด์•ˆ ์œ„ํ—˜์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Vault ๋“ฑ์˜ ์™ธ๋ถ€ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•˜์—ฌ ๋ณด์•ˆ์„ฑ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

โœ… Vault๋ฅผ ํ™œ์šฉํ•œ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

 

โœ” Git ์ €์žฅ์†Œ์— ๋ฏผ๊ฐํ•œ ์ •๋ณด(๋น„๋ฐ€๋ฒˆํ˜ธ, API ํ‚ค)๋ฅผ ์ง์ ‘ ์ €์žฅํ•˜์ง€ ์•Š๋„๋ก ๋ณดํ˜ธ
โœ” ๋™์  ์‹œํฌ๋ฆฟ ์ƒ์„ฑ ๋ฐ ์ž๋™ ๊ฐฑ์‹  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ๋ณด์•ˆ์„ฑ์„ ๊ฐ•ํ™”
โœ” RBAC(Role-Based Access Control) ๊ธฐ๋ฐ˜์œผ๋กœ ์ ‘๊ทผ ์ œ์–ด ๊ฐ€๋Šฅ
โœ” Kubernetes ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐฉ์‹์œผ๋กœ Argo CD์™€ ์—ฐ๋™ ๊ฐ€๋Šฅ


๐Ÿ”น 1. HashiCorp Vault๋ฅผ ํ™œ์šฉํ•œ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ

Vault๋Š” ๋™์  ์‹œํฌ๋ฆฟ(Dynamic Secrets) ๋ฐ Kubernetes์™€์˜ ์—ฐ๋™์„ ์ง€์›ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
Kubernetes ํ™˜๊ฒฝ์—์„œ Argo CD์™€ Vault๋ฅผ ์—ฐ๋™ํ•˜๋ฉด ์‹œํฌ๋ฆฟ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… 1.1 Vault ์„ค์น˜ ๋ฐ ์ดˆ๊ธฐ ์„ค์ •

Vault๋ฅผ Kubernetes ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด Helm Chart๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

helm repo add hashicorp https://helm.releases.hashicorp.com
helm install vault hashicorp/vault --namespace vault --create-namespace

 

โœ… ์„ค๋ช…:
โœ” helm install vault hashicorp/vault → Vault Helm ์ฐจํŠธ ์„ค์น˜
โœ” --namespace vault --create-namespace → Vault๋ฅผ ๋ณ„๋„์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋ฐฐํฌ

 

โœ… Vault Pod ์ƒํƒœ ํ™•์ธ

kubectl get pods -n vault

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ:

NAME                     READY   STATUS    RESTARTS   AGE
vault-0                  1/1     Running   0          2m

โœ… 1.2 Vault ์ดˆ๊ธฐํ™” ๋ฐ ์ธ์ฆ ์„ค์ •

Vault๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € ์ดˆ๊ธฐํ™”(Initialize) ๋ฐ ์ธ์ฆ(Authentication) ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

โœ… Vault ์ดˆ๊ธฐํ™” ์‹คํ–‰

kubectl exec -it vault-0 -n vault -- vault operator init

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ:

Unseal Key 1: xxxxx-xxxxx-xxxxx
Unseal Key 2: xxxxx-xxxxx-xxxxx
Root Token: hvs.xxxx-xxxx-xxxx

 

โœ… Vault Unlock (Unseal) ์‹คํ–‰

kubectl exec -it vault-0 -n vault -- vault operator unseal <UNSEAL_KEY_1>
kubectl exec -it vault-0 -n vault -- vault operator unseal <UNSEAL_KEY_2>

 

โœ… Vault Root Token ๋กœ๊ทธ์ธ

kubectl exec -it vault-0 -n vault -- vault login <ROOT_TOKEN>

 

โœ… ์„ค๋ช…:
โœ” vault operator init → Vault ์ดˆ๊ธฐํ™” ๋ฐ Unseal ํ‚ค ์ƒ์„ฑ
โœ” vault login <ROOT_TOKEN> → Vault Root Token์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ


๐Ÿ”น 2. Vault์™€ Kubernetes ์—ฐ๋™

Vault๋ฅผ Kubernetes ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Kubernetes ์ธ์ฆ(Kubernetes Auth)์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ… 2.1 Vault Kubernetes ์ธ์ฆ ํ™œ์„ฑํ™”

vault auth enable kubernetes

 

โœ… ์„ค๋ช…:
โœ” vault auth enable kubernetes → Vault์—์„œ Kubernetes ์ธ์ฆ ํ™œ์„ฑํ™”

 

โœ… Kubernetes ์ธ์ฆ ์„ค์ • ์ถ”๊ฐ€

vault write auth/kubernetes/config \
    token_reviewer_jwt="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
    kubernetes_host="https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT"

 

โœ… ์„ค๋ช…:
โœ” token_reviewer_jwt → Kubernetes์˜ ServiceAccount ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ
โœ” kubernetes_host → Kubernetes API ์„œ๋ฒ„ ์ฃผ์†Œ๋ฅผ Vault์— ๋“ฑ๋ก


โœ… 2.2 Vault์—์„œ ์‹œํฌ๋ฆฟ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌ

Vault๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒจ์Šค์›Œ๋“œ ๋“ฑ์˜ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

vault kv put secret/db-password value="SuperSecret123"

 

โœ… ์ €์žฅ๋œ ์‹œํฌ๋ฆฟ ์กฐํšŒ

vault kv get secret/db-password

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ:

====== Metadata ======
Key              Value
value            SuperSecret123

๐Ÿ”น 3. Argo CD์™€ Vault ์—ฐ๋™์„ ํ†ตํ•œ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ

Argo CD์—์„œ Vault๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹œํฌ๋ฆฟ์„ ์ง์ ‘ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก External Secrets Operator๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

โœ… 3.1 External Secrets Operator ์„ค์น˜

helm repo add external-secrets https://charts.external-secrets.io
helm install external-secrets external-secrets/external-secrets -n external-secrets --create-namespace

 

โœ… ์„ค๋ช…:
โœ” helm install external-secrets → Kubernetes์—์„œ ์™ธ๋ถ€ ์‹œํฌ๋ฆฟ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์˜คํผ๋ ˆ์ดํ„ฐ ์„ค์น˜

 

โœ… External Secrets Pod ํ™•์ธ

kubectl get pods -n external-secrets

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ:

NAME                                   READY   STATUS    RESTARTS   AGE
external-secrets-5f9fd7dd58-vzfsd      1/1     Running   0          2m

โœ… 3.2 Vault์—์„œ ์‹œํฌ๋ฆฟ์„ Kubernetes ์‹œํฌ๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜

Argo CD์—์„œ Vault ์‹œํฌ๋ฆฟ์„ ํ™œ์šฉํ•˜๋ ค๋ฉด ExternalSecret์„ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: external-secrets.io/v1alpha1
kind: ExternalSecret
metadata:
  name: db-secret
  namespace: example
spec:
  secretStoreRef:
    name: vault-backend
    kind: ClusterSecretStore
  target:
    name: db-secret
    creationPolicy: Owner
  data:
    - secretKey: DB_PASSWORD
      remoteRef:
        key: secret/db-password  # Vault์—์„œ ๋ถˆ๋Ÿฌ์˜ฌ ์‹œํฌ๋ฆฟ ํ‚ค

 

โœ… ์„ค๋ช…:
โœ” secretStoreRef.name: vault-backend → Vault์—์„œ ์‹œํฌ๋ฆฟ์„ ๊ฐ€์ ธ์˜ด
โœ” remoteRef.key: secret/db-password → Vault์—์„œ ํ•ด๋‹น ํ‚ค์˜ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ด

 

โœ… External Secret ์ ์šฉ

kubectl apply -f external-secret.yaml -n example

 

โœ… ์‹œํฌ๋ฆฟ ํ™•์ธ

kubectl get secrets -n example

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ:

NAME         TYPE     DATA   AGE
db-secret    Opaque  1      2m

 

โœ… ์‹œํฌ๋ฆฟ ๊ฐ’ ํ™•์ธ

kubectl get secret db-secret -n example -o yaml

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ:

apiVersion: v1
kind: Secret
metadata:
  name: db-secret
  namespace: example
type: Opaque
data:
  DB_PASSWORD: U3VwZXJTZWNyZXQxMjM=

๐Ÿ”น ๊ฒฐ๋ก : ์ด๋ฒˆ ๊ธ€์—์„œ ๋ฐฐ์šด ํ•ต์‹ฌ ๋‚ด์šฉ ์ •๋ฆฌ

๐ŸŸข Vault๋ฅผ ํ™œ์šฉํ•˜์—ฌ Git ์ €์žฅ์†Œ์—์„œ ์‹œํฌ๋ฆฟ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธ ๊ฐ€๋Šฅ
๐ŸŸข Argo CD์™€ External Secrets Operator๋ฅผ ์—ฐ๋™ํ•˜์—ฌ ๋™์ ์œผ๋กœ ์‹œํฌ๋ฆฟ์„ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
๐ŸŸข Kubernetes ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐฉ์‹์„ ํ†ตํ•ด ์‹œํฌ๋ฆฟ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ฃผ์ž… ๊ฐ€๋Šฅ
๐ŸŸข GitOps ํ™˜๊ฒฝ์—์„œ๋„ ๋ณด์•ˆ์„ฑ์ด ๊ฐ•ํ™”๋œ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ ์šด์˜ ๊ฐ€๋Šฅ

728x90