์ปจํ…Œ์ด๋„ˆ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ฐ ์„œ๋น„์Šค ๋ฉ”์‹œ

์ธํ„ฐ๋„ท์—์„œ ๋ง๋š ์กฐํ•ญ ะพ ์„œ๋น„์Šค ๋ฉ”์‹œ (์„œ๋น„์Šค ๋ฉ”์‹œ) ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์— ๋˜ ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์„ธ! ๊ทธ๋Ÿฐ๋ฐ ์™œ? ๊ทธ๋ ‡๋‹ค๋ฉด ๋„์ปค, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋“ฑ ์ปจํ…Œ์ด๋„ˆ ํ”Œ๋žซํผ์ด ๋“ฑ์žฅํ•˜๊ธฐ ์ „์ธ 10๋…„ ์ „์— ์„œ๋น„์Šค ๋ฉ”์‹œ๊ฐ€ ๋“ฑ์žฅํ–ˆ๋‹ค๋ฉด ๋” ์ข‹์•˜์„ ๊ฒƒ์ด๋ผ๋Š” ์˜๊ฒฌ์„ ํ”ผ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค. ๋‚ด ๊ด€์ ์ด ๋‹ค๋ฅธ ๊ด€์ ๋ณด๋‹ค ์ข‹๋‹ค ๋‚˜์˜๋‹ค๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์„œ๋น„์Šค ๋ฉ”์‹œ๋Š” ์ƒ๋‹นํžˆ ๋ณต์žกํ•œ ๋™๋ฌผ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์–‘ํ•œ ๊ด€์ ์ด ์„œ๋น„์Šค ๋ฉ”์‹œ๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” XNUMX๊ฐœ๊ฐ€ ๋„˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜๊ณ  ์ˆ˜์ฒœ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง€์›ํ•˜๋Š” dotCloud ํ”Œ๋žซํผ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์ถœ์‹œํ•˜๋Š” ๊ณผ์ •์—์„œ ์ง๋ฉดํ•œ ๊ณผ์ œ์™€ ์„œ๋น„์Šค ๋ฉ”์‹œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š”์ง€(๋˜๋Š” ๋„์›€์ด ๋  ์ˆ˜ ์—†๋Š”์ง€) ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‹ทํด๋ผ์šฐ๋“œ์˜ ์—ญ์‚ฌ

๋‚˜๋Š” dotCloud์˜ ์—ญ์‚ฌ์™€ ์ด ํ”Œ๋žซํผ์˜ ์•„ํ‚คํ…์ฒ˜ ์„ ํƒ์— ๋Œ€ํ•ด ๊ธ€์„ ์ผ์ง€๋งŒ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์— ๋Œ€ํ•ด์„œ๋Š” ๋งŽ์ด ์ด์•ผ๊ธฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋…์„œ์— ๋น ์ ธ๋“ค๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด ๋งˆ์ง€๋ง‰ ๊ธฐ์‚ฌ dotCloud์— ๋Œ€ํ•œ ์š”์ ์€ ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ๊ณ ๊ฐ์ด ๊ด‘๋ฒ”์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์›ํ•˜์—ฌ ๊ด‘๋ฒ”์œ„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Java, PHP, Python...)์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์„œ๋น„์Šคํ˜• PaaS ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค(MongoDB, MySQL, Redis...) ๋ฐ Heroku์™€ ๊ฐ™์€ ์›Œํฌํ”Œ๋กœ: ํ”Œ๋žซํผ์— ์ฝ”๋“œ๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด ํ”Œ๋žซํผ์ด ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

dotCloud ํ”Œ๋žซํผ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์ด ์–ด๋–ป๊ฒŒ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ํŠน๋ณ„ํžˆ ๋ฉ‹์กŒ๊ธฐ ๋•Œ๋ฌธ์ด ์•„๋‹ˆ๋ผ(๋น„๋ก ์‹œ์Šคํ…œ์ด ๊ทธ ๋‹น์‹œ์—๋Š” ์ž˜ ์ž‘๋™ํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ), ์ฃผ๋กœ ์ตœ์‹  ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌด๋ฆฌ ๊ฐ„์— ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ฒธ์†ํ•œ ํŒ€์ด ์งง์€ ์‹œ๊ฐ„ ๋‚ด์— ์ด๋Ÿฌํ•œ ๋””์ž์ธ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋˜๋Š” ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜ต์…˜์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์„ ์ง์ ‘ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์„œ๋น„์Šค ๋ฉ”์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ํ‘œ์ค€ ์„ ํƒ์€ ์ง์ ‘ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๊ตฌ์ž…ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜ธ์ŠคํŒ…๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ…

dotCloud์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ HTTP ๋ฐ TCP ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HTTP ์—”๋“œํฌ์ธํŠธ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์— ๋™์ ์œผ๋กœ ์ถ”๊ฐ€๋จ ํž™ํ†ต. ์ด๋Š” ์˜ค๋Š˜๋‚  ๋ฆฌ์†Œ์Šค๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ž…๊ตฌ Kubernetes ๋ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์—์„œ ํŠธ๋ผ์—ํ”ฝ.

๋„๋ฉ”์ธ ์ด๋ฆ„์ด dotCloud ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ๋Š” ์ ์ ˆํ•œ ๋„๋ฉ”์ธ์„ ํ†ตํ•ด HTTP ์—”๋“œํฌ์ธํŠธ์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ํŠน๋ณ„ํ•œ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค.

TCP ์—”๋“œํฌ์ธํŠธ ํฌํŠธ ๋ฒˆํ˜ธ์™€ ์—ฐ๊ฒฐ๋˜์–ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์Šคํƒ์˜ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” ์ ์ ˆํ•œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„(gateway-X.dotcloud.com ๋“ฑ)๊ณผ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ TCP ์—”๋“œํฌ์ธํŠธ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ "nats" ์„œ๋ฒ„ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค(๋‹ค์Œ๊ณผ ๊ด€๋ จ ์—†์Œ). NAT), ์ด๋Š” ๋“ค์–ด์˜ค๋Š” TCP ์—ฐ๊ฒฐ์„ ์˜ฌ๋ฐ”๋ฅธ ์ปจํ…Œ์ด๋„ˆ(๋˜๋Š” ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ์˜ฌ๋ฐ”๋ฅธ ์ปจํ…Œ์ด๋„ˆ)๋กœ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค.

Kubernetes์— ์ต์ˆ™ํ•˜๋‹ค๋ฉด ์•„๋งˆ๋„ ์„œ๋น„์Šค๊ฐ€ ์ƒ๊ฐ๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋…ธ๋“œํฌํŠธ.

dotCloud ํ”Œ๋žซํผ์—๋Š” ์ด์— ์ƒ์‘ํ•˜๋Š” ์„œ๋น„์Šค๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐIP: ๋‹จ์ˆœํ™”๋ฅผ ์œ„ํ•ด ํ”Œ๋žซํผ ๋‚ด๋ถ€์™€ ์™ธ๋ถ€์—์„œ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฒƒ์ด ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. HTTP ๋ฐ TCP ๋ผ์šฐํŒ… ๋„คํŠธ์›Œํฌ์˜ ์ดˆ๊ธฐ ๊ตฌํ˜„์€ ์•„๋งˆ๋„ ๊ฐ๊ฐ ์ˆ˜๋ฐฑ ์ค„์˜ Python์— ๋ถˆ๊ณผํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”Œ๋žซํผ์ด ์„ฑ์žฅํ•˜๊ณ  ์ถ”๊ฐ€ ์š”๊ตฌ ์‚ฌํ•ญ์ด ๋‚˜ํƒ€๋‚˜๋ฉด์„œ ๊ฐœ์„ ๋œ ๊ฐ„๋‹จํ•œ(์ˆœ์ง„ํ•˜๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์ด ์ตœ์‹  ์„œ๋น„์Šค ๋ฉ”์‹œ์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฆ…๋‹ˆ๊นŒ?

์ œํ•œ๋œ ์‹œ๊ณ„. TCP ๋ผ์šฐํŒ… ๋ฉ”์‹œ์— ๋Œ€ํ•œ ์ธก์ •ํ•ญ๋ชฉ์ด ์ „ํ˜€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. HTTP ๋ผ์šฐํŒ…์˜ ๊ฒฝ์šฐ ์ดํ›„ ๋ฒ„์ „์—์„œ๋Š” ์˜ค๋ฅ˜ ์ฝ”๋“œ ๋ฐ ์‘๋‹ต ์‹œ๊ฐ„์ด ํฌํ•จ๋œ ์ž์„ธํ•œ HTTP ์ธก์ •ํ•ญ๋ชฉ์„ ๋„์ž…ํ–ˆ์ง€๋งŒ ์ตœ์‹  ์„œ๋น„์Šค ๋ฉ”์‹œ๋Š” ๋” ๋‚˜์•„๊ฐ€ Prometheus์™€ ๊ฐ™์€ ์ธก์ •ํ•ญ๋ชฉ ์ˆ˜์ง‘ ์‹œ์Šคํ…œ๊ณผ์˜ ํ†ตํ•ฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์‹œ์„ฑ์€ ์šด์˜ ๊ด€์ (๋ฌธ์ œ ํ•ด๊ฒฐ์„ ๋•๊ธฐ ์œ„ํ•ด)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถœ์‹œํ•  ๋•Œ์—๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์•ˆ์ „์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค ์ฒญ๋ก์ƒ‰ ๋ฐฐํฌ ะธ ์นด๋‚˜๋ฆฌ์•„ ๋ฐฐํฌ.

๋ผ์šฐํŒ… ํšจ์œจ์„ฑ ๋˜ํ•œ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. dotCloud ๋ผ์šฐํŒ… ๋ฉ”์‹œ์—์„œ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์€ ์ „์šฉ ๋ผ์šฐํŒ… ๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ž ์žฌ์ ์œผ๋กœ ์—ฌ๋Ÿฌ AZ(๊ฐ€์šฉ์„ฑ ์˜์—ญ) ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๋‹น XNUMX๊ฐœ๊ฐ€ ๋„˜๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ฐ ์ฟผ๋ฆฌ์— ๋Œ€ํ•ด SQL ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ์„ ์—ฌ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ์ฝ”๋“œ๊ฐ€ ๊ธฐ์–ต๋‚ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ๋กœ ์‹คํ–‰ํ•˜๋ฉด ํŽ˜์ด์ง€๊ฐ€ ์ฆ‰์‹œ ๋กœ๋“œ๋˜์ง€๋งŒ dotCloud์—์„œ๋Š” ๊ฐ TCP ์—ฐ๊ฒฐ(๋ฐ ํ›„์† SQL ์ฟผ๋ฆฌ)์— ์ˆ˜์‹ญ ๋ฐ€๋ฆฌ์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๋“œํ•˜๋Š” ๋ฐ ๋ช‡ ์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์ด ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์—๋Š” ์ง€์†์ ์ธ ์—ฐ๊ฒฐ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  ์„œ๋น„์Šค ๋ฉ”์‹œ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋” ์ž˜ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„  ์—ฐ๊ฒฐ์ด ๋ผ์šฐํŒ…๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค์—์„œ. ๋…ผ๋ฆฌ์  ํ๋ฆ„์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ะบะปะธะตะฝั‚ โ†’ ะผะตัˆ โ†’ ัะตั€ะฒะธัํ•˜์ง€๋งŒ ์ด์ œ ๋ฉ”์‹œ๋Š” ์›๊ฒฉ ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ ๋กœ์ปฌ๋กœ ์ž‘๋™ํ•˜๋ฏ€๋กœ ์—ฐ๊ฒฐ์ด ะบะปะธะตะฝั‚ โ†’ ะผะตัˆ ๋กœ์ปฌ์ด๋ฉฐ ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค(๋ฐ€๋ฆฌ์ดˆ๊ฐ€ ์•„๋‹Œ ๋งˆ์ดํฌ๋กœ์ดˆ).

์ตœ์‹  ์„œ๋น„์Šค ๋ฉ”์‹œ๋Š” ๋”์šฑ ์Šค๋งˆํŠธํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉด ๋” ๋น ๋ฅธ ๋ฐฑ์—”๋“œ๋กœ ๋” ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์–ด ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

ะ‘ะตะทะพะฟะฐัะฝะพัั‚ัŒ ๊ทธ๊ฒƒ๋„ ๋” ์ข‹์•„. dotCloud ๋ผ์šฐํŒ… ๋ฉ”์‹œ๋Š” ์ „์ ์œผ๋กœ EC2 Classic์—์„œ ์‹คํ–‰๋˜์—ˆ์œผ๋ฉฐ ํŠธ๋ž˜ํ”ฝ์„ ์•”ํ˜ธํ™”ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(๋ˆ„๊ตฐ๊ฐ€ EC2 ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์— ์Šค๋‹ˆํผ๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด ์ด๋ฏธ ํฐ ๋ฌธ์ œ์— ๋ด‰์ฐฉํ–ˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์—). ์ตœ์‹  ์„œ๋น„์Šค ๋ฉ”์‹œ๋Š” ์ƒํ˜ธ TLS ์ธ์ฆ ๋ฐ ํ›„์† ์•”ํ˜ธํ™” ๋“ฑ์„ ํ†ตํ•ด ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋ผ์šฐํŒ… ํŠธ๋ž˜ํ”ฝ

์ข‹์•„์š”, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•ด ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ dotCloud ํ”Œ๋žซํผ ์ž์ฒด๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

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

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

์ด๋Ÿฌํ•œ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๋ฏธ์…˜ ํฌ๋ฆฌํ‹ฐ์ปฌ ์„œ๋น„์Šค๋Š” ๋ช‡ ๊ฐœ์˜ ์ฃผ์š” ๋…ธ๋“œ์—์„œ ์ง์ ‘ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ฐฐํฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ง์ปค, ์Šค์ผ€์ค„๋Ÿฌ, ๋Ÿฌ๋„ˆ ๋“ฑ ํ‘œ์ค€ ํ”Œ๋žซํผ ์„œ๋น„์Šค๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ์ปจํ…Œ์ด๋„ˆ ํ”Œ๋žซํผ๊ณผ ๋น„๊ตํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ œ์–ด ํ‰๋ฉด์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. docker run ์ž‘์—…์„ Kubernetes์— ์œ„์ž„ํ•˜๋Š” ๋Œ€์‹  ๋…ธ๋“œ์—์„œ ์ง์ ‘ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ปจ์…‰์ด๋ž‘ ๊ฝค ๋น„์Šทํ•˜๋„ค์š” ์ •์  ๋ชจ๋“ˆ(ํฌ๋“œ), ๊ทธ๊ฒƒ์ด ์‚ฌ์šฉํ•˜๋Š” kubeadm ๋˜๋Š” ๋ถ€ํŠธํ๋ธŒ ๋…๋ฆฝํ˜• ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ถ€ํŒ…ํ•  ๋•Œ.

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

ํ•œํŽธ์œผ๋กœ๋Š” Zookeeper์™€ ๊ฐ™์€ ์™ธ๋ถ€ ํ‚ค/๊ฐ’ ์ €์žฅ์†Œ์˜ ์ง€์›์ด ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค(๊ธฐ์–ตํ•˜์„ธ์š”, ๋‹น์‹œ์—๋Š” etcd๋‚˜ Consul์ด ์กด์žฌํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค). ๋ฐ˜๋ฉด์— ์„œ๋น„์Šค ์ด๋™์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋™์ด ์ด๋ฃจ์–ด์งˆ ๋•Œ๋งˆ๋‹ค ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๋Š” ์—…๋ฐ์ดํŠธ๋œ YAML ํŒŒ์ผ์„ ์ˆ˜์‹ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์žฌ๋ถ€ํŒ…๋  ์ˆ˜๋„ ์žˆ์Œ). ๋ณ„๋กœ ํŽธํ•˜์ง€ ์•Š์•„์š”!

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

(๋˜ํ•œ TLS ์—ฐ๊ฒฐ์—์„œ ํŠธ๋ž˜ํ”ฝ์„ ์บก์Šํ™”ํ•˜๊ณ  ์ˆ˜์‹ ์ธก์— ๋‹ค๋ฅธ ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ๋ฐฐ์น˜ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ˆ˜์‹  ์„œ๋น„์Šค์˜ ์ฐธ์—ฌ ์—†์ด TLS ์ธ์ฆ์„œ๋ฅผ ํ™•์ธํ•  ๊ณ„ํš์ด์—ˆ์Šต๋‹ˆ๋‹ค. localhost. ์ด์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜์ค‘์— ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.)

์ด๋Š” ๋‹ค์Œ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์Šค๋งˆํŠธ์Šคํƒ Airbnb์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด์ง€๋งŒ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์€ SmartStack์ด ๊ตฌํ˜„๋˜์–ด ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌ๋˜๋Š” ๋ฐ˜๋ฉด dotCloud์˜ ๋‚ด๋ถ€ ๋ผ์šฐํŒ… ์‹œ์Šคํ…œ์€ dotCloud๊ฐ€ Docker๊ฐ€ ๋˜๋ฉด์„œ ๋ณด๋ฅ˜๋˜์—ˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ SmartStack์ด Istio, Linkerd ๋ฐ Consul Connect์™€ ๊ฐ™์€ ์‹œ์Šคํ…œ์˜ ์ „์‹  ์ค‘ ํ•˜๋‚˜๋กœ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ชจ๋‘ ๋™์ผํ•œ ํŒจํ„ด์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  • ๊ฐ ๋…ธ๋“œ์—์„œ ํ”„๋ก์‹œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
  • ์ œ์–ด ์˜์—ญ์€ ๋ฐฑ์—”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ํ”„๋ก์‹œ ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • ... ์ด์ต!

์„œ๋น„์Šค ๋ฉ”์‹œ์˜ ์ตœ์‹  ๊ตฌํ˜„

์˜ค๋Š˜๋‚  ์œ ์‚ฌํ•œ ๊ทธ๋ฆฌ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์œ ์‚ฌํ•œ ์›์น™์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋น„์Šค ์ด๋ฆ„์„ ๊ณต๊ฐ„์˜ ์ฃผ์†Œ์— ๋งคํ•‘ํ•˜์—ฌ ๋‚ด๋ถ€ DNS ์˜์—ญ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. 127.0.0.0/8. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ๋…ธ๋“œ์—์„œ HAProxy๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฐ ์„œ๋น„์Šค ์ฃผ์†Œ(ํ•ด๋‹น ์„œ๋ธŒ๋„ท์˜)์—์„œ ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค. 127.0.0.0/8) ์ ์ ˆํ•œ ๋ฐฑ์—”๋“œ๋กœ ๋ถ€ํ•˜๋ฅผ ๋ฆฌ๋””๋ ‰์…˜/๊ท ํ˜• ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. HAProxy ๊ตฌ์„ฑ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ ๋ขฐ, etcd ๋˜๋Š” Consul์— ๋ฐฑ์—”๋“œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ํ•„์š”ํ•  ๋•Œ ์—…๋ฐ์ดํŠธ๋œ ๊ตฌ์„ฑ์„ HAProxy์— ์ž๋™์œผ๋กœ ํ‘ธ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ฐ”๋กœ Istio์˜ ์ž‘๋™ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค! ํ•˜์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์šฉ๋„ ํŠน์‚ฌ ํ”„๋ก์‹œ HAProxy ๋Œ€์‹ .
  • etcd ๋˜๋Š” Consul ๋Œ€์‹  Kubernetes API๋ฅผ ํ†ตํ•ด ๋ฐฑ์—”๋“œ ๊ตฌ์„ฑ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋น„์Šค์—๋Š” 127.0.0.0/8 ๋Œ€์‹  ๋‚ด๋ถ€ ์„œ๋ธŒ๋„ท(Kubernetes ClusterIP ์ฃผ์†Œ)์— ์ฃผ์†Œ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ์ƒํ˜ธ TLS ์ธ์ฆ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ถ”๊ฐ€ ๊ตฌ์„ฑ ์š”์†Œ(Citadel)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํšŒ๋กœ ์ฐจ๋‹จ, ๋ถ„์‚ฐ ์ถ”์ , ์นด๋‚˜๋ฆฌ์•„ ๋ฐฐํฌ ๋“ฑ๊ณผ ๊ฐ™์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ์ฐจ์ด์ ์„ ๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŠน์‚ฌ ํ”„๋ก์‹œ

Envoy Proxy๋Š” Lyft(ํƒ์‹œ ์‹œ์žฅ์—์„œ Uber์˜ ๊ฒฝ์Ÿ์ž)๊ฐ€ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ์ธ]. ๋‹ค๋ฅธ ํ”„๋ก์‹œ(์˜ˆ: HAProxy, Nginx, Traefik...)์™€ ์—ฌ๋Ÿฌ ๋ฉด์—์„œ ์œ ์‚ฌํ•˜์ง€๋งŒ Lyft๋Š” ๋‹ค๋ฅธ ํ”„๋ก์‹œ์— ์—†๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋ก์‹œ๋ฅผ ์ž‘์„ฑํ–ˆ์œผ๋ฉฐ ๊ธฐ์กด ํ”„๋ก์‹œ๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ƒˆ ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋” ๋˜‘๋˜‘ํ•ด ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ Envoy๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํ‰๋ฉด (๋ฐ์ดํ„ฐ ํ‰๋ฉด) ์„œ๋น„์Šค ๋ฉ”์‹œ์šฉ. ์ด๋Š” ์ด์ œ Envoy๊ฐ€ ์ด ์„œ๋น„์Šค ๋ฉ”์‹œ์— ๋Œ€ํ•ด ๊ตฌ์„ฑ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ œ์–ด ํ‰๋ฉด (์ œ์–ด ํ‰๋ฉด).

์ œ์–ด ์˜์—ญ

์ œ์–ด ์˜์—ญ์˜ ๊ฒฝ์šฐ Istio๋Š” Kubernetes API๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” confd๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค., ์ด๋Š” etcd ๋˜๋Š” Consul์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์˜ ํ‚ค ์„ธํŠธ๋ฅผ ๋ด…๋‹ˆ๋‹ค. Istio๋Š” Kubernetes API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes ๋ฆฌ์†Œ์Šค ์„ธํŠธ๋ฅผ ๋ด…๋‹ˆ๋‹ค.

์ด ์‚ฌ์ด์—: ๊ฐœ์ธ์ ์œผ๋กœ ์ด ๋‚ด์šฉ์ด ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API ์„ค๋ช…๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

Kubernetes API ์„œ๋ฒ„๋Š” API ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ €์žฅ, ๋ฒ„์ „ ๊ด€๋ฆฌ, ๊ฒ€์ฆ, ์—…๋ฐ์ดํŠธ ๋ฐ ์˜๋ฏธ ์ฒด๊ณ„๋ฅผ ์ œ๊ณตํ•˜๋Š” "๋ฉ์ฒญํ•œ ์„œ๋ฒ„"์ž…๋‹ˆ๋‹ค.

Istio๋Š” Kubernetes์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Kubernetes ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Kubernetes API ์„œ๋ฒ„(๋ฐ etcd ๋„์šฐ๋ฏธ ์„œ๋น„์Šค)์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค ์ฃผ์†Œ

Istio๋Š” Kubernetes๊ฐ€ ํ• ๋‹นํ•˜๋Š” ClusterIP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ Istio ์„œ๋น„์Šค๋Š” ๋‚ด๋ถ€ ์ฃผ์†Œ(๋ฒ”์œ„์— ์†ํ•˜์ง€ ์•Š์Œ)๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. 127.0.0.0/8).

Istio๊ฐ€ ์—†๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ํŠน์ • ์„œ๋น„์Šค์— ๋Œ€ํ•œ ClusterIP ์ฃผ์†Œ์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ์€ kube-proxy์— ์˜ํ•ด ๊ฐ€๋กœ์ฑ„์–ด ํ•ด๋‹น ํ”„๋ก์‹œ์˜ ๋ฐฑ์—”๋“œ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์ธ ์„ธ๋ถ€ ์‚ฌํ•ญ์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด kube-proxy๋Š” iptables ๊ทœ์น™(๋˜๋Š” ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ IPVS ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ)์„ ์„ค์ •ํ•˜์—ฌ ClusterIP ์ฃผ์†Œ๋กœ ๊ฐ€๋Š” ์—ฐ๊ฒฐ์˜ ๋Œ€์ƒ IP ์ฃผ์†Œ๋ฅผ ๋‹ค์‹œ ์”๋‹ˆ๋‹ค.

Istio๊ฐ€ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ์„ค์น˜๋˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์ž…ํ•˜์—ฌ ํŠน์ • ์†Œ๋น„์ž ๋˜๋Š” ์ „์ฒด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•ด ๋ช…์‹œ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋  ๋•Œ๊นŒ์ง€ ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. sidecar ์‚ฌ์šฉ์ž ์ •์˜ ํฌ๋“œ์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ์ด ์ปจํ…Œ์ด๋„ˆ๋Š” Envoy ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋™ํ•˜๊ณ  ๋‹ค๋ฅธ ์„œ๋น„์Šค๋กœ ์ด๋™ํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€๋กœ์ฑ„์„œ ํ•ด๋‹น ํŠธ๋ž˜ํ”ฝ์„ Envoy๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋Š” iptables ๊ทœ์น™ ์ง‘ํ•ฉ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

Kubernetes DNS์™€ ํ†ตํ•ฉ๋˜๋ฉด ์ด๋Š” ์šฐ๋ฆฌ ์ฝ”๋“œ๊ฐ€ ์„œ๋น„์Šค ์ด๋ฆ„์œผ๋กœ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๊ณ  ๋ชจ๋“  ๊ฒƒ์ด "์ œ๋Œ€๋กœ ์ž‘๋™"ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์šฐ๋ฆฌ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค. http://api/v1/users/4242๋‹ค์Œ api ์š”์ฒญ ํ•ด๊ฒฐ 10.97.105.48, iptables ๊ทœ์น™์€ 10.97.105.48์˜ ์—ฐ๊ฒฐ์„ ๊ฐ€๋กœ์ฑ„์„œ ๋กœ์ปฌ Envoy ํ”„๋ก์‹œ๋กœ ์ „๋‹ฌํ•˜๊ณ  ํ•ด๋‹น ๋กœ์ปฌ ํ”„๋ก์‹œ๋Š” ์š”์ฒญ์„ ์‹ค์ œ ๋ฐฑ์—”๋“œ API๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ํœด!

์ถ”๊ฐ€ ํ”„๋ฆด

Istio๋Š” ๋˜ํ•œ mTLS(์ƒํ˜ธ TLS)๋ฅผ ํ†ตํ•ด ์—”๋“œํˆฌ์—”๋“œ ์•”ํ˜ธํ™” ๋ฐ ์ธ์ฆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ผ๋Š” ๊ตฌ์„ฑ ์š”์†Œ ์„ฑ.

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

๋ฌผ๋ก  ๊ฐ€์‹œ์„ฑ์— ๋Œ€ํ•ด์„œ๋„ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. Envoy๋Š” ๋ถ„์‚ฐ ์ถ”์ ์„ ์ œ๊ณตํ•˜๋Š” ๋™์‹œ์— ์—„์ฒญ๋‚œ ์–‘์˜ ์ธก์ •ํ•ญ๋ชฉ์„ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์—์„œ ๋‹จ์ผ API ์š”์ฒญ์ด ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค A, B, C ๋ฐ D๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ ์‹œ ๋ถ„์‚ฐ ์ถ”์ ์€ ์š”์ฒญ์— ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํ•˜์œ„ ์š”์ฒญ์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ด ์‹๋ณ„์ž๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์บก์ฒ˜ํ•  ๋ชจ๋“  ๊ด€๋ จ ํ†ตํ™”, ์ง€์—ฐ ๋“ฑ

๊ฐœ๋ฐœ ๋˜๋Š” ๊ตฌ๋งค

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

์ ๋‹นํ•œ ์š”๊ตฌ์‚ฌํ•ญ(๊ฐ€์‹œ์„ฑ, ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ๋ฐ ๊ธฐํƒ€ ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Œ)์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ž์ฒด ๋„๊ตฌ๋ฅผ ๊ฐœ๋ฐœํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Kubernetes๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Kubernetes๊ฐ€ ์ด๋ฏธ ์„œ๋น„์Šค ๊ฒ€์ƒ‰ ๋ฐ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ณ ๊ธ‰ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์„œ๋น„์Šค ๋ฉ”์‹œ๋ฅผ "๊ตฌ๋งค"ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ๋‚˜์€ ์„ ํƒ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (Istio๋Š” ์˜คํ”ˆ ์†Œ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ "๊ตฌ๋งค"ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์ด๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋ฐฐํฌํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ ค๋ฉด ์—ฌ์ „ํžˆ ์—”์ง€๋‹ˆ์–ด๋ง ์‹œ๊ฐ„์„ ํˆฌ์žํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

Istio, Linkerd ๋˜๋Š” Consul Connect๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๋Š” Istio์— ๋Œ€ํ•ด์„œ๋งŒ ์ด์•ผ๊ธฐํ–ˆ์ง€๋งŒ ์ด๊ฒƒ์ด ์œ ์ผํ•œ ์„œ๋น„์Šค ๋ฉ”์‹œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์ธ๊ธฐ ์žˆ๋Š” ๋Œ€์•ˆ - ๋ง์ปค๋“œ, ๊ทธ๋ฆฌ๊ณ  ๋” ๋งŽ์€ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค ์˜์‚ฌ ์—ฐ๊ฒฐ.

๋ฌด์—‡์„ ์„ ํƒ?

์†”์งํžˆ ๋ชจ๋ฅด๊ฒ ์–ด์š”. ํ˜„์žฌ ๋‚˜๋Š” ๋‚ด ์ž์‹ ์ด ์ด ์งˆ๋ฌธ์— ๋‹ตํ•  ๋งŒํผ ์œ ๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ์žฌ๋ฏธ์žˆ๋Š” ์กฐํ•ญ ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์‹ฌ์ง€์–ด ๋ฒค์น˜๋งˆํฌ.

ํ•œ ๊ฐ€์ง€ ์œ ๋งํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์Šˆํผ๊ธ€๋ฃจ. ์„œ๋น„์Šค ๋ฉ”์‹œ์— ์˜ํ•ด ๋…ธ์ถœ๋œ API๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์ถ”์ƒํ™” ๊ณ„์ธต์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค ๋ฉ”์‹œ์˜ ํŠน์ •(๊ทธ๋ฆฌ๊ณ  ๋‚ด ์ƒ๊ฐ์—๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๋ณต์žกํ•œ) API๋ฅผ ๋ฐฐ์šฐ๋Š” ๋Œ€์‹  SuperGloo์˜ ๋” ๊ฐ„๋‹จํ•œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋งˆ์น˜ HTTP ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋ฐฑ์—”๋“œ ๊ธฐ๋Šฅ์„ ์„ค๋ช…ํ•˜๋Š” ์ค‘๊ฐ„ ๊ตฌ์„ฑ ํ˜•์‹์ด ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์„œ๋กœ ์‰ฝ๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Nginx, HAProxy, Traefik, Apache์— ๋Œ€ํ•œ ์‹ค์ œ ๊ตฌ์„ฑ ์ƒ์„ฑ...

๋‚˜๋Š” Istio์™€ SuperGloo๋ฅผ ์กฐ๊ธˆ ๋‹ค๋ฃจ์—ˆ๊ณ  ๋‹ค์Œ ๊ธฐ์‚ฌ์—์„œ๋Š” SuperGloo๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์— Istio ๋˜๋Š” Linkerd๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ํ›„์ž๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•, ์ฆ‰ ๊ตฌ์„ฑ์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  ํ•œ ์„œ๋น„์Šค ๋ฉ”์‹œ๋ฅผ ๋‹ค๋ฅธ ์„œ๋น„์Šค ๋ฉ”์‹œ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

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