Kubernetes Tools/ArgoCD

[Ep.28] [Argo CD μ„±λŠ₯ μ΅œμ ν™” #5] Argo CD와 Kubernetes λ„€νŠΈμ›Œν¬ μ •μ±… 및 λ³΄μ•ˆ 적용

ygtoken 2025. 3. 17. 13:11
728x90

πŸ”Ή Kubernetes λ„€νŠΈμ›Œν¬ μ •μ±…(Network Policy)μ΄λž€?

Kubernetes λ„€νŠΈμ›Œν¬ μ •μ±…(Network Policy) λŠ” Pod κ°„μ˜ νŠΈλž˜ν”½μ„ μ œμ–΄ν•˜μ—¬ λ³΄μ•ˆμ„ κ°•ν™”ν•˜λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.
기본적으둜 KubernetesλŠ” λͺ¨λ“  Pod κ°„μ˜ 톡신을 ν—ˆμš©ν•˜μ§€λ§Œ, λ„€νŠΈμ›Œν¬ 정책을 μ μš©ν•˜λ©΄ νŠΉμ • νŠΈλž˜ν”½λ§Œ ν—ˆμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

βœ… λ„€νŠΈμ›Œν¬ μ •μ±…μ˜ μ£Όμš” κΈ°λŠ₯


βœ” νŠΉμ • Pod κ°„μ˜ νŠΈλž˜ν”½μ„ ν—ˆμš© λ˜λŠ” 차단
βœ” νŠΉμ • λ„€μž„μŠ€νŽ˜μ΄μŠ€ λ‚΄μ—μ„œ νŠΈλž˜ν”½μ„ μ œν•œ
βœ” μ™ΈλΆ€ λ„€νŠΈμ›Œν¬μ—μ„œ μ˜€λŠ” νŠΈλž˜ν”½μ„ 차단

 

βœ… GitOps λ°©μ‹μœΌλ‘œ λ„€νŠΈμ›Œν¬ 정책을 κ΄€λ¦¬ν•˜λŠ” 이유


βœ” λ³΄μ•ˆ 정책을 μ½”λ“œλ‘œ κ΄€λ¦¬ν•˜μ—¬ μΌκ΄€λœ 운영 κ°€λŠ₯
βœ” Git λ³€κ²½ 이λ ₯을 톡해 λ„€νŠΈμ›Œν¬ μ •μ±… λ³€κ²½ 사항을 좔적 κ°€λŠ₯
βœ” Argo CDλ₯Ό 톡해 μžλ™μœΌλ‘œ λ„€νŠΈμ›Œν¬ 정책을 λ™κΈ°ν™”ν•˜μ—¬ μˆ˜λ™ μ„€μ • λΆˆν•„μš”


πŸ”Ή 1. Argo CDλ₯Ό ν™œμš©ν•œ λ„€νŠΈμ›Œν¬ μ •μ±… 적용 방법

Argo CDλŠ” Kubernetes λ§€λ‹ˆνŽ˜μŠ€νŠΈλ₯Ό Gitμ—μ„œ λ™κΈ°ν™”ν•˜λŠ” λ°©μ‹μ΄λ―€λ‘œ,
λ„€νŠΈμ›Œν¬ 정책도 Git에 μ„ μ–Έμ μœΌλ‘œ μ •μ˜ν•˜κ³  μžλ™μœΌλ‘œ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

βœ… λ„€νŠΈμ›Œν¬ 정책을 μ μš©ν•˜λŠ” Argo CD Application 예제

apiVersion: argoproj.io/v1alpha1  # Argo CD의 API 버전
kind: Application  # Argo CDμ—μ„œ κ΄€λ¦¬ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜
metadata:
  name: network-policy-app  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 이름
  namespace: argocd  # Argo CD λ„€μž„μŠ€νŽ˜μ΄μŠ€
spec:
  project: default  # Argo CD ν”„λ‘œμ νŠΈ μ§€μ •

  source:
    repoURL: https://github.com/example/repo.git  # Git μ €μž₯μ†Œ URL
    targetRevision: main  # μ‚¬μš©ν•  Git 브랜치
    path: network-policies  # λ„€νŠΈμ›Œν¬ 정책이 μ €μž₯된 Git 경둜

  destination:
    server: https://kubernetes.default.svc  # 배포할 Kubernetes ν΄λŸ¬μŠ€ν„°
    namespace: example-namespace  # λ„€νŠΈμ›Œν¬ 정책이 적용될 λ„€μž„μŠ€νŽ˜μ΄μŠ€

  syncPolicy:
    automated:
      prune: true  # Gitμ—μ„œ μ‚­μ œλœ λ¦¬μ†ŒμŠ€λ₯Ό Kubernetesμ—μ„œλ„ μ‚­μ œ
      selfHeal: true  # Kubernetes λ¦¬μ†ŒμŠ€κ°€ λ³€κ²½λ˜μ—ˆμ„ 경우 Git μƒνƒœλ‘œ μžλ™ 볡ꡬ

 

βœ… μ„€λͺ…:
βœ” source.repoURL → λ„€νŠΈμ›Œν¬ 정책이 ν¬ν•¨λœ Git μ €μž₯μ†Œμ˜ URL
βœ” source.path → Git μ €μž₯μ†Œ λ‚΄μ—μ„œ λ„€νŠΈμ›Œν¬ 정책이 μœ„μΉ˜ν•œ 경둜
βœ” destination.namespace → ν•΄λ‹Ή λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— λ„€νŠΈμ›Œν¬ 정책이 적용됨
βœ” syncPolicy.automated → Git λ³€κ²½ 사항을 μžλ™μœΌλ‘œ 적용


πŸ”Ή 2. Kubernetes λ„€νŠΈμ›Œν¬ μ •μ±… 예제

Argo CDμ—μ„œ λ„€νŠΈμ›Œν¬ 정책을 선언적 λ°©μ‹μœΌλ‘œ κ΄€λ¦¬ν•˜λ €λ©΄, NetworkPolicy λ¦¬μ†ŒμŠ€λ₯Ό μ •μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

βœ… 1️⃣ 기본적으둜 λͺ¨λ“  νŠΈλž˜ν”½μ„ μ°¨λ‹¨ν•˜λŠ” μ •μ±…

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all  # λͺ¨λ“  λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ„ μ°¨λ‹¨ν•˜λŠ” μ •μ±…
  namespace: example-namespace  # μ μš©ν•  λ„€μž„μŠ€νŽ˜μ΄μŠ€
spec:
  podSelector: {}  # λͺ¨λ“  Pod에 적용
  policyTypes:
    - Ingress  # μ™ΈλΆ€μ—μ„œ λ“€μ–΄μ˜€λŠ” νŠΈλž˜ν”½ 차단
    - Egress   # μ™ΈλΆ€λ‘œ λ‚˜κ°€λŠ” νŠΈλž˜ν”½ 차단

 

βœ… μ„€λͺ…:
βœ” podSelector: {} → λͺ¨λ“  Pod에 적용
βœ” policyTypes → Ingress(μˆ˜μ‹ ) 및 Egress(λ°œμ‹ ) νŠΈλž˜ν”½μ„ λͺ¨λ‘ 차단
βœ” 기본적으둜 Pod κ°„ 톡신을 μ°¨λ‹¨ν•˜μ—¬ λ³΄μ•ˆμ„ κ°•ν™”


βœ… 2️⃣ νŠΉμ • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—λ§Œ Ingress νŠΈλž˜ν”½ ν—ˆμš© (ν”„λ‘ νŠΈμ—”λ“œ → λ°±μ—”λ“œ)

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
  namespace: example-namespace
spec:
  podSelector:
    matchLabels:
      app: backend  # backend 라벨이 μžˆλŠ” Pod에 μ •μ±… 적용
  policyTypes:
    - Ingress  # μˆ˜μ‹  νŠΈλž˜ν”½ μ œμ–΄
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: frontend  # frontend 라벨이 μžˆλŠ” Podμ—μ„œ μ˜€λŠ” μš”μ²­ ν—ˆμš©
      ports:
        - protocol: TCP
          port: 8080  # 8080 ν¬νŠΈμ—μ„œλ§Œ νŠΈλž˜ν”½ ν—ˆμš©

 

βœ… μ„€λͺ…:
βœ” podSelector.matchLabels.app: backend → backend μ• ν”Œλ¦¬μΌ€μ΄μ…˜ Pod에 μ •μ±… 적용
βœ” ingress.from.podSelector.app: frontend → frontend μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλ§Œ μ ‘κ·Ό ν—ˆμš©
βœ” ports.port: 8080 → 8080 ν¬νŠΈμ—μ„œλ§Œ ν—ˆμš©ν•˜μ—¬ λ³΄μ•ˆ κ°•ν™”


βœ… 3️⃣ μ™ΈλΆ€ 인터넷(0.0.0.0/0)μ—μ„œ μ˜€λŠ” νŠΈλž˜ν”½μ„ μ°¨λ‹¨ν•˜λŠ” μ •μ±…

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-external-access
  namespace: example-namespace
spec:
  podSelector: {}  # λͺ¨λ“  Pod에 적용
  policyTypes:
    - Ingress  # μˆ˜μ‹  νŠΈλž˜ν”½ 차단
  ingress:
    - from:
        - ipBlock:
            cidr: 10.0.0.0/8  # λ‚΄λΆ€ λ„€νŠΈμ›Œν¬μ—μ„œ μ˜€λŠ” μš”μ²­λ§Œ ν—ˆμš© (AWS VPC 예제)

 

βœ… μ„€λͺ…:
βœ” ipBlock.cidr: 10.0.0.0/8 → AWS VPC λ‚΄λΆ€μ—μ„œ μ˜€λŠ” νŠΈλž˜ν”½λ§Œ ν—ˆμš©
βœ” μ™ΈλΆ€(인터넷)μ—μ„œ 접근을 μ°¨λ‹¨ν•˜μ—¬ λ³΄μ•ˆ κ°•ν™”


πŸ”Ή 3. Argo CDλ₯Ό ν™œμš©ν•œ λ„€νŠΈμ›Œν¬ μ •μ±… μžλ™ν™” 배포

βœ… Argo CD CLIλ₯Ό μ‚¬μš©ν•˜μ—¬ λ„€νŠΈμ›Œν¬ μ •μ±… 배포 μƒνƒœ 확인

argocd app get network-policy-app

 

βœ… λ„€νŠΈμ›Œν¬ μ •μ±… 동기화 μ‹€ν–‰

argocd app sync network-policy-app

 

βœ… 배포된 λ„€νŠΈμ›Œν¬ μ •μ±… 확인 (Kubernetes λͺ…λ Ήμ–΄ μ‚¬μš©)

kubectl get networkpolicy -n example-namespace

πŸ”Ή 4. Argo CD λ„€νŠΈμ›Œν¬ μ •μ±… 적용 μ‹œ κ³ λ €ν•  점

βœ… 1️⃣ λ„€νŠΈμ›Œν¬ μ •μ±… 적용 ν›„ 접속 ν…ŒμŠ€νŠΈ ν•„μˆ˜

βœ” λ„€νŠΈμ›Œν¬ μ •μ±… 적용 ν›„ kubectl exec λ˜λŠ” curl λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΈλž˜ν”½μ΄ μ •μƒμ μœΌλ‘œ μ œν•œλ˜λŠ”μ§€ ν…ŒμŠ€νŠΈ
βœ” μ˜ˆμƒν•œ λŒ€λ‘œ νŠΈλž˜ν”½μ΄ μ°¨λ‹¨λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄, 정책이 μ˜¬λ°”λ₯΄κ²Œ μ •μ˜λ˜μ—ˆλŠ”μ§€ 확인 ν•„μš”

βœ… 2️⃣ GitOps λ°©μ‹μœΌλ‘œ λ³€κ²½ 관리

βœ” Git에 λ„€νŠΈμ›Œν¬ 정책을 μ €μž₯ν•˜κ³  Argo CDλ₯Ό 톡해 λ°°ν¬ν•˜λ©΄ μ •μ±… λ³€κ²½ 이λ ₯을 좔적 κ°€λŠ₯
βœ” git log λ˜λŠ” argocd app history λͺ…λ Ήμ–΄λ₯Ό ν™œμš©ν•˜μ—¬ λ³€κ²½ 사항을 좔적

βœ… 3️⃣ RBAC(Role-Based Access Control)와 ν•¨κ»˜ μ‚¬μš©

βœ” λ„€νŠΈμ›Œν¬ μ •μ±…λ§ŒμœΌλ‘œλŠ” μΆ©λΆ„ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, RBAC을 μ μš©ν•˜μ—¬ λ³΄μ•ˆμ„ λ”μš± κ°•ν™”
βœ” RoleBinding 및 ClusterRoleBinding을 ν™œμš©ν•˜μ—¬ νŠΉμ • λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— λŒ€ν•œ κΆŒν•œμ„ μ œν•œ


πŸ”Ή κ²°λ‘ : 이번 κΈ€μ—μ„œ 배운 핡심 λ‚΄μš© 정리

🟒 Kubernetes λ„€νŠΈμ›Œν¬ μ •μ±…(NetworkPolicy)을 ν™œμš©ν•˜λ©΄ Pod κ°„μ˜ νŠΈλž˜ν”½μ„ μ œμ–΄ν•˜μ—¬ λ³΄μ•ˆμ„ κ°•ν™”ν•  수 있음
🟒 Argo CDλ₯Ό μ‚¬μš©ν•˜λ©΄ λ„€νŠΈμ›Œν¬ 정책을 GitOps λ°©μ‹μœΌλ‘œ κ΄€λ¦¬ν•˜κ³  μžλ™ 배포 κ°€λŠ₯
🟒 Pod κ°„μ˜ νŠΉμ • νŠΈλž˜ν”½λ§Œ ν—ˆμš©ν•˜μ—¬ μ™ΈλΆ€ 접근을 μ°¨λ‹¨ν•˜κ³ , λ³΄μ•ˆμ΄ κ°•ν™”λœ Kubernetes ν΄λŸ¬μŠ€ν„° 운영 κ°€λŠ₯
🟒 RBACκ³Ό ν•¨κ»˜ ν™œμš©ν•˜λ©΄ 보닀 κ°•λ ₯ν•œ λ³΄μ•ˆ 정책을 적용 κ°€λŠ₯

728x90