4 min read

๋ฌด์ž‘์ • Istio ์‚ฌ์šฉํ•ด ๋ณด๊ธฐ

Table of Contents

Istio

ํ”„๋กœ์ ํŠธ์—์„œ ๊ณ ๊ฐ์‚ฌ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด Istio๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ผ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.
๊ธฐ์กด์—๋Š” NGINX Ingress Controller๋ฅผ ์‚ฌ์šฉํ•ด ์™”๋Š”๋ฐ, ์ด๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

Istio๋ฅผ ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•ด ๋ณธ ์ ์€ ์ฒ˜์Œ์ด์–ด์„œ ์‹œํ–‰์ฐฉ์˜ค๊ฐ€ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.
์ด ๊ณผ์ •์—์„œ ๊ฒช์—ˆ๋˜ ๊ณผ์ •๋“ค๊ณผ ๋ฌธ์ œ๋“ค์„ ์ •๋ฆฌํ•ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

:::info ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—

์•„์‰ฝ๊ฒŒ๋„, Service Mesh์™€ Sidecar ๊ด€๋ จ ๋‚ด์šฉ์€ ๊ฑฐ์˜ ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ด ๋ถ€๋ถ„์€ ๊ธฐํšŒ๊ฐ€ ๋˜๋ฉด 2ํŽธ์œผ๋กœโ€ฆ

:::

Istio?

Istio๋Š” ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Service Mesh ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.
Istio๋Š” Sidecar ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด ๊ถŒํ•œ๊ณผ ์ธ์ฆ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , L7 ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ œ๊ณตํ•˜์—ฌ gRPC๋‚˜ HTTP/2 ํŠธ๋ž˜ํ”ฝ์˜ ๋ถ„์‚ฐ๋„ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์œ„์—์„œ ๋งํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์—ฌ๊ธฐ์„œ๋Š” NGINX Ingress Controller๋ฅผ ๋Œ€์ฒดํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœ์‹œํ‚ค๋Š” ๊ฒƒ์ด Istio์˜ ๋„์ž… ๋ชฉ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Istio๋ฅผ ์„ค์น˜ํ•˜๊ณ , ์ถ”๊ฐ€๋กœ Gateway์™€ VirtualService๋ฅผ ์„ค์ •ํ•ด ์„œ๋น„์Šค๋ฅผ ๋…ธ์ถœ์‹œํ‚ค๋Š” ๊ณผ์ •์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

Istio๋ฅผ ์ ์šฉํ•˜๋ฉฐ ๊ฒช์€ ๋ฌธ์ œ๋“ค

์ •๊ทœ์‹ Rewrite ๋ฌธ์ œ

๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ NGINX Ingress Controller ์„ค์ •์— ๊ฒฝ๋กœ๋ฅผ ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•ด ์žฌ์ž‘์„ฑํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ Istio์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด v1.19 ์ด์ƒ์˜ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Helm chart๋ฅผ ํ†ตํ•œ ์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Istio Helm chart๋Š” ์ด 3๊ฐœ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ฐจ๋ก€๋Œ€๋กœ ์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  1. istio/base : ๊ธฐ๋ณธ ์„ค์ •์„ ๋‹ด๋‹นํ•˜๋Š” Helm chart์ž…๋‹ˆ๋‹ค.
  2. istio/istiod : ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์„ ๋‹ด๋‹นํ•˜๋Š” Helm chart์ž…๋‹ˆ๋‹ค.
  3. istio/gateway : ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋‹ด๋‹นํ•˜๋Š” Helm chart์ž…๋‹ˆ๋‹ค.

์ดํ›„์—๋Š” ์•Œ๋งž๊ฒŒ ์ •๊ทœ์‹ ๊ฒฝ๋กœ๋ฅผ ์žฌ์ž‘์„ฑํ•ด ์ฃผ๋ฉด ๋˜๋Š”๋ฐ, ์ž๋ฃŒ๋ฅผ ์ฐพ์•„๋„ ์ž˜ ๋‚˜์˜ค์ง€ ์•Š์•˜๊ณ  ํ•ด๋‹น ๋งํฌ์ฒ˜๋Ÿผ ์ ์šฉํ•ด ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์™ธ๋ถ€ ๋…ธ์ถœ์€ ์–ด๋–ป๊ฒŒ ํ•˜์ง€?

istio/gateway๊นŒ์ง€ ์„ค์น˜ํ•œ ์ดํ›„์—๋Š” ์™ธ๋ถ€์— ๋…ธ์ถœ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
ํ†ต์ƒ์ ์ธ ์„œ๋น„์Šค ๋…ธ์ถœ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์ง„ํ–‰์„ ํ•˜๋ฉด ๋˜๋Š”๋ฐ, ๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์€ istio/gateway ์ฐจํŠธ์˜ values.yaml ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

# ...
defaults:
  service:
    type: LoadBalancer
    loadBalancerIP: "์—ฌ๊ธฐ์— ์™ธ๋ถ€์šฉ IP ์ž…๋ ฅ"

๋ณดํ†ต์€ ์œ„์™€ ๊ฐ™์ด ์„ค์ •ํ•˜๊ฑฐ๋‚˜, ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ Annotation์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์•„์ฃผ ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ, externalIPs๋ฅผ ์‚ฌ์šฉํ•ด IP๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Argo CD๋กœ Istio ๋ฐฐํฌํ•˜๊ธฐ

์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Argo CD๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋“  ์•ฑ์„ ๋ฐฐํฌํ–ˆ๊ณ , ๋‹น์—ฐํžˆ Istio๋„ ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์•ž์—์„œ ์ด์•ผ๊ธฐํ•œ ๊ฒƒ์ฒ˜๋Ÿผ Istio Helm chart๋Š” ์˜์กด์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์ฐจ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๊ณ ๋ฏผ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ์ƒ๊ฐํ•œ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ 2๊ฐ€์ง€์˜€์Šต๋‹ˆ๋‹ค.

  1. Helmfile ์‚ฌ์šฉํ•ด ์˜์กด์„ฑ ๋ถ€์—ฌํ•˜๊ธฐ
    ์ œ๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜์กด์„ฑ์„ ๋ถ€์—ฌํ•˜์—ฌ Istio๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒ€์ฆ ์—†์ด ๋„์ž…ํ•˜๊ธฐ์—๋Š” ๋ฌด๋ฆฌ๊ฐ€ ์žˆ์–ด ์ฑ„์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  2. Subchart ์‚ฌ์šฉํ•˜๊ธฐ
    Istio๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” 3๊ฐœ์˜ Helm chart๋ฅผ ํฌํ•จํ•œ ์ƒ์œ„ Helm chart๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. Helm์—์„œ๋Š” Chart dependency๋ฅผ ํ†ตํ•ด ํŠน์ • Subchart๋ฅผ ํ™œ์„ฑํ™” ๋˜๋Š” ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์„ ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์ตœ์ดˆ ์„ค์น˜ ๋•Œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์—๋Š” istio/base๋งŒ ํ™œ์„ฑํ™”ํ•˜์—ฌ ์„ค์น˜ํ•˜๊ณ , ์ดํ›„์—๋Š” values.yaml ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด ์ฐจ๋ก€๋Œ€๋กœ ํ™œ์„ฑํ™”ํ•˜์—ฌ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ์™ธ

  • TLS๋ฅผ ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, TLS Secret์„ Istio๊ฐ€ ์„ค์น˜๋œ Namespace์— ์ƒ์„ฑํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    (๊ธฐ๋ณธ๊ฐ’์€ istio-system)
    ๊ณต์‹ ๋ฌธ์„œ์—๋„ ์ ํ˜€ ์žˆ๋Š”๋ฐ, ๊ด€๋ จํ•ด์„œ ์‹œํ–‰์ฐฉ์˜ค๊ฐ€ ์กฐ๊ธˆ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • istio/gateway ์ฐจํŠธ์˜ ์ด๋ฆ„์€ Gateway ์ •์˜์—์„œ๋„ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์ด๋ฅผ ๋งž์ถฐ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Azure ํ™˜๊ฒฝ์—์„œ Argo CD๋กœ Istio๋ฅผ ๋ฐฐํฌํ•œ ํ›„์—, ์ผ๋ถ€ ๋ฆฌ์†Œ์Šค๊ฐ€ OutOfSync ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ๋œ ์ด์Šˆ๋ฅผ 2๊ฑด ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, ๋Œ€๋ถ€๋ถ„์€ AKS์™€ Istio ์ž์ฒด ๋ฌธ์ œ๋กœ ํŒ๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋ถ€๋ถ„์€ ์ž„์‹œ๋กœ OutOfSync ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ ์šฉํ•ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์น˜๋ฉฐ

์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์ณ, ํ˜„์žฌ๋Š” 2~3๊ฐœ ์ •๋„์˜ ํ”„๋กœ์ ํŠธ์—์„œ Istio๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์•„์ง ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹จ๊ณ„๋Š” ์•„๋‹ˆ์ง€๋งŒ, Istio๋Š” ์ž˜ ์•Œ๋ ค์ง„ ๋„๊ตฌ์ด๊ณ  ๊ธฐ๋Šฅ ์ง€์›๋„ ์ž˜ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ดํ›„์—๋„ ๋ฌด๋ฆฌ ์—†์ด ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ถ”ํ›„์— Istio๋ฅผ ๋” ๊นŠ๊ฒŒ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๋” ๋งŽ์€ ๋‚ด์šฉ์„ ์ ์–ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ