Kubernetes Tools/ArgoCD

[Ep.41] [Argo CD ํ™•์žฅ #1] Argo CD์™€ ์„œ๋น„์Šค ๋ฉ”์‰ฌ(Istio)๋ฅผ ํ™œ์šฉํ•œ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด ๋ฐ ๋ฐฐํฌ ์ตœ์ ํ™”

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

๐Ÿ”น Argo CD์™€ ์„œ๋น„์Šค ๋ฉ”์‰ฌ(Istio)๋ฅผ ํ•จ๊ป˜ ํ™œ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

Kubernetes ํ™˜๊ฒฝ์—์„œ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„์˜ ํŠธ๋ž˜ํ”ฝ์„ ํšจ์œจ์ ์œผ๋กœ ์ œ์–ดํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
ํŠนํžˆ, Istio์™€ ๊ฐ™์€ ์„œ๋น„์Šค ๋ฉ”์‰ฌ(Service Mesh) ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Argo CD์™€ ์—ฐ๋™ํ•˜๋ฉด ๋ฐฐํฌ ์ž๋™ํ™”์™€ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด๋ฅผ ํ•จ๊ป˜ ์šด์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

โœ… Argo CD + Istio ์กฐํ•ฉ์ด ํ•„์š”ํ•œ ์ด์œ 

 

โœ” Canary ๋ฐฐํฌ ๋ฐ ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ ์ตœ์ ํ™”
โœ” ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ…์„ ์กฐ์ •ํ•˜์—ฌ ํŠน์ • ๋ฒ„์ „์—๋งŒ ํ…Œ์ŠคํŠธ ํŠธ๋ž˜ํ”ฝ ์ ์šฉ ๊ฐ€๋Šฅ
โœ” ์„œ๋น„์Šค ๊ฐ„ TLS ์•”ํ˜ธํ™” ๋ฐ Zero-Trust ๋„คํŠธ์›Œํฌ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
โœ” ๋ฐฐํฌ ์ค‘ ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋น ๋ฅธ ๋กค๋ฐฑ ๊ฐ€๋Šฅ


๐Ÿ”น 1. Istio์™€ Argo CD ์—ฐ๋™์„ ์œ„ํ•œ ๊ธฐ๋ณธ ๊ตฌ์„ฑ

Argo CD์™€ Istio๋ฅผ ํ•จ๊ป˜ ํ™œ์šฉํ•˜๋ ค๋ฉด, ๋จผ์ € Istio๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ… 1.1 Istio ์„ค์น˜

istioctl install --set profile=demo -y

 

โœ… ์„ค๋ช…:
โœ” profile=demo → ๊ธฐ๋ณธ Istio ๋ฐ๋ชจ ํ”„๋กœํŒŒ์ผ ์„ค์น˜
โœ” ์„ค์น˜ ํ›„ Istio์˜ IngressGateway, Control Plane, Sidecar Injector ๊ฐ€ ์ž๋™ ๋ฐฐํฌ๋จ

 

โœ… Istio ์„ค์น˜ ํ™•์ธ

kubectl get pods -n istio-system

 

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

NAME                                   READY   STATUS    RESTARTS   AGE
istiod-5f7d78d5b7-jw9sd                1/1     Running   0          2m
istio-ingressgateway-cd47d9b8f-kfj2d   1/1     Running   0          2m

๐Ÿ”น 2. Istio VirtualService๋ฅผ ํ™œ์šฉํ•œ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด

Istio์˜ VirtualService ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํŠน์ • ํŠธ๋ž˜ํ”ฝ์„ ์›ํ•˜๋Š” ์„œ๋น„์Šค ๋ฒ„์ „์œผ๋กœ ๋ผ์šฐํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด Canary ๋ฐฐํฌ ๋ฐ ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… 2.1 Canary ๋ฐฐํฌ ์„ค์ • (80% Stable, 20% Canary)

๐Ÿ“Œ Canary ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ VirtualService ์„ค์ •

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: example-app
  namespace: example
spec:
  hosts:
    - example-app.example.svc.cluster.local  # ๋‚ด๋ถ€ ์„œ๋น„์Šค ๋„๋ฉ”์ธ
  http:
    - route:
        - destination:
            host: example-app
            subset: stable  # ๊ธฐ์กด ์„œ๋น„์Šค ๋ฒ„์ „
          weight: 80  # 80% ํŠธ๋ž˜ํ”ฝ ํ• ๋‹น
        - destination:
            host: example-app
            subset: canary  # ์ƒˆ๋กœ์šด ์„œ๋น„์Šค ๋ฒ„์ „
          weight: 20  # 20% ํŠธ๋ž˜ํ”ฝ ํ• ๋‹น

 

โœ… ์„ค๋ช…:
โœ” route.destination.host: example-app → ๋Œ€์ƒ ์„œ๋น„์Šค ์ง€์ •
โœ” subset: stable → ๊ธฐ์กด ๋ฒ„์ „(stable)์œผ๋กœ 80% ํŠธ๋ž˜ํ”ฝ

โœ” subset: canary → ์‹ ๊ทœ ๋ฒ„์ „(canary)์œผ๋กœ 20% ํŠธ๋ž˜ํ”ฝ

 

โœ… VirtualService ๋ฐฐํฌ

kubectl apply -f canary-virtualservice.yaml -n example

 

โœ… ํŠธ๋ž˜ํ”ฝ ๋ถ„๋ฐฐ ํ™•์ธ

kubectl get virtualservice -n example

 

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

NAME          GATEWAYS    HOSTS                             AGE
example-app   <none>      example-app.example.svc.cluster.local   1m

๐Ÿ”น 3. Argo CD์™€ Istio ์—ฐ๋™ํ•˜์—ฌ ๋ฐฐํฌ ์ž๋™ํ™”

Argo CD๋ฅผ ํ™œ์šฉํ•˜๋ฉด Canary ๋ฐฐํฌ, ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ ์‹œ Istio ์„ค์ •์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… 3.1 Istio ์„ค์ •์„ ํฌํ•จํ•œ Argo CD ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •์˜

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: example-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/repo.git
    targetRevision: main
    path: istio-config  # Istio ์„ค์ •์ด ์ €์žฅ๋œ Git ๊ฒฝ๋กœ
  destination:
    server: https://kubernetes.default.svc
    namespace: example
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

 

โœ… ์„ค๋ช…:
โœ” path: istio-config → Git ์ €์žฅ์†Œ์—์„œ Istio VirtualService๋ฅผ ๊ด€๋ฆฌ
โœ” syncPolicy.automated.prune: true → Git ์ƒํƒœ์™€ ๋‹ค๋ฅด๋ฉด ์ž๋™ ์ •๋ฆฌ
โœ” syncPolicy.automated.selfHeal: true → Kubernetes ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž๋™ ๋ณต๊ตฌ

 

โœ… Argo CD์—์„œ Canary ๋ฐฐํฌ ๋™๊ธฐํ™”

argocd app sync example-app

 

โœ… ๋ฐฐํฌ ์ƒํƒœ ํ™•์ธ

argocd app get example-app

 

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

NAME             STATUS     SYNC STATUS
example-app     Healthy    Synced

๐Ÿ”น 4. Argo CD์™€ Istio๋ฅผ ํ™œ์šฉํ•œ ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ

๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ๋Š” ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์„œ๋น„์Šค(๋ธ”๋ฃจ)๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด ๋ฒ„์ „(๊ทธ๋ฆฐ)์„ ๋ฐฐํฌํ•œ ํ›„,
ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ์ƒˆ๋กœ์šด ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

โœ… 4.1 ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ VirtualService ์„ค์ •

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: example-app
  namespace: example
spec:
  hosts:
    - example-app.example.svc.cluster.local
  http:
    - route:
        - destination:
            host: example-app
            subset: blue  # ๊ธฐ์กด ์„œ๋น„์Šค
          weight: 100  # 100% ํŠธ๋ž˜ํ”ฝ

 

โœ… ์„ค๋ช…:
โœ” subset: blue → ๊ธฐ์กด ๋ฒ„์ „(Blue)์œผ๋กœ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ ์ „์†ก

โœ… 4.2 ์ƒˆ๋กœ์šด ๋ฒ„์ „ ๋ฐฐํฌ ํ›„ ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜

๋ฐฐํฌ ํ›„ ํŠธ๋ž˜ํ”ฝ์„ subset: green ์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: example-app
  namespace: example
spec:
  hosts:
    - example-app.example.svc.cluster.local
  http:
    - route:
        - destination:
            host: example-app
            subset: green  # ์ƒˆ๋กœ์šด ์„œ๋น„์Šค
          weight: 100  # 100% ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜

 

โœ… ์„ค๋ช…:
โœ” subset: green → ์ƒˆ๋กœ์šด ๋ฒ„์ „(Green)์œผ๋กœ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ ์ „์†ก

 

โœ… ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ ์ „ํ™˜ ์‹คํ–‰

kubectl apply -f blue-green-virtualservice.yaml -n example

 

โœ… ํŠธ๋ž˜ํ”ฝ ๋ณ€๊ฒฝ ํ™•์ธ

kubectl get virtualservice -n example -o yaml

 

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

http:
  route:
    - destination:
        host: example-app
        subset: green
      weight: 100

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

๐ŸŸข Istio VirtualService๋ฅผ ํ™œ์šฉํ•˜๋ฉด Canary ๋ฐ ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ๋ฅผ ์‰ฝ๊ฒŒ ์ ์šฉ ๊ฐ€๋Šฅ
๐ŸŸข Argo CD์™€ ์—ฐ๋™ํ•˜์—ฌ Istio ์„ค์ •์„ ์ž๋™์œผ๋กœ ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
๐ŸŸข GitOps ๋ฐฉ์‹์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜ ๋ฐ ๋ฐฐํฌ ์ „๋žต์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Œ
๐ŸŸข ์„œ๋น„์Šค ๋ฉ”์‰ฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Œ

728x90