์ž๋™ Envoy ๋ฐฐํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Compute Engine VM ์„ค์ • ์˜ต์…˜

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ์ž๋™ Envoy ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€ ์˜ต์…˜ ๋ฐ ์ž‘์—…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์ธ์Šคํ„ด์Šค ํ…œํ”Œ๋ฆฟ ๋งŒ๋“ค๊ธฐ ์˜ต์…˜

์ž๋™ Envoy ํ”„๋ก์‹œ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ธ์Šคํ„ด์Šค ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค ๋•Œ ๋‹ค์Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ์˜ ์ผ๋ถ€ ์ธก๋ฉด๊ณผ ํ”„๋ก์‹œ ๋™์ž‘์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’ ๋ฐ ์„ค๋ช… ํ•„์ˆ˜ ๋˜๋Š” ์„ ํƒ์‚ฌํ•ญ
--service-proxy enabled
VM์— ์„œ๋น„์Šค ํ”„๋ก์‹œ ๋ฐ ์—์ด์ „ํŠธ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ตฌ์„ฑํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
์„œ๋น„์Šค ํ”„๋ก์‹œ๋ฅผ ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•˜๊ณ  ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ํ•„์ˆ˜ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค. ์ด ์„ค์ •์„ ์ƒ๋žตํ•˜๋ฉด ์„œ๋น„์Šค ํ”„๋ก์‹œ๊ฐ€ ์„ค์น˜ ๋˜๋Š” ๊ตฌ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
--service-proxy:serving-ports ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๊ตฌ๋ถ„๋œ ํฌํŠธ ๋ชฉ๋ก.
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜/์›Œํฌ๋กœ๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ํฌํŠธ์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค ํ”„๋ก์‹œ๊ฐ€ ์ธ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€๋กœ์ฑ„์„œ localhost์˜ ์ง€์ •๋œ ์ œ๊ณต ํฌํŠธ๋กœ ์ด๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
์„ ํƒ์‚ฌํ•ญ
์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์ƒ๋žตํ•˜๋ฉด ์„œ๋น„์Šค ํ”„๋ก์‹œ๊ฐ€ ์›Œํฌ๋กœ๋“œ์˜ ์•„์›ƒ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ๋งŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ์€ ์„œ๋น„์Šค ํ”„๋ก์‹œ๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
--service-proxy:proxy-port ๋‹จ์ผ ํฌํŠธ
์„œ๋น„์Šค ํ”„๋ก์‹œ๊ฐ€ ๋ฆฌ์Šจํ•˜๋Š” ํฌํŠธ์ž…๋‹ˆ๋‹ค. VM์ด ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€๋กœ์ฑ„๊ณ  ์ด ํฌํŠธ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜์—ฌ ์„œ๋น„์Šค ํ”„๋ก์‹œ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
์„ ํƒ์‚ฌํ•ญ.
์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์ƒ๋žตํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’์€ 15001์ž…๋‹ˆ๋‹ค.
--service-proxy:network ์œ ํšจํ•œ VPC ๋„คํŠธ์›Œํฌ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
์„œ๋น„์Šค ํ”„๋ก์‹œ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์—์„œ ์„œ๋น„์Šค ํ”„๋ก์‹œ์˜ ๋™์  ๊ตฌ์„ฑ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” Google Cloud VPC ๋„คํŠธ์›Œํฌ์ž…๋‹ˆ๋‹ค.
VM์ด ๋‘˜ ์ด์ƒ์˜ ๋„คํŠธ์›Œํฌ์— ์žˆ๋Š” ๊ฒฝ์šฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.
์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์ƒ๋žตํ•˜๋ฉด VM ์ธ์Šคํ„ด์Šค ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“œ๋Š” ๋™์•ˆ --network ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •๋œ ๊ฐ’์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
--service-proxy:tracing ON ๋˜๋Š” OFF
์„œ๋น„์Šค ํ”„๋ก์‹œ๊ฐ€ ๋ถ„์‚ฐ ์ถ”์  ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ON๋กœ ์„ค์ •ํ•˜๋ฉด ์„œ๋น„์Šค ํ”„๋ก์‹œ์˜ ์ œ์–ด ์˜์—ญ์ด ์š”์ฒญ ID ๊ธฐ๋ฐ˜ ์ถ”์ ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๊ตฌ์„ฑ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
์ž์„ธํ•œ ๋‚ด์šฉ์€ Envoy ํ”„๋ก์‹œ์šฉ generate_request_id ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
์„ ํƒ์‚ฌํ•ญ.
์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์ƒ๋žตํ•˜๋ฉด ์ถ”์ ์ด ์‚ฌ์šฉ ์„ค์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
--service-proxy:access-log ์ œ์–ด ์˜์—ญ์— ์˜ํ•ด ์„œ๋น„์Šค ํ”„๋ก์‹œ๋กœ ์ „์†ก๋˜๋Š” ์•ก์„ธ์Šค ๋กœ๊ทธ์˜ ํŒŒ์ผ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ˆ˜์‹  ๋ฐ ๋ฐœ์‹  ์š”์ฒญ์€ ์ด ํŒŒ์ผ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.
์ž์„ธํ•œ ๋‚ด์šฉ์€ Envoy ํ”„๋ก์‹œ์˜ ํŒŒ์ผ ์•ก์„ธ์Šค ๋กœ๊ทธ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
์„ ํƒ์‚ฌํ•ญ. ๊ธฐ๋ณธ๊ฐ’์€ ์—†์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋กœ๊ทธ๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
--service-proxy:intercept-all-outbound-traffic(๋ฏธ๋ฆฌ๋ณด๊ธฐ) ์„œ๋น„์Šค ํ”„๋ก์‹œ์—์„œ ๋ชจ๋“  ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ ๊ฐ€๋กœ์ฑ„๊ธฐ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๊ณ  ์™ธ๋ถ€ ํ˜ธ์ŠคํŠธ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์— gcloud beta๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ์‚ฌํ•ญ.
--service-proxy:exclude-outbound-ip-ranges(๋ฏธ๋ฆฌ๋ณด๊ธฐ) ์•ˆ์— ํฐ๋”ฐ์˜ดํ‘œ(")๋กœ ์ง€์ •๋˜์–ด ์„ธ๋ฏธ์ฝœ๋ก (;)์œผ๋กœ ๊ตฌ๋ถ„๋œ IP ์ฃผ์†Œ ๋˜๋Š” CIDR ๋ฒ”์œ„ ๋ชฉ๋ก์ด๋ฉฐ, ๋ฆฌ๋””๋ ‰์…˜์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. intercept-all-outbound-traffic ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์— gcloud beta๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

exclude-outbound-ip-ranges="8.8.8.8;129.168.10.0/24"
์„ ํƒ์‚ฌํ•ญ.
--service-proxy:exclude-outbound-port-ranges(๋ฏธ๋ฆฌ๋ณด๊ธฐ) ์•ˆ์— ํฐ๋”ฐ์˜ดํ‘œ(")๋กœ ์ง€์ •๋˜์–ด ์„ธ๋ฏธ์ฝœ๋ก (;)์œผ๋กœ ๊ตฌ๋ถ„๋œ ํฌํŠธ ๋˜๋Š” ํฌํŠธ ๋ฒ”์œ„ ๋ชฉ๋ก์ด๋ฉฐ, ๋ฆฌ๋””๋ ‰์…˜์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. intercept-all-outbound-traffic ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์— gcloud beta๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

exclude-outbound-port-ranges="81;8080-8090"
์„ ํƒ์‚ฌํ•ญ.
--service-proxy:scope(๋ฏธ๋ฆฌ๋ณด๊ธฐ) scope ์˜ต์…˜์€ Gateway ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋…ผ๋ฆฌ์  ๊ตฌ์„ฑ ๊ฒฝ๊ณ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. VM์ด ์‹œ์ž‘๋˜๋ฉด ์„œ๋น„์Šค ํ”„๋ก์‹œ๊ฐ€ Cloud Service Mesh์™€ ํ†ต์‹ ํ•˜์—ฌ ์ด ๋ฒ”์œ„ ์ด๋ฆ„์˜ ๊ฒŒ์ดํŠธ์›จ์ด์— ์—ฐ๊ฒฐ๋œ ๊ฒฝ๋กœ์— ํ•ด๋‹นํ•˜๋Š” ๋ผ์šฐํŒ… ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. scope๊ฐ€ ์ง€์ •๋œ ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ๊ฐ’์ด ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. scope ๋ฐ mesh ๊ฐ’์€ ๋™์‹œ์— ์ง€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์— gcloud beta๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ์‚ฌํ•ญ.
--service-proxy:mesh(๋ฏธ๋ฆฌ๋ณด๊ธฐ) mesh ์˜ต์…˜์€ Mesh ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋…ผ๋ฆฌ์  ๊ตฌ์„ฑ ๊ฒฝ๊ณ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. VM์ด ์‹œ์ž‘๋˜๋ฉด ์„œ๋น„์Šค ํ”„๋ก์‹œ๊ฐ€ Cloud Service Mesh์™€ ํ†ต์‹ ํ•˜์—ฌ ์ด ๋ฉ”์‹œ ์ด๋ฆ„์˜ Mesh์— ์—ฐ๊ฒฐ๋œ ๊ฒฝ๋กœ์— ํ•ด๋‹นํ•˜๋Š” ๋ผ์šฐํŒ… ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. mesh๊ฐ€ ์ง€์ •๋œ ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ๊ฐ’์ด ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. scope ๋ฐ mesh ๊ฐ’์€ ๋™์‹œ์— ์ง€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์— gcloud beta๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ์‚ฌํ•ญ.
--service-proxy:project-number(๋ฏธ๋ฆฌ๋ณด๊ธฐ) project-number ์˜ต์…˜์€ Mesh ๋ฐ Gateway ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ƒˆ ์„œ๋น„์Šค ๊ฒฝ๋กœ ์ง€์ • API์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์„ ํƒ์‚ฌํ•ญ.
--service-proxy-labels key=value ํ˜•์‹์˜ ํ‚ค/๊ฐ’ ์Œ์ž…๋‹ˆ๋‹ค.
์„œ๋น„์Šค ํ”„๋ก์‹œ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ๋ฒจ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋‚ด์šฉ์€ Envoy ํ”„๋ก์‹œ์˜ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋ผ๋ฒจ์€ ํ”„๋ก์‹œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ์„ค์ •ํ•˜๋ ค๋Š” ๋ชจ๋“  key=value ์Œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์˜ˆ: ๊ตฌ์„ฑ ํ•„ํ„ฐ๋ง๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ). ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ๋ฒ„์ „ ๋ผ๋ฒจ์— ์ด๋Ÿฌํ•œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: app=review ๋˜๋Š” version=canary). ๋‘˜์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์„ ํƒ์‚ฌํ•ญ.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ gcloud ๋ช…๋ น์–ด๋Š” proxy-it์ด๋ผ๋Š” ์ธ์Šคํ„ด์Šค ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์—๋Š” Envoy ํ”„๋ก์‹œ์™€ ์„œ๋น„์Šค ํ”„๋ก์‹œ ์—์ด์ „ํŠธ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud compute instance-templates create proxy-it \
    --service-proxy enabled

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ ์ธ์Šคํ„ด์Šค ํ…œํ”Œ๋ฆฟ์„ proxy-it์ด๋ผ๊ณ  ํ•˜๋ฉฐ, Envoy ํ”„๋ก์‹œ ๋ฐ ์„œ๋น„์Šค ํ”„๋ก์‹œ ์—์ด์ „ํŠธ๊ฐ€ ์„ค์น˜๋˜๊ณ  ์ œ๊ณต ํฌํŠธ ๋ฐ ํ”„๋ก์‹œ ํฌํŠธ๊ฐ€ ์„ค์ •๋˜๊ณ  ์ถ”์ ์ด ์‚ฌ์šฉ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ผ๋ฒจ์ด ์ •์˜๋ฉ๋‹ˆ๋‹ค.

gcloud compute instance-templates create proxy-it \
  --service-proxy enabled,serving-ports=8080,proxy-port=15001,tracing=ON \
  --service-proxy-labels version=canary

๋‹ค์Œ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์ œ๊ณต ํฌํŠธ๋ฅผ 8080์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํฌํŠธ 8080์— ๋Œ€ํ•œ ์ธ๋ฐ”์šด๋“œ TCP ์—ฐ๊ฒฐ์€ iptable์— ์˜ํ•ด ๊ฐ€๋กœ์ฑ„๊ธฐ๋ฅผ ๋‹นํ•˜์—ฌ Envoy ํ”„๋ก์‹œ๋กœ ๋ฆฌ๋””๋ ‰์…˜๋œ ๋‹ค์Œ TCP ํฌํŠธ 8080์—์„œ ๋ฆฌ์Šจํ•˜๋Š” VM์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค์Œ ์‚ฌํ•ญ๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • Cloud Service Mesh์— ๊ตฌ์„ฑ๋œ ์„œ๋น„์Šค VIP์˜ ๋ชจ๋“  ์•„์›ƒ๋ฐ”์šด๋“œ ์—ฐ๊ฒฐ์€ netfilter๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” iptable์— ์˜ํ•ด ๊ฐ€๋กœ์ฑ„๊ธฐ๋ฅผ ๋‹นํ•ฉ๋‹ˆ๋‹ค. netfilter๋Š” ๋„คํŠธ์›Œํฌ ์Šคํƒ์„ ํ†ต๊ณผํ•˜๋Š” ํ•ด๋‹น ํŠธ๋ž˜ํ”ฝ์ด ๊ฐ€๋กœ์ฑ„๊ธฐ๋ฅผ ๋‹นํ•˜๊ณ  Envoy ํ”„๋ก์‹œ๋กœ ๋ฆฌ๋””๋ ‰์…˜๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Cloud Service Mesh๊ฐ€ ๊ตฌ์„ฑ๋œ ๋ฐฉ์‹์— ๋”ฐ๋ผ ํŠธ๋ž˜ํ”ฝ์ด ๋ถ€ํ•˜ ๋ถ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ๋ชจ๋“  ์ธ๋ฐ”์šด๋“œ ์—ฐ๊ฒฐ์€ iptables์— ์˜ํ•ด ๊ฐ€๋กœ์ฑ„๊ธฐ๋ฅผ ๋‹นํ•˜์ง€ ์•Š์œผ๋ฉฐ VM์— ์ง์ ‘ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
  • ์™ธ๋ถ€ ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ ๋ชจ๋“  ์—ฐ๊ฒฐ์€ ์ค‘๋‹จ ์—†์ด ์™ธ๋ถ€ IP ์ฃผ์†Œ๋กœ ์ง์ ‘ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  UDP ํŠธ๋ž˜ํ”ฝ์€ iptable์— ์˜ํ•ด ์ค‘๋‹จ๋˜์ง€ ์•Š๊ณ  ๋Œ€์ƒ์œผ๋กœ ์ง์ ‘ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

Cloud Service Mesh๋ฅผ ์‚ฌ์šฉํ•œ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ(ํ™•๋Œ€ํ•˜๋ ค๋ฉด ํด๋ฆญ)
Cloud Service Mesh๋ฅผ ์‚ฌ์šฉํ•œ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ(ํ™•๋Œ€ํ•˜๋ ค๋ฉด ํด๋ฆญ)

๋‹ค์ด์–ด๊ทธ๋žจ์˜ ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋Œ€์ƒ ํฌํŠธ 80์ด ์žˆ๋Š” ์ธ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ์€ ๊ฐ€๋กœ์ฑ„๊ธฐ๋ฅผ ๋‹นํ•˜๊ณ  ํฌํŠธ์—์„œ ๋ฆฌ์Šจํ•˜๋Š” ์„œ๋น„์Šค๋กœ ์ง์ ‘ ๋ผ์šฐํŒ…๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ๋Œ€์ƒ ํฌํŠธ 8080์ด ์žˆ๋Š” ์ธ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ์€ ๊ฐ€๋กœ์ฑ„๊ธฐ๋ฅผ ๋‹นํ•˜๊ณ  Envoy ๋ฆฌ์Šค๋„ˆ ํฌํŠธ๋กœ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค.
  3. Envoy๋Š” (2)์—์„œ localhost ํฌํŠธ 8080์—์„œ ๋ฆฌ์Šจํ•˜๋Š” ์„œ๋น„์Šค 2๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  4. Cloud Service Mesh ์ „๋‹ฌ ๊ทœ์น™ VIP ๋ฐ ํฌํŠธ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์•„์›ƒ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ์€ ๊ฐ€๋กœ์ฑ„๊ธฐ๋ฅผ ๋‹นํ•˜๊ณ  Envoy ๋ฆฌ์Šค๋„ˆ ํฌํŠธ๋กœ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค.
  5. Envoy๋Š” ํŠธ๋ž˜ํ”ฝ์„ (4)์—์„œ ๋Œ€์ƒ Cloud Service Mesh ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ๋ฐฑ์—”๋“œ์˜ ์—”๋“œํฌ์ธํŠธ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  6. Cloud Service Mesh VIP ๋ฐ ํฌํŠธ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์•„์›ƒ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ์ด๋ฉฐ ๊ฐ€๋กœ์ฑ„๊ธฐ๋ฅผ ๋‹นํ•˜์ง€ ์•Š์œผ๋ฉฐ ์™ธ๋ถ€ ์„œ๋น„์Šค๋กœ ์ง์ ‘ ๋ผ์šฐํŒ…๋ฉ๋‹ˆ๋‹ค.

๋ผ๋ฒจ ์‚ฌ์šฉ

Cloud Service Mesh ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง์— ์‚ฌ์šฉํ•  ๋ผ๋ฒจ์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ Envoy ํ”„๋ก์‹œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๋กœ๊น…์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด --service-proxy-labels ๋˜๋Š” --service-proxy access-log ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

gcloud compute instance-templates create td-vm-template-auto \
   --service-proxy enabled,access-log=/var/log/envoy/access.log,network=default \
   --service-proxy-labels myapp=review,version=canary

Envoy ํ”„๋ก์‹œ๋Š” VM์˜ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ƒํƒœ ํ™•์ธ ํฌํŠธ๋ฅผ ๊ฐ€๋กœ์ฑŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒํƒœ ํ™•์ธ ํ”„๋กœ๋ธŒ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ Envoy ํ”„๋ก์‹œ์— ๋Œ€ํ•ด ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. Envoy ํ”„๋ก์‹œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฉด ํŠธ๋ž˜ํ”ฝ์ด VM์œผ๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

gcloud compute instance-templates create td-vm-template-auto \
  --service-proxy=enabled,serving-ports="80;8080"

๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน ์—…๋ฐ์ดํŠธ ํ”„๋กœ์„ธ์Šค ์‚ฌ์šฉ

Envoy ํ”„๋ก์‹œ ๊ตฌ์„ฑ์„ ์œ„ํ•ด ์ž๋™ํ™”๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน ์—…๋ฐ์ดํŠธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„œ๋น„์Šค ํ”„๋ก์‹œ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๊ธฐ์กด ๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์— ์ถ”๊ฐ€ํ•˜๊ณ  Cloud Service Mesh ๋„คํŠธ์›Œํฌ์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
  • VM์—์„œ ์„œ๋น„์Šค ํ”„๋ก์‹œ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์ˆœ์ฐจ์  ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์˜ ์—ฐ๊ฒฐ ๋“œ๋ ˆ์ด๋‹ ๊ฐ’์„ ์ตœ์†Œ 30์ดˆ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ์—…๋ฐ์ดํ„ฐ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ --min-ready ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 3๋ถ„ ์ด์ƒ์˜ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. --min-ready ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด VM์ด ์—…๋ฐ์ดํŠธ๋œ ํ›„ ๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์ด ๋Œ€๊ธฐํ•˜๋‹ค๊ฐ€ ๋‹ค์Œ VM ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“  VM์ด Envoy ๋ฐ ์„œ๋น„์Šค ํ”„๋ก์‹œ ์—์ด์ „ํŠธ๋ฅผ ์™„์ „ํžˆ ๋ถ€ํŒ…ํ•  ์‹œ๊ฐ„์ด ์—†์œผ๋ฉฐ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋นจ๋ฆฌ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์—์„œ ์ˆœ์ฐจ์  ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

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

์—…๋ฐ์ดํŠธ ์ฒ˜๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์—์„œ ์„œ๋น„์Šค ํ”„๋ก์‹œ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. --service-proxy ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ ์ธ์Šคํ„ด์Šค ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  2. ๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน ์—…๋ฐ์ดํŠธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆœ์ฐจ์  ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด VM์—์„œ Envoy ํ”„๋ก์‹œ๊ฐ€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์ด ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์— ์—ฐ๊ฒฐ๋œ ์œ ์ผํ•œ MIG์ธ ๊ฒฝ์šฐ Cloud Service Mesh๋ฅผ ์„ค์ •ํ•  ๋•Œ ๋งŒ๋“  Cloud Service Mesh ๊ตฌ์„ฑ์„ ์‚ญ์ œํ•˜๊ณ ์ž ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.