Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€

๋ฉ”๋ชจ. ๋ฒˆ์—ญ: ์„œ๋น„์Šค ๋ฉ”์‹œ๋Š” ํ™•์‹คํžˆ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋”ฐ๋ฅด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ์ตœ์‹  ์ธํ”„๋ผ์—์„œ ๊ด€๋ จ ์†”๋ฃจ์…˜์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Istio๋Š” ๋งŽ์€ DevOps ์—”์ง€๋‹ˆ์–ด๋“ค์˜ ์ž…์— ์˜ค๋ฅด๋‚ด๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ ์ธก๋ฉด์—์„œ ํฌ๊ด„์ ์ด๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์ต์ˆ™ํ•ด์ง€๋Š” ๋ฐ ์ƒ๋‹นํ•œ ์‹œ๊ฐ„์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ๋‹นํžˆ ์ƒˆ๋กœ์šด ์ œํ’ˆ์ž…๋‹ˆ๋‹ค. ํ†ต์‹  ํšŒ์‚ฌ Orange Networks์—์„œ ๋Œ€๊ทœ๋ชจ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ…์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋Š” ๋…์ผ ์—”์ง€๋‹ˆ์–ด Rinor Maloku๋Š” Istio์— ๋Œ€ํ•ด ๋น ๋ฅด๊ณ  ๊นŠ์ด ์žˆ๊ฒŒ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ํ›Œ๋ฅญํ•œ ์ž๋ฃŒ ์‹œ๋ฆฌ์ฆˆ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Š” Istio๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…๊ณผ ์ด๋ฅผ ์ง์ ‘ ๋ˆˆ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ด์Šค ํ‹ฐ์˜ค โ€” Google, IBM ๋ฐ Lyft ํŒ€๊ณผ ํ˜‘๋ ฅํ•˜์—ฌ ๊ฐœ๋ฐœ๋œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ณต์žก์„ฑ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  • ๊ตํ†ต ๊ด€๋ฆฌ: ์‹œ๊ฐ„ ์ดˆ๊ณผ, ์žฌ์‹œ๋„, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ;
  • ะ‘ะตะทะพะฟะฐัะฝะพัั‚ัŒ: ์ตœ์ข… ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ์Šน์ธ;
  • ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ: ์ถ”์ , ๋ชจ๋‹ˆํ„ฐ๋ง, ๋กœ๊น….

์ด ๋ชจ๋“  ๊ฒƒ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€์—์„œ ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ ์ดํ›„์—๋Š” ์„œ๋น„์Šค๊ฐ€ ๋” ์ด์ƒ "๋งˆ์ดํฌ๋กœ" ์ˆ˜์ค€์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ์ถ”๊ฐ€์ ์ธ ๋…ธ๋ ฅ์€ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐ€์น˜๋ฅผ ์œ„ํ•ด ์ง์ ‘์ ์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ํšŒ์‚ฌ ์ž์›์˜ ๋‚ญ๋น„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:

ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์ž: ํ”ผ๋“œ๋ฐฑ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๋‚˜์š”?
๊ฐœ๋ฐœ์ž: ๋‘ ๋ฒˆ์˜ ์Šคํ”„๋ฆฐํŠธ.

MP: ๋ญ?.. ๊ทธ๋ƒฅ CRUD์ผ ๋ฟ์ด์—์š”!
R: CRUD๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์‰ฌ์šด ๋ถ€๋ถ„์ด์ง€๋งŒ ์—ฌ์ „ํžˆ ์‚ฌ์šฉ์ž์™€ ์„œ๋น„์Šค๋ฅผ ์ธ์ฆํ•˜๊ณ  ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ๊ฐ€ ๋ถˆ์•ˆ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋ณต์ ์ธ ์š”์ฒญ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ํŒจํ„ด ํด๋ผ์ด์–ธํŠธ์—์„œ. ๋˜ํ•œ ์ „์ฒด ์‹œ์Šคํ…œ์ด ์ถฉ๋Œํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋ ค๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐ ๊ฒฉ๋ฒฝ (์–ธ๊ธ‰๋œ ๋‘ ํŒจํ„ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ธฐ์‚ฌ ๋’ท๋ถ€๋ถ„์„ ์ฐธ์กฐํ•˜์„ธ์š”. ๋Œ€๋žต์ ์ธ ๋ฒˆ์—ญ์ž…๋‹ˆ๋‹ค.), ๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ๋ฅผ ํƒ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋‹ˆํ„ฐ๋ง, ์ถ”์ , [...]

MP: ์•„, ๊ทธ๋Ÿฌ๋ฉด ์ด ๊ธฐ๋Šฅ์„ ์ œํ’ˆ ์„œ๋น„์Šค์— ์‚ฝ์ž…ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์•„์ด๋””์–ด๋Š” ๋ถ„๋ช…ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋‹จ๊ณ„์™€ ๋…ธ๋ ฅ์˜ ์–‘์€ ์—„์ฒญ๋‚ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” Istio๊ฐ€ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ชจ๋“  ๋ณต์žก์„ฑ(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์œผ๋กœ ์˜๋„๋˜์ง€ ์•Š์Œ)์„ ์„œ๋น„์Šค์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€

์ฃผ์˜: ์ด ๋ฌธ์„œ์—์„œ๋Š” ๊ท€ํ•˜๊ฐ€ Kubernetes์— ๋Œ€ํ•œ ์‹ค๋ฌด ์ง€์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ฝ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. Kubernetes์— ๋Œ€ํ•œ ๋‚˜์˜ ์†Œ๊ฐœ ๊ทธ ํ›„์—์•ผ ์ด ์ž๋ฃŒ๋ฅผ ๊ณ„์† ์ฝ์œผ์‹ญ์‹œ์˜ค.

์ด์Šคํ‹ฐ์˜ค ์•„์ด๋””์–ด

Istio๊ฐ€ ์—†๋Š” ์„ธ์ƒ์—์„œ๋Š” ํ•œ ์„œ๋น„์Šค๊ฐ€ ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์ง์ ‘ ์š”์ฒญ์„ ํ•˜๊ณ , ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์„œ๋น„์Šค๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ƒˆ๋กœ์šด ์‹œ๋„๋ฅผ ํ•˜๊ณ , ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ๋ฅผ ์—ฌ๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€
Kubernetes์˜ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ

Istio๋Š” ์„œ๋น„์Šค์™€ ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋˜์–ด ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ๋ฐฉํ•ดํ•˜์—ฌ ์ž‘๋™ํ•˜๋Š” ํŠนํ™”๋œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฒฐํ•จ ํ—ˆ์šฉ: ์‘๋‹ต์— ํฌํ•จ๋œ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์š”์ฒญ ์‹คํŒจ ์—ฌ๋ถ€๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ์ด๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์นด๋‚˜๋ฆฌ์•„ ์ถœ์‹œ: ๊ณ ์ •๋œ ๋น„์œจ์˜ ์š”์ฒญ๋งŒ ์ƒˆ ๋ฒ„์ „์˜ ์„œ๋น„์Šค๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์ธก์ •ํ•ญ๋ชฉ: ์„œ๋น„์Šค๊ฐ€ ์‘๋‹ตํ•˜๋Š” ๋ฐ ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ ธ๋‚˜์š”?
  • ์ถ”์  ๋ฐ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ: ๊ฐ ์š”์ฒญ์— ํŠน์ˆ˜ ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์—์„œ ์ด๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
  • ะ‘ะตะทะพะฟะฐัะฝะพัั‚ัŒ: JWT ํ† ํฐ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜๊ณ  ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ๋“ค์€ ๋‹น์‹ ์˜ ํฅ๋ฏธ๋ฅผ ๋Œ ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฐ€๋Šฅ์„ฑ(์‹ค์ œ๋กœ๋Š” ๋ช‡ ๊ฐ€์ง€์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค!)์ž…๋‹ˆ๋‹ค. ์ด์ œ ๊ธฐ์ˆ ์ ์ธ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

Istio ์•„ํ‚คํ…์ฒ˜

Istio๋Š” ๋ชจ๋“  ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€๋กœ์ฑ„๊ณ  ์—ฌ๊ธฐ์— ์ผ๋ จ์˜ ๊ทœ์น™์„ ์ ์šฉํ•˜์—ฌ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ ํ˜•ํƒœ์˜ ์Šค๋งˆํŠธ ํ”„๋ก์‹œ๋ฅผ ๊ฐ ํฌ๋“œ์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ํ”„๋ก์‹œ๋Š” ๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ, ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ.

๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ

ํฌ๋“œ์— ์‚ฝ์ž…๋œ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด Istio๋Š” ํ•„์š”ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์‰ฝ๊ฒŒ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์žฌ์‹œ๋„ ๋ฐ ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ๊ธฐ๋Šฅ์„ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€
Envoy์—์„œ ์žฌ์‹œ๋„ ๋ฐ ํšŒ๋กœ ์ฐจ๋‹จ์ด ๊ตฌํ˜„๋˜๋Š” ๋ฐฉ๋ฒ•

์š”์•ฝํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์‚ฌ์ ˆ (์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐฐํฌ๋˜๋Š” ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ์— ์žˆ๋Š” ํ”„๋ก์‹œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ์ œํ’ˆ - ๋Œ€๋žต. ๋ฒˆ์—ญ) ์„œ๋น„์Šค B์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์Šคํ„ด์Šค์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
  2. ํŠน์‚ฌ ์‚ฌ์ด๋“œ์นด๊ฐ€ ๋‹ค์‹œ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. (๋‹ค์‹œ ํ•ด ๋ณด๋‹ค). (1)
  3. ์š”์ฒญ์ด ์‹คํŒจํ•˜๊ณ  ์ด๋ฅผ ํ˜ธ์ถœํ•œ ํ”„๋ก์‹œ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
  4. ๊ทธ๋Ÿฌ๋ฉด ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ๊ฐ€ ์—ด๋ฆฌ๊ณ  ํ›„์† ์š”์ฒญ์— ๋Œ€ํ•ด ๋‹ค์Œ ์„œ๋น„์Šค๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. (2)

์ฆ‰, ๋‹ค๋ฅธ Retry ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด X, Y ๋˜๋Š” Z๋กœ ํšŒ๋กœ ์ฐจ๋‹จ ๋ฐ ์„œ๋น„์Šค ๊ฒ€์ƒ‰์„ ์ง์ ‘ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ธฐ๋Šฅ๊ณผ ํ›จ์”ฌ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Istio์—์„œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ ์ฝ”๋“œ ๋ณ€๊ฒฝ.

์—„์ฒญ๋‚œ! ์ด์ œ Istio๋กœ ์—ฌํ–‰์„ ๋– ๋‚˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜์‹ฌ์Šค๋Ÿฝ๊ณ  ์—ด๋ ค ์žˆ๋Š” ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ธ์ƒ์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ๋ณดํŽธ์ ์ธ ์†”๋ฃจ์…˜์ด๋ผ๋ฉด ์ž์—ฐ์Šค๋Ÿฌ์šด ์˜์‹ฌ์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์‹ค์ œ๋กœ ๊ทธ๋Ÿฌํ•œ ๋ชจ๋“  ์†”๋ฃจ์…˜์€ ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ ์ ํ•ฉํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ "๋งž์ถค ์„ค์ •์ด ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?"๋ผ๊ณ  ๋ฌป์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋ฐ”๋‹ค ํ•ญํ•ด๋ฅผ ๋– ๋‚  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ์–ด ํ‰๋ฉด์— ๋Œ€ํ•ด ์•Œ์•„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ

์ด๋Š” ์„ธ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์กฐ์ข…์‚ฌ, ๋ฏน์„œ ะธ ์„ฑ, ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•˜๊ณ , ์ •์ฑ…์„ ์‹œํ–‰ํ•˜๊ณ , ์›๊ฒฉ ์ธก์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋„๋ก Envoy๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋žต์ ์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€
์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ๊ณผ ๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ์˜ ์ƒํ˜ธ ์ž‘์šฉ

ํŠน์‚ฌ(์˜ˆ: ๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ)๋Š” ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค CRD (์‚ฌ์šฉ์ž ์ •์˜ ๋ฆฌ์†Œ์Šค ์ •์˜)๋Š” Istio์—์„œ ์ •์˜ํ•˜๊ณ  ํŠน๋ณ„ํžˆ ์ด ๋ชฉ์ ์„ ์œ„ํ•ด ๊ณ ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ์ต์ˆ™ํ•œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” Kubernetes์˜ ๋˜ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋กœ ๋ณด์ธ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋‹จ ์ƒ์„ฑ๋˜๋ฉด ์ด ๋ฆฌ์†Œ์Šค๋Š” ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์— ์˜ํ•ด ์„ ํƒ๋˜์–ด Envoy์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Istio์— ๋Œ€ํ•œ ์„œ๋น„์Šค์˜ ๊ด€๊ณ„

์šฐ๋ฆฌ๋Š” Istio์™€ ์„œ๋น„์Šค์˜ ๊ด€๊ณ„๋ฅผ ์„ค๋ช…ํ–ˆ์ง€๋งŒ ๊ทธ ๋ฐ˜๋Œ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์„œ๋น„์Šค๊ฐ€ Istio์™€ ์–ด๋–ค ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์†”์งํžˆ ๋งํ•ด์„œ, ์„œ๋น„์Šค๋Š” "์–ด์ฐจํ”ผ ๋ฌผ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?"๋ผ๊ณ  ์Šค์Šค๋กœ์—๊ฒŒ ๋ฌผ์„ ๋•Œ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ๋ฌผ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Istio์˜ ์กด์žฌ๋ฅผ ์ธ์‹ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€
์ผ๋Ÿฌ์ŠคํŠธ๋ ˆ์ด์…˜ ๋น…ํ† ๋ฆฌ์•„ ๋””๋ฏธํŠธ๋ผ์ฝ”ํ’€๋กœ์Šค: - ๋ฌผ์€ ์–ด๋•Œ์š”? - ๋ฌผ์ด๋ž€ ๋„๋Œ€์ฒด ๋ฌด์—‡์ธ๊ฐ€?

๋”ฐ๋ผ์„œ ์ž‘๋™ ์ค‘์ธ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  Istio ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ฐฐํฌํ•œ ํ›„์—๋„ ํด๋Ÿฌ์Šคํ„ฐ์— ์žˆ๋Š” ์„œ๋น„์Šค๋Š” ๊ณ„์† ์ž‘๋™ํ•˜๋ฉฐ ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•œ ํ›„์—๋„ ๋ชจ๋“  ๊ฒƒ์ด ๋‹ค์‹œ ์ •์ƒ์ด ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ Istio์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋ก ์€ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ง€์‹์„ ์‹ค์ œ๋กœ ์ ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

์‹ค์ œ๋กœ Istio

Istio์—๋Š” ์ตœ์†Œ 4๊ฐœ์˜ vCPU์™€ 8GB RAM์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์„ค์ •ํ•˜๊ณ  ๊ธฐ์‚ฌ์˜ ์ง€์นจ์„ ๋”ฐ๋ฅด๋ ค๋ฉด ์‹ ๊ทœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์Œ์„ ์ œ๊ณตํ•˜๋Š” Google Cloud Platform์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ฌด๋ฃŒ $300.

์ฝ˜์†” ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  Kubernetes์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•œ ํ›„ Helm ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ํ†ตํ•ด Istio๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํˆฌ๊ตฌ ์„ค์น˜

์— ์„ค๋ช…๋œ ๋Œ€๋กœ ์ปดํ“จํ„ฐ์— Helm ํด๋ผ์ด์–ธํŠธ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ. ๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Istio ์„ค์น˜๋ฅผ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ์„ ์ƒ์„ฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Istio ์„ค์น˜

๋‹ค์Œ์—์„œ Istio ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์„ธ์š”. ์ตœ์‹  ๋ฆด๋ฆฌ์Šค (๋ฒ„์ „ 1.0.5์— ๋Œ€ํ•œ ์›์ €์ž์˜ ๋งํฌ๊ฐ€ ํ˜„์žฌ ๋ฒ„์ „์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, 1.0.6 - ๋Œ€๋žต์ ์ธ ๋ฒˆ์—ญ์ž…๋‹ˆ๋‹ค.), ๋‚ด์šฉ์„ ํ•˜๋‚˜์˜ ๋””๋ ‰ํ† ๋ฆฌ์— ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„์—๋Š” ์ด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. [istio-resources].

Istio ๋ฆฌ์†Œ์Šค๋ฅผ ์‰ฝ๊ฒŒ ์‹๋ณ„ํ•˜๋ ค๋ฉด K8s ํด๋Ÿฌ์Šคํ„ฐ์— ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. istio-system:

$ kubectl create namespace istio-system

ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜์—ฌ ์„ค์น˜๋ฅผ ์™„๋ฃŒํ•˜์„ธ์š”. [istio-resources] ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

$ helm template install/kubernetes/helm/istio 
  --set global.mtls.enabled=false 
  --set tracing.enabled=true 
  --set kiali.enabled=true 
  --set grafana.enabled=true 
  --namespace istio-system > istio.yaml

์ด ๋ช…๋ น์€ Istio์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํŒŒ์ผ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. istio.yaml. ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜์—ฌ ํ‘œ์ค€ ํ…œํ”Œ๋ฆฟ์„ ์ž์‹ ์—๊ฒŒ ๋งž๊ฒŒ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • global.mtls.enabled ์— ์„ค์น˜๋จ false (์ฆ‰, mTLS ์ธ์ฆ์ด ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. - ๋Œ€๋žต)๋ฐ์ดํŠธ ๊ณผ์ •์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด;
  • tracing.enabled Jaeger๋ฅผ ์‚ฌ์šฉํ•œ ์š”์ฒญ ์ถ”์ ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • kiali.enabled ์„œ๋น„์Šค์™€ ํŠธ๋ž˜ํ”ฝ์„ ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด Kiali๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • grafana.enabled ์ˆ˜์ง‘๋œ ์ธก์ •ํ•ญ๋ชฉ์„ ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด Grafana๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ƒ์„ฑ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

$ kubectl apply -f istio.yaml

ํด๋Ÿฌ์Šคํ„ฐ์— Istio ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๋ชจ๋“  ํฌ๋“œ๊ฐ€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ํฌํ•จ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. istio-system ์ˆ˜์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค Running ๋˜๋Š” Completed์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ :

$ kubectl get pods -n istio-system

์ด์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋‹ค์Œ ์„น์…˜์„ ๊ณ„์†ํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์ • ๋ถ„์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•„ํ‚คํ…์ฒ˜

์ด๋ฏธ ์–ธ๊ธ‰ํ•œ ์˜ˆ์ œ์—์„œ ์‚ฌ์šฉ๋œ ๊ฐ์ • ๋ถ„์„ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Kubernetes ์†Œ๊ฐœ ๊ธฐ์‚ฌ. ์‹ค์ œ๋กœ Istio์˜ ๊ธฐ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๊ธฐ์— ์ถฉ๋ถ„ํžˆ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ XNUMX๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  1. ์„œ๋น„์Šค SA-ํ”„๋ŸฐํŠธ์—”๋“œ, Reactjs ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ”„๋ŸฐํŠธ์—”๋“œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์„œ๋น„์Šค SA-์›น์•ฑ, ๊ฐ์ • ๋ถ„์„ ์ฟผ๋ฆฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  3. ์„œ๋น„์Šค SA-๋กœ์ง, ์ž์ฒด์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๊ฐ์ • ๋ถ„์„;
  4. ์„œ๋น„์Šค SA-ํ”ผ๋“œ๋ฐฑ, ๋ถ„์„์˜ ์ •ํ™•์„ฑ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€

์ด ๋‹ค์ด์–ด๊ทธ๋žจ์—๋Š” ์„œ๋น„์Šค ์™ธ์—๋„ Kubernetes์—์„œ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ์ ์ ˆํ•œ ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ์ˆ˜์‹  ์ปจํŠธ๋กค๋Ÿฌ๋„ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. Istio๋Š” Ingress Gateway ๋‚ด์—์„œ ์œ ์‚ฌํ•œ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Istio์˜ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰

๊ธฐ์‚ฌ์— ์–ธ๊ธ‰๋œ ์ถ”๊ฐ€ ์ž‘์—…์„ ์œ„ํ•ด์„œ๋Š” ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜์„ธ์š”. istio-mastery. ์—ฌ๊ธฐ์—๋Š” Kubernetes ๋ฐ Istio์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์ด๋“œ์นด ์‚ฝ์ž…

์‚ฝ์ž…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค ์ž๋™์œผ๋กœ ๋˜๋Š” ์ˆ˜๋™์œผ๋กœ. ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ž๋™์œผ๋กœ ์‚ฝ์ž…ํ•˜๋ ค๋ฉด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋ ˆ์ด๋ธ”์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. istio-injection=enabled, ์ด๋Š” ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

$ kubectl label namespace default istio-injection=enabled
namespace/default labeled

์ด์ œ ๊ธฐ๋ณธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค(default)๋Š” ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ €์žฅ์†Œ์˜ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. [istio-mastery] ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

$ kubectl apply -f resource-manifests/kube
persistentvolumeclaim/sqlite-pvc created
deployment.extensions/sa-feedback created
service/sa-feedback created
deployment.extensions/sa-frontend created
service/sa-frontend created
deployment.extensions/sa-logic created
service/sa-logic created
deployment.extensions/sa-web-app created
service/sa-web-app created

์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•œ ํ›„ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ Pod์— ๋‘ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ(์„œ๋น„์Šค ์ž์ฒด์™€ ์‚ฌ์ด๋“œ์นด ํฌํ•จ)๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. kubectl get pods ์—ด ์•„๋ž˜์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. READY ์ง€์ •๋œ ๊ฐ’ 2/2, ๋‘ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ชจ๋‘ ์‹คํ–‰ ์ค‘์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

$ kubectl get pods
NAME                           READY     STATUS    RESTARTS   AGE
sa-feedback-55f5dc4d9c-c9wfv   2/2       Running   0          12m
sa-frontend-558f8986-hhkj9     2/2       Running   0          12m
sa-logic-568498cb4d-2sjwj      2/2       Running   0          12m
sa-logic-568498cb4d-p4f8c      2/2       Running   0          12m
sa-web-app-599cf47c7c-s7cvd    2/2       Running   0          12m

์‹œ๊ฐ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€
Pod ์ค‘ ํ•˜๋‚˜์˜ Envoy ํ”„๋ก์‹œ

์ด์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ˆ˜์‹  ํŠธ๋ž˜ํ”ฝ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋“ค์–ด์˜ค๋„๋ก ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ธ๊ทธ๋ ˆ์Šค ๊ฒŒ์ดํŠธ์›จ์ด

์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€(ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํŠธ๋ž˜ํ”ฝ ํ—ˆ์šฉ)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ธ๊ทธ๋ ˆ์Šค ๊ฒŒ์ดํŠธ์›จ์ด Istio์—์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ "๊ฐ€์žฅ์ž๋ฆฌ"์— ์œ„์น˜ํ•˜๋ฉฐ ๋ผ์šฐํŒ…, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ๋ณด์•ˆ, ์ˆ˜์‹  ํŠธ๋ž˜ํ”ฝ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๊ฐ™์€ Istio ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Ingress Gateway ๊ตฌ์„ฑ ์š”์†Œ์™€ ์ด๋ฅผ ์™ธ๋ถ€๋กœ ์ „๋‹ฌํ•˜๋Š” ์„œ๋น„์Šค๋Š” Istio ์„ค์น˜ ์ค‘์— ํด๋Ÿฌ์Šคํ„ฐ์— ์„ค์น˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค์˜ ์™ธ๋ถ€ IP ์ฃผ์†Œ๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์„ธ์š”.

$ kubectl get svc -n istio-system -l istio=ingressgateway
NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP
istio-ingressgateway   LoadBalancer   10.0.132.127   13.93.30.120

์šฐ๋ฆฌ๋Š” ์ด IP(EXTERNAL-IP๋ผ๊ณ  ์นญํ•จ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ณ„์† ์•ก์„ธ์Šคํ•  ๊ฒƒ์ด๋ฏ€๋กœ ํŽธ์˜์ƒ ๊ฐ’์„ ๋ณ€์ˆ˜์— ๊ธฐ๋กํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

$ EXTERNAL_IP=$(kubectl get svc -n istio-system 
  -l app=istio-ingressgateway 
  -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')

์ง€๊ธˆ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์ด IP์— ์ ‘์†ํ•˜๋ ค๊ณ  ํ•˜๋ฉด Service Unavailable ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Istio๋Š” ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค., ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์•„์ง ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ฒŒ์ดํŠธ์›จ์ด ๋ฆฌ์†Œ์Šค

๊ฒŒ์ดํŠธ์›จ์ด๋Š” ํด๋Ÿฌ์Šคํ„ฐ์— Istio๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ˆ˜์‹  ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๋ ค๋Š” ํฌํŠธ, ํ”„๋กœํ† ์ฝœ ๋ฐ ํ˜ธ์ŠคํŠธ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•œ ํ›„ ์ •์˜๋˜๋Š” Kubernetes์˜ CRD(์‚ฌ์šฉ์ž ์ •์˜ ๋ฆฌ์†Œ์Šค ์ •์˜)์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•ด ํฌํŠธ 80์—์„œ HTTP ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์€ ๋‹ค์Œ ์ •์˜์— ์˜ํ•ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. (http-gateway.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: http-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
- "*"

์ด ๊ตฌ์„ฑ์€ ์„ ํƒ๊ธฐ ์™ธ์—๋Š” ์„ค๋ช…์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. istio: ingressgateway. ์ด ์„ ํƒ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ตฌ์„ฑ์„ ์ ์šฉํ•  Ingress ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ์ด๋Š” Istio์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋˜๋Š” Ingress Gateway ์ปจํŠธ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค.

๊ตฌ์„ฑ์€ ๋‹ค์Œ ๋ช…๋ น์„ ํ˜ธ์ถœํ•˜์—ฌ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created

์ด์ œ ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ํฌํŠธ 80์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜์ง€๋งŒ ์š”์ฒญ์„ ์–ด๋””๋กœ ๋ผ์šฐํŒ…ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋‹น์‹ ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค ๊ฐ€์ƒ ์„œ๋น„์Šค.

๊ฐ€์ƒ์„œ๋น„์Šค ๋ฆฌ์†Œ์Šค

VirtualService๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ํ—ˆ์šฉ๋˜๋Š” ์š”์ฒญ์„ ๋ผ์šฐํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ Ingress Gateway์— ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

http-gateway๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์š”์ฒญ์€ sa-frontend, sa-web-app ๋ฐ sa-feedback ์„œ๋น„์Šค๋กœ ์ „์†ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€
VirtualServices๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ๋กœ

SA-Frontend๋กœ ์ „์†ก๋˜์–ด์•ผ ํ•˜๋Š” ์š”์ฒญ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ๋„์ค‘์— ์ •ํ™•ํžˆ ์ผ์น˜ํ•จ / index.html์„ ์–ป์œผ๋ ค๋ฉด SA-Frontend๋กœ ์ „์†ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์€ ๊ฒฝ๋กœ /static/* CSS ๋ฐ JavaScript์™€ ๊ฐ™์ด ํ”„๋ŸฐํŠธ์—”๋“œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ •์  ํŒŒ์ผ์„ ์ˆ˜์‹ ํ•˜๋ ค๋ฉด SA-Frontend๋กœ ์ „์†ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ •๊ทœ์‹๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ๋กœ '^.*.(ico|png|jpg)$', SA-Frontend๋กœ ์ „์†ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€์— ํ‘œ์‹œ๋˜๋Š” ์‚ฌ์ง„๋“ค์ž…๋‹ˆ๋‹ค.

๊ตฌํ˜„์€ ๋‹ค์Œ ๊ตฌ์„ฑ์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. (sa-virtualservice-external.yaml):

kind: VirtualService
metadata:
  name: sa-external-services
spec:
  hosts:
  - "*"
  gateways:
  - http-gateway                      # 1
  http:
  - match:
    - uri:
        exact: /
    - uri:
        exact: /callback
    - uri:
        prefix: /static
    - uri:
        regex: '^.*.(ico|png|jpg)$'
    route:
    - destination:
        host: sa-frontend             # 2
        port:
number: 80

์ค‘์š” ํฌ์ธํŠธ :

  1. ์ด VirtualService๋Š” ๋‹ค์Œ์„ ํ†ตํ•ด ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. http-๊ฒŒ์ดํŠธ์›จ์ด;
  2. ะ’ destination ์š”์ฒญ์ด ์ „์†ก๋˜๋Š” ์„œ๋น„์Šค๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

์ฃผ์˜: ์œ„์˜ ๊ตฌ์„ฑ์€ ํŒŒ์ผ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. sa-virtualservice-external.yaml, ์—ฌ๊ธฐ์—๋Š” SA-WebApp ๋ฐ SA-Feedback์˜ ๋ผ์šฐํŒ…์— ๋Œ€ํ•œ ์„ค์ •๋„ ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ„๊ฒฐ์„ฑ์„ ์œ„ํ•ด ์ด ๋ฌธ์„œ์—์„œ ๋‹จ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์„ ํ˜ธ์ถœํ•˜์—ฌ VirtualService๋ฅผ ์ ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml
virtualservice.networking.istio.io/sa-external-services created

์ฃผ์˜: Istio ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋น„ํ•˜๋ฉด Kubernetes API ์„œ๋ฒ„๋Š” Istio Control Plane์—์„œ ์ˆ˜์‹ ๋˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ƒˆ ๊ตฌ์„ฑ์ด ๊ฐ Pod์˜ Envoy ํ”„๋ก์‹œ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Ingress Gateway ์ปจํŠธ๋กค๋Ÿฌ๋Š” Control Plane์— ๊ตฌ์„ฑ๋œ ๋˜ ๋‹ค๋ฅธ Envoy๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์€ ๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€
์š”์ฒญ ๋ผ์šฐํŒ…์„ ์œ„ํ•œ Istio-IngressGateway ๊ตฌ์„ฑ

์ด์ œ ๊ฐ์ • ๋ถ„์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. http://{EXTERNAL-IP}/. ์ฐพ์„ ์ˆ˜ ์—†์Œ ์ƒํƒœ๊ฐ€ ๋˜์–ด๋„ ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”. ๊ตฌ์„ฑ์ด ์ ์šฉ๋˜๊ณ  Envoy ์บ์‹œ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๋” ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค..

๊ณ„์†ํ•˜๊ธฐ ์ „์— ์•ฑ์„ ์กฐ๊ธˆ ์‚ฌ์šฉํ•ด ํŠธ๋ž˜ํ”ฝ์„ ์ƒ์„ฑํ•ด ๋ณด์„ธ์š”. (ํ›„์† ์ž‘์—…์˜ ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ํ•ด๋‹น ์กด์žฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. - ๋Œ€๋žต ๋ฒˆ์—ญ).

Kiali: ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ

Kiali ๊ด€๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ด๋™ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

$ kubectl port-forward 
    $(kubectl get pod -n istio-system -l app=kiali 
    -o jsonpath='{.items[0].metadata.name}') 
    -n istio-system 20001

... ๊ทธ๋ฆฌ๊ณ  ์—ด๋‹ค http://localhost:20001/, admin/admin์œผ๋กœ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” Istio ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ตฌ์„ฑ์„ ํ™•์ธํ•˜๊ณ , ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑ„์„œ ์ˆ˜์ง‘ํ•œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์‹œ๊ฐํ™”ํ•˜๊ณ , "๋ˆ„๊ฐ€ ๋ˆ„๊ตฌ์—๊ฒŒ ์—ฐ๋ฝํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?", "์–ด๋–ค ์„œ๋น„์Šค ๋ฒ„์ „์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?"๋ผ๋Š” ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ์–ป๋Š” ๋“ฑ ๋งŽ์€ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํŒจ?โ€ ๋“ฑ๋“ฑ. ์ผ๋ฐ˜์ ์œผ๋กœ Grafana๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธก์ •ํ•ญ๋ชฉ ์‹œ๊ฐํ™”๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— Kiali์˜ ๊ธฐ๋Šฅ์„ ์‚ดํŽด๋ณด์„ธ์š”.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€

Grafana: ์ธก์ •ํ•ญ๋ชฉ ์‹œ๊ฐํ™”

Istio์—์„œ ์ˆ˜์ง‘๋œ ์ธก์ •ํ•ญ๋ชฉ์€ Prometheus๋กœ ์ด๋™ํ•˜๊ณ  Grafana๋ฅผ ํ†ตํ•ด ์‹œ๊ฐํ™”๋ฉ๋‹ˆ๋‹ค. Grafana ๊ด€๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ด๋™ํ•˜๋ ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ ํ›„ ์—ฝ๋‹ˆ๋‹ค. http://localhost:3000/:

$ kubectl -n istio-system port-forward 
    $(kubectl -n istio-system get pod -l app=grafana 
    -o jsonpath={.items[0].metadata.name}) 3000

๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•˜๋ฉด ํ™ˆ ์™ผ์ชฝ ์ƒ๋‹จ ๋ฐ ์„ ํƒ Istio ์„œ๋น„์Šค ๋Œ€์‹œ๋ณด๋“œ ์™ผ์ชฝ ์ƒ๋‹จ์—์„œ ์„œ๋น„์Šค๋กœ ์‹œ์ž‘ํ•˜์„ธ์š”. sa-์›น-์•ฑ์ˆ˜์ง‘๋œ ์ธก์ •ํ•ญ๋ชฉ์„ ๋ณด๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์„ธ์š”.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์€ ๊ณตํ—ˆํ•˜๊ณ  ์™„์ „ํžˆ ์ง€๋ฃจํ•œ ์„ฑ๋Šฅ์ž…๋‹ˆ๋‹ค. ๊ฒฝ์˜์ง„์€ ์ด๊ฒƒ์„ ๊ฒฐ์ฝ” ์Šน์ธํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์€ ๋กœ๋“œ๋ฅผ ์ƒ์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

$ while true; do 
    curl -i http://$EXTERNAL_IP/sentiment 
    -H "Content-type: application/json" 
    -d '{"sentence": "I love yogobella"}'; 
    sleep .8; done

์ด์ œ ์šฐ๋ฆฌ๋Š” ํ›จ์”ฌ ๋” ๋ฉ‹์ง„ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฐ–๊ฒŒ ๋˜์—ˆ์œผ๋ฉฐ, ๊ทธ ์™ธ์—๋„ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ ํ›Œ๋ฅญํ•œ Prometheus ๋„๊ตฌ์™€ ์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ฅธ ์„œ๋น„์Šค์˜ ์„ฑ๋Šฅ, ์ƒํƒœ, ๊ฐœ์„ /์ €ํ•˜๋ฅผ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋Š” ์ง€ํ‘œ ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•œ Grafana๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์„œ๋น„์Šค์˜ ์š”์ฒญ ์ถ”์ ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜ˆ๊ฑฐ: ์ถ”์ 

์„œ๋น„์Šค๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์˜ค๋ฅ˜์˜ ์›์ธ์„ ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ค์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์ ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ๊ฐ„๋‹จํ•œ ์‚ฌ๋ก€๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€
๋ฌด์ž‘์œ„๋กœ ์‹คํŒจํ•œ ์š”์ฒญ์˜ ์ผ๋ฐ˜์ ์ธ ์˜ˆ

์š”์ฒญ์ด ์™”๋‹ค๊ฐ€ ๋–จ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ฒซ ๋ฒˆ์งธ ์„œ๋น„์Šค? ์•„๋‹ˆ๋ฉด ๋‘ ๋ฒˆ์งธ? ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ์˜ˆ์™ธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ผ์„ ํ•˜๊ณ  ์žˆ๋Š” ์ž์‹ ์„ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ ์ผ์€ ๊ฐœ๋ฐœ์ž๋ผ๊ธฐ๋ณด๋‹ค๋Š” ์†Œํ”„ํŠธ์›จ์–ด ํƒ์ •์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

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

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€
TraceId๋Š” ์š”์ฒญ์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Istio๋Š” ๊ณต๊ธ‰์—…์ฒด ๋…๋ฆฝ์ ์ธ OpenTracing API ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” Jaeger Tracer๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ Jaeger ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ kubectl port-forward -n istio-system 
    $(kubectl get pod -n istio-system -l app=jaeger 
    -o jsonpath='{.items[0].metadata.name}') 16686

์ด์ œ ์ด๋™ http://localhost:16686/ ๊ทธ๋ฆฌ๊ณ  ์„œ๋น„์Šค๋ฅผ ์„ ํƒํ•˜์„ธ์š” sa-์›น-์•ฑ. ์„œ๋น„์Šค๊ฐ€ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์— ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด ํŽ˜์ด์ง€์— ํ™œ๋™์„ ํ‘œ์‹œ/์ƒ์„ฑํ•˜๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”. ๊ทธ ํ›„ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์„ธ์š”. ํ”์  ์ฐพ๊ธฐ, ์ตœ์‹  ์ถ”์ ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์•„๋ฌด ํ•ญ๋ชฉ์ด๋‚˜ ์„ ํƒํ•˜๋ฉด ๋ชจ๋“  ์ถ”์ ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€

์ด ์ถ”์ ์€ ๋‹ค์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  1. ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋„ค์š” istio-ingressgateway (์ด๊ฒƒ์€ ์„œ๋น„์Šค ์ค‘ ํ•˜๋‚˜์™€์˜ ์ฒซ ๋ฒˆ์งธ ์ƒํ˜ธ ์ž‘์šฉ์ด๋ฉฐ ์š”์ฒญ์— ๋Œ€ํ•ด ์ถ”์  ID๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.) ๊ทธ ํ›„ ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์„œ๋น„์Šค์— ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. sa-์›น-์•ฑ.
  2. ์„œ๋น„์Šค ์ค‘ sa-์›น-์•ฑ Envoy ์‚ฌ์ด๋“œ์นด๊ฐ€ ์š”์ฒญ์„ ์„ ํƒํ•˜๊ณ  ๋ฒ”์œ„์— "ํ•˜์œ„"๊ฐ€ ์ƒ์„ฑ๋˜์–ด(๊ทธ๋ž˜์„œ ์ถ”์ ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Œ) ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค. sa-์›น-์•ฑ. (์ŠคํŒฌ - ์ด๋ฆ„, ์ž‘์—… ์‹œ์ž‘ ์‹œ๊ฐ„ ๋ฐ ๊ธฐ๊ฐ„์ด ํฌํ•จ๋œ Jaeger์˜ ๋…ผ๋ฆฌ์  ์ž‘์—… ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ŠคํŒฌ์€ ์ค‘์ฒฉ๋˜๊ณ  ์ •๋ ฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์œ„์˜ ๋ฐฉํ–ฅ์„ฑ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„๊ฐ€ ํŠธ๋ ˆ์ด์Šค๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค. โ€” ๋Œ€๋žต. ๋ฒˆ์—ญ)
  3. ์—ฌ๊ธฐ์„œ ์š”์ฒญ์€ ๋ฉ”์†Œ๋“œ์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๊ฐ์„ฑ๋ถ„์„. ์ด๋Ÿฌํ•œ ์ถ”์ ์€ ์ด๋ฏธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์˜ํ•ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.
  4. ์ด ์ˆœ๊ฐ„๋ถ€ํ„ฐ POST ์š”์ฒญ์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. sa ๋…ผ๋ฆฌ. ์ถ”์  ID๋Š” ๋‹ค์Œ์—์„œ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. sa-์›น-์•ฑ.
  5. ...

์ฃผ์˜: 4๋‹จ๊ณ„์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Istio์—์„œ ์ƒ์„ฑ๋œ ํ—ค๋”๋ฅผ ํ™•์ธํ•˜๊ณ  ์•„๋ž˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด ํ›„์† ์š”์ฒญ์— ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 1 ๋ถ€
(A) Istio๋Š” ํ—ค๋” ์ „๋‹ฌ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. (B) ์„œ๋น„์Šค๋Š” ํ—ค๋”๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

Istio๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ด์œ ๋Š”... ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ํ—ค๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ ์‚ฌ์ด๋“œ์ผ€์–ด์— ์ƒˆ ๋ฒ”์œ„๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์„œ๋น„์Šค ๋‚ด๋ถ€์˜ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ „์ฒด ์š”์ฒญ ์ถ”์  ๊ฒฝ๋กœ๊ฐ€ ์†์‹ค๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํ—ค๋”๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context

์ด๋Š” ์–ด๋ ค์šด ์ž‘์—…์€ ์•„๋‹ˆ์ง€๋งŒ ๊ตฌํ˜„์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ ๋งŽ์€ ๋„์„œ๊ด€ - ์˜ˆ๋ฅผ ๋“ค์–ด sa-web-app ์„œ๋น„์Šค์—์„œ Jaeger ๋ฐ OpenTracing ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด RestTemplate ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋Ÿฌํ•œ ํ—ค๋”๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ์˜ ์ค‘๋….

๊ฐ์ • ๋ถ„์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Flask, Spring ๋ฐ ASP.NET Core์˜ ๊ตฌํ˜„์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌด์—‡์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€(๋˜๋Š” ๊ฑฐ์˜ ๊ธฐ๋ณธ์ ์œผ๋กœ) ๋ช…ํ™•ํ•ด์กŒ์œผ๋ฏ€๋กœ ๋ฏธ์„ธ ์กฐ์ •๋œ ๋ผ์šฐํŒ…, ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ, ๋ณด์•ˆ ๋“ฑ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฉ”๋ชจ. ๋ฒˆ์—ญ: Rinor Maloku๊ฐ€ ์ œ๊ณตํ•˜๋Š” Istio ๊ด€๋ จ ์ž๋ฃŒ์˜ ๋‹ค์Œ ๋ถ€๋ถ„์—์„œ ์ด์— ๋Œ€ํ•ด ์ฝ์–ด๋ณด์„ธ์š”. ๋ฒˆ์—ญ๋ณธ์€ ๊ฐ€๊นŒ์šด ์‹œ์ผ ๋‚ด์— ๋ธ”๋กœ๊ทธ์— ๊ฒŒ์žฌ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. UPDATE (14์›” XNUMX์ผ): ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„ ์ด๋ฏธ ์ถœํŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฒˆ์—ญ๊ฐ€์˜ ์ถ”์‹ 

๋ธ”๋กœ๊ทธ์—์„œ๋„ ์ฝ์–ด๋ณด์„ธ์š”.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€