Kubernetes Tools/ArgoCD

[Ep.39] [Argo CD ์šด์˜ ์ตœ์ ํ™” #9] Argo CD ๋ณด์•ˆ ๊ฐ•ํ™” ๋ฐ GitOps ์šด์˜ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

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

๐Ÿ”น Argo CD ๋ณด์•ˆ ๊ฐ•ํ™”๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

Argo CD๋Š” GitOps ๊ธฐ๋ฐ˜์œผ๋กœ Kubernetes ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž๋™ ๋ฐฐํฌํ•˜์ง€๋งŒ,
๋ณด์•ˆ ์„ค์ •์ด ๋ฏธํกํ•  ๊ฒฝ์šฐ Git ์ €์žฅ์†Œ ์œ ์ถœ, ํด๋Ÿฌ์Šคํ„ฐ ์ ‘๊ทผ ๊ถŒํ•œ ๋‚จ์šฉ, ์‹œํฌ๋ฆฟ ๋…ธ์ถœ ๋“ฑ์˜ ๋ณด์•ˆ ์œ„ํ—˜์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

โœ… Argo CD ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

 

โœ” GitOps ํ™˜๊ฒฝ์—์„œ ์‹œํฌ๋ฆฟ๊ณผ ์ธ์ฆ ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธํ•ด์•ผ ํ•จ
โœ” RBAC(Role-Based Access Control)์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์ ‘๊ทผ์„ ์ œ์–ดํ•ด์•ผ ํ•จ
โœ” TLS ์•”ํ˜ธํ™”๋ฅผ ์ ์šฉํ•˜์—ฌ ์•ˆ์ „ํ•œ API ํ†ต์‹ ์„ ๋ณด์žฅํ•ด์•ผ ํ•จ
โœ” ๋ณด์•ˆ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ†ตํ•ด GitOps ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์œ„ํ˜‘์„ ๊ฐ์ง€ํ•ด์•ผ ํ•จ


๐Ÿ”น 1. Argo CD RBAC(Role-Based Access Control) ์ ์šฉ

โœ… 1.1 Argo CD ๊ธฐ๋ณธ RBAC ์ •์ฑ… ์„ค์ •

Argo CD๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ RBAC ์ •์ฑ…์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๋ฐ ์„œ๋น„์Šค์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ ๊ธฐ๋ณธ RBAC ์„ค์ • ์˜ˆ์ œ (argocd-rbac-cm.yaml)

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-rbac-cm
  namespace: argocd
data:
  policy.default: role:readonly  # ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์‚ฌ์šฉ์ž๋Š” Read-Only ๊ถŒํ•œ๋งŒ ๊ฐ€์ง
  policy.csv: |
    p, admin, applications, *, */*, allow  # ๊ด€๋ฆฌ์ž(Admin) ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ œ์–ด ๊ฐ€๋Šฅ
    p, dev, applications, get, */*, allow  # ๊ฐœ๋ฐœ์ž(Dev)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์กฐํšŒ๋งŒ ๊ฐ€๋Šฅ
    p, dev, applications, sync, dev/*, allow  # ๊ฐœ๋ฐœ์ž๋Š” dev ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด ๋™๊ธฐํ™” ๊ฐ€๋Šฅ
    p, qa, applications, sync, qa/*, allow  # QA ์‚ฌ์šฉ์ž๋Š” qa ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด ๋™๊ธฐํ™” ๊ฐ€๋Šฅ

 

โœ… ์„ค๋ช…:
โœ” policy.default: role:readonly → ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์‚ฌ์šฉ์ž๋Š” ์ฝ๊ธฐ ์ „์šฉ(Read-Only) ๊ถŒํ•œ
โœ” p, admin, applications, *, */*, allow → Admin ์—ญํ•  ์‚ฌ์šฉ์ž๋Š” ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ์–ด ๊ฐ€๋Šฅ
โœ” p, dev, applications, sync, dev/*, allow → Dev ์—ญํ•  ์‚ฌ์šฉ์ž๋Š” dev ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ๋งŒ ๋™๊ธฐํ™” ๊ฐ€๋Šฅ

 

โœ… RBAC ์ •์ฑ… ์ ์šฉ

kubectl apply -f argocd-rbac-cm.yaml -n argocd
kubectl rollout restart deployment argocd-server -n argocd

โœ… 1.2 Argo CD SSO(Single Sign-On) ์ ์šฉ

Argo CD๋Š” SSO(Single Sign-On) ๋ฅผ ์ง€์›ํ•˜์—ฌ ๋ณด์•ˆ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
DEX(Identity Provider)๋ฅผ ํ™œ์šฉํ•˜์—ฌ OIDC(OpenID Connect), GitHub, LDAP ์ธ์ฆ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ Argo CD SSO ์„ค์ • ์˜ˆ์ œ (OIDC ๊ธฐ๋ฐ˜)

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
data:
  url: https://argocd.example.com
  oidc.config: |
    name: Keycloak
    issuer: https://keycloak.example.com/auth/realms/master
    clientID: argocd
    clientSecret: $oidc.keycloak.clientSecret
    requestedScopes:
      - openid
      - profile
      - email

 

โœ… ์„ค๋ช…:
โœ” issuer: https://keycloak.example.com/auth/realms/masterKeycloak OIDC ์ œ๊ณต์ž ์‚ฌ์šฉ
โœ” clientID: argocd → Argo CD์˜ OIDC ํด๋ผ์ด์–ธํŠธ ID ์„ค์ •
โœ” clientSecret: $oidc.keycloak.clientSecret → ํด๋ผ์ด์–ธํŠธ ์‹œํฌ๋ฆฟ์„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌ

 

โœ… SSO ์ ์šฉ ํ›„ ๋กœ๊ทธ์ธ ํ…Œ์ŠคํŠธ

argocd login argocd.example.com --sso

 

โœ… SSO ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด ์ธ์ฆ ์„ฑ๊ณต ํ›„ Argo CD ์ ‘๊ทผ ๊ฐ€๋Šฅ


๐Ÿ”น 2. Argo CD ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ ๋ฐ ์•”ํ˜ธํ™”

GitOps ํ™˜๊ฒฝ์—์„œ๋Š” ์‹œํฌ๋ฆฟ(Secret)์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
Argo CD๋Š” Sealed Secrets, External Secrets์„ ํ™œ์šฉํ•˜์—ฌ ์‹œํฌ๋ฆฟ์„ ์•”ํ˜ธํ™”ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… 2.1 Sealed Secrets์„ ํ™œ์šฉํ•œ ์‹œํฌ๋ฆฟ ์•”ํ˜ธํ™”

๐Ÿ“Œ Sealed Secrets์„ ํ™œ์šฉํ•œ ์‹œํฌ๋ฆฟ ์ƒ์„ฑ ๋ฐ ์•”ํ˜ธํ™”

kubectl create secret generic db-secret --from-literal=DB_PASSWORD='supersecret' -n example
kubectl label secret db-secret sealedsecrets.bitnami.com/sealed="true"
kubeseal --format yaml < db-secret.yaml > sealed-secret.yaml

 

๐Ÿ“Œ Git์— ์ €์žฅํ•  ์•”ํ˜ธํ™”๋œ Sealed Secret ์˜ˆ์ œ

apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
  name: db-secret
  namespace: example
spec:
  encryptedData:
    DB_PASSWORD: AgAGXt...  # ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ

 

โœ… ์„ค๋ช…:
โœ” kubeseal์„ ์‚ฌ์šฉํ•˜์—ฌ Git ์ €์žฅ์†Œ์— ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹œํฌ๋ฆฟ์„ ์•”ํ˜ธํ™”
โœ” ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ๋Š” ๋ณตํ˜ธํ™” ํ‚ค ์—†์ด๋Š” ์ ‘๊ทผ ๋ถˆ๊ฐ€


โœ… 2.2 External Secrets์„ ํ™œ์šฉํ•œ ์‹œํฌ๋ฆฟ ์™ธ๋ถ€ ์ €์žฅ

AWS Secrets Manager, HashiCorp Vault์™€ ๊ฐ™์€ ์™ธ๋ถ€ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ External Secrets ์„ค์ • ์˜ˆ์ œ (AWS Secrets Manager ์—ฐ๋™)

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

 

โœ… ์„ค๋ช…:
โœ” secretStoreRef.name: aws-secrets → AWS Secrets Manager๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ
โœ” remoteRef.key: production/db-password → AWS Secrets์—์„œ ํŠน์ • ํ‚ค๋ฅผ ๋ถˆ๋Ÿฌ์™€ Kubernetes์— ์ ์šฉ


๐Ÿ”น 3. Argo CD ๋ณด์•ˆ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๊ฐ์‚ฌ ๋กœ๊ทธ ํ™œ์„ฑํ™”

๋ณด์•ˆ ์ด๋ฒคํŠธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๊ฐ์‚ฌ(Audit) ๋กœ๊ทธ๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ
๋ˆ„๊ฐ€, ์–ธ์ œ, ์–ด๋–ค ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ–ˆ๋Š”์ง€ ์ถ”์  ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ… 3.1 Argo CD ๊ฐ์‚ฌ(Audit) ๋กœ๊ทธ ํ™œ์„ฑํ™”

๐Ÿ“Œ Argo CD ๋กœ๊ทธ ์„ค์ • (argocd-cm.yaml)

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
data:
  application.instanceLabelKey: argocd.argoproj.io/instance
  server.enable.audit: "true"  # ๊ฐ์‚ฌ ๋กœ๊ทธ ํ™œ์„ฑํ™”

 

โœ… ์„ค๋ช…:
โœ” server.enable.audit: "true" → Argo CD ๊ฐ์‚ฌ ๋กœ๊ทธ ํ™œ์„ฑํ™”

 

โœ… ๋กœ๊ทธ ํ™•์ธ ๋ฐฉ๋ฒ•

kubectl logs -l app.kubernetes.io/name=argocd-server -n argocd

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

๐ŸŸข RBAC ๋ฐ SSO(Single Sign-On) ์ ์šฉ์„ ํ†ตํ•ด ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ
๐ŸŸข Sealed Secrets, External Secrets์„ ํ™œ์šฉํ•˜์—ฌ ์‹œํฌ๋ฆฟ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
๐ŸŸข ๊ฐ์‚ฌ(Audit) ๋กœ๊ทธ ๋ฐ ๋ณด์•ˆ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ GitOps ํ™˜๊ฒฝ์˜ ๋ณด์•ˆ์„ฑ์„ ๊ฐ•ํ™” ๊ฐ€๋Šฅ

728x90