ํ”„๋ก์‹œ๋ฆฌ์Šค gRPC ์„œ๋น„์Šค๋กœ Cloud Service Mesh ์„ค์ • ์ค€๋น„

Cloud Service Mesh ์„ค์ •์—๋Š” ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์—์„œ๋Š” ํ”„๋ก์‹œ๋ฆฌ์Šค gRPC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Cloud Service Mesh ๊ตฌ์„ฑ์„ ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•œ ์•ˆ๋‚ด์ธ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” ๋ถ€ํ•˜ ๋ถ„์‚ฐ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์„œ๋น„์Šค ๋ผ์šฐํŒ… API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋‹จ๊ณ„๋Š” ์ด ๋ฌธ์„œ์˜ ๋’ท ๋ถ€๋ถ„์— ๋‚˜์˜ค๋Š” ์„ค์ • ํ”„๋กœ์„ธ์Šค ๊ณ„์†์— ๋‚˜์—ด๋œ ํ”Œ๋žซํผ๋ณ„ ๊ฐ€์ด๋“œ๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ๋ฅผ ์ฝ๊ธฐ ์ „์— ํ”„๋ก์‹œ๋ฆฌ์Šค gRPC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ Cloud Service Mesh๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐœ์š”๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋‹ค์Œ ๋ฌธ์„œ๋ฅผ ์ˆ™์ง€ํ•˜์„ธ์š”.

๊ธฐ๋ณธ ์š”๊ฑด

๋‹ค์Œ ์ž‘์—…์„ ์™„๋ฃŒํ•˜์—ฌ ํ™˜๊ฒฝ์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ฒฐ์ œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ•„์ˆ˜ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
  3. ํ”„๋กœ์ ํŠธ์— Traffic Director API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  4. ์„œ๋น„์Šค ๊ณ„์ •์— Traffic Director API์— ์•ก์„ธ์Šคํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ๊ฐ ์ž‘์—…์— ๋Œ€ํ•œ ์•ˆ๋‚ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ์ œ ์‚ฌ์šฉ ์„ค์ •

Google Cloud ํ”„๋กœ์ ํŠธ์— ๊ฒฐ์ œ๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฐ์ œ ์‚ฌ์šฉ ์„ค์ •, ์‚ฌ์šฉ ์ค‘์ง€, ๋ณ€๊ฒฝ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ•„์ˆ˜ IAM ๊ถŒํ•œ ๋ถ€์—ฌ

VM ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  Cloud Service Mesh ๊ตฌ์„ฑ์„ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ถฉ๋ถ„ํ•œ Identity and Access Management(IAM) ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Cloud Service Mesh๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋Š” ํ”„๋กœ์ ํŠธ์— ์†Œ์œ ์ž ๋˜๋Š” ํŽธ์ง‘์ž ํ”„๋กœ์ ํŠธ ์—ญํ• (roles/owner ๋˜๋Š” roles/editor)์ด ์žˆ์œผ๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๊ถŒํ•œ์ด ์ž๋™์œผ๋กœ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ ํ‘œ์— ํ‘œ์‹œ๋œ ๋ชจ๋“  IAM ์—ญํ• ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—ญํ• ์ด ์žˆ๋Š” ๊ฒฝ์šฐ Compute Engine IAM ๋ฌธ์„œ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ๊ด€๋ จ ๊ถŒํ•œ๋„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ž‘์—… ํ•„์š”ํ•œ ์—ญํ• 
์„œ๋น„์Šค ๊ณ„์ •์˜ IAM ์ •์ฑ… ์„ค์ • ์„œ๋น„์Šค ๊ณ„์ • ๊ด€๋ฆฌ์ž
(roles/iam.serviceAccountAdmin)
Cloud Service Mesh๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ์‚ฌ์šฉ๋Ÿ‰ ๊ด€๋ฆฌ์ž
(roles/serviceusage.serviceUsageAdmin)
๋„คํŠธ์›Œํฌ, ์„œ๋ธŒ๋„ท, ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ๊ตฌ์„ฑ์š”์†Œ ๋งŒ๋“ค๊ธฐ Compute ๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ์ž
(roles/compute.networkAdmin)
๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ Compute ๋ณด์•ˆ ๊ด€๋ฆฌ์ž
(roles/compute.securityAdmin)
์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ Compute ์ธ์Šคํ„ด์Šค ๊ด€๋ฆฌ์ž
(roles/compute.instanceAdmin)
ํฌ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ GKE ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ  ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž
(roles/container.clusterAdmin)
์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ณ„์ • ์‚ฌ์šฉ์ž
(roles/iam.serviceAccountUser

Compute Engine VM์— https://www.googleapis.com/auth/cloud-platform ๋ฒ”์œ„๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”„๋ก์‹œ๋ฆฌ์Šค gRPC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฐํฌ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

xDS v3๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Cloud Service Mesh gRPC ํด๋ผ์ด์–ธํŠธ์— ์‚ฌ์šฉ๋˜๋Š” ์„œ๋น„์Šค ๊ณ„์ •์— roles/trafficdirector.client ์—ญํ• ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

Traffic Director API ์‚ฌ์šฉ ์„ค์ •

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ ํ”„๋กœ์ ํŠธ์˜ API ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    API ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ด๋™

  2. API ๋ฐ ์„œ๋น„์Šค ๊ฒ€์ƒ‰ ํ•„๋“œ์— Traffic Director๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  3. ๊ฒ€์ƒ‰๊ฒฐ๊ณผ ๋ชฉ๋ก์—์„œ Traffic Director API๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. Traffic Director API๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด Traffic Director API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ถŒํ•œ์ด ์—†๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  4. Traffic Director API ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

gcloud services enable trafficdirector.googleapis.com

Traffic Director API์— ์•ก์„ธ์Šคํ•˜๋„๋ก ์„œ๋น„์Šค ๊ณ„์ • ์‚ฌ์šฉ ์„ค์ •

๋ฐ์ดํ„ฐ ์˜์—ญ์„ ์„ค์ •ํ•˜๊ณ  Cloud Service Mesh์— ์—ฐ๊ฒฐํ•˜๋ฉด xDS ํด๋ผ์ด์–ธํŠธ๊ฐ€ trafficdirector.googleapis.com xDS ์„œ๋ฒ„์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ xDS ํด๋ผ์ด์–ธํŠธ๋Š” xDS ์„œ๋ฒ„์— ์„œ๋น„์Šค ๊ณ„์ • ID๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ๊ณผ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๊ฐ„์˜ ํ†ต์‹ ์ด ์ œ๋Œ€๋กœ ์Šน์ธ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

Compute Engine VM์˜ ๊ฒฝ์šฐ xDS ํด๋ผ์ด์–ธํŠธ๋Š” VM์— ํ• ๋‹น๋œ ์„œ๋น„์Šค ๊ณ„์ •์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. xDS ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „์€ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํŒŒ์ผ์— ์ง€์ •๋ฉ๋‹ˆ๋‹ค. xDS v3๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

xDS v2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ xDS v3๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ xDS v2์—์„œ xDS v3๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

xDS v3์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ gRPC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค ๊ณ„์ •์— trafficdirector.networks.reportMetrics ๋ฐ trafficdirector.networks.getConfigs ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ถŒํ•œ์„ ๋ชจ๋‘ ๋ž˜ํ•‘ํ•˜๋Š” IAM Cloud Service Mesh ํด๋ผ์ด์–ธํŠธ ์—ญํ• (roles/trafficdirector.client)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ IAM ๋ฐ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    IAM ๋ฐ ๊ด€๋ฆฌ์ž๋กœ ์ด๋™

  2. ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  3. ์—ญํ• ์„ ์ถ”๊ฐ€ํ•  ์„œ๋น„์Šค ๊ณ„์ •์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

    • ์„œ๋น„์Šค ๊ณ„์ •์ด ๊ตฌ์„ฑ์› ๋ชฉ๋ก์— ์•„์ง ์—†๋Š” ๊ฒฝ์šฐ ์–ด๋– ํ•œ ์—ญํ• ๋„ ํ• ๋‹น๋˜์ง€ ์•Š์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•˜๊ณ  ์„œ๋น„์Šค ๊ณ„์ •์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋น„์Šค ๊ณ„์ •์ด ๊ตฌ์„ฑ์› ๋ชฉ๋ก์— ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ธฐ์กด ์—ญํ• ์ด ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ณ„์ •์„ ์„ ํƒํ•˜๊ณ  ์—ญํ•  ํƒญ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ์—ญํ• ์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์ •ํ•˜๋ ค๋Š” ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•ด ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  5. ๊ธฐํƒ€ > Cloud Service Mesh ํด๋ผ์ด์–ธํŠธ ์—ญํ• ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  6. ์„œ๋น„์Šค ๊ณ„์ •์— ์—ญํ• ์„ ์ ์šฉํ•˜๋ ค๋ฉด ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

gcloud projects add-iam-policy-binding PROJECT \
    --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
    --role=roles/trafficdirector.client

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • PROJECT: gcloud config get-value project๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • SERVICE_ACCOUNT_EMAIL: ์„œ๋น„์Šค ๊ณ„์ •๊ณผ ์—ฐ๊ฒฐ๋œ ์ด๋ฉ”์ผ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์„œ๋น„์Šค ๋ฉ”์‹œ์—์„œ ํ”„๋ก์‹œ๋ฆฌ์Šค gRPC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค์ •ํ•˜๋Š” ๋‹ค์Œ ์ „์ฒด ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

  1. gRPC ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ตœ์‹  ํŒจ์น˜๊ฐ€ ์ ์šฉ๋œ ์ตœ์‹  ๋ฒ„์ „์˜ gRPC๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  2. ์ฑ„๋„์„ ๋งŒ๋“ค๊ณ  Cloud Service Mesh ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํŒŒ์ผ์„ ์ง€์ •ํ•  ๋•Œ ํด๋ผ์ด์–ธํŠธ์˜ gRPC ์ด๋ฆ„ ๋ฆฌ์กธ๋ฒ„ ์Šคํ‚ด์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  3. Cloud Service Mesh ๋ฐ Cloud Load Balancing ๋ฆฌ์†Œ์Šค๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์„œ์—์„œ๋Š” ์ฒ˜์Œ ๋‘ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 3๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์„ฑ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐฐํฌ์— Compute Engine VM์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋˜๋Š”GKE ๋„คํŠธ์›Œํฌ ์—”๋“œํฌ์ธํŠธ ๊ทธ๋ฃน(NEG)์„ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” gRPC ๋ฒ„์ „ ๋ฐ ์–ธ์–ด

gRPC๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ด๋ฉฐ ์ถœ์‹œ ๋ฒ„์ „ ์ง€์›์€ gRPC FAQ์—์„œ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค. ์•Œ๋ ค์ง„ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์‹  gRPC ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Cloud Service Mesh์—์„œ ์ง€์›ํ•˜๋Š” ์ตœ์‹  ๊ธฐ๋Šฅ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. gRPC์˜ ๋‹ค์–‘ํ•œ ๊ตฌํ˜„ ๋ฐ ๋ฒ„์ „์—์„œ ์ง€์›๋˜๋Š” ์„œ๋น„์Šค ๋ฉ”์‹œ ๊ธฐ๋Šฅ์ด GitHub์— ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค. Cloud Service Mesh ๋ฐ ํ”„๋ก์‹œ๋ฆฌ์Šค gRPC ์„œ๋น„์Šค์—์„œ ์ง€์›ํ•˜๋Š” gRPC ์–ธ์–ด ๋ฐ ๊ธฐ๋Šฅ์€ Cloud Service Mesh ๊ธฐ๋Šฅ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

Cloud Service Mesh๋Š”Google Cloud Platform ์„œ๋น„์Šค ์•ฝ๊ด€์— ๋”ฐ๋ผ gRPC์˜ ํ˜„์žฌ ๋ฐ ์ง€์›๋˜๋Š” ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  1๋…„ ๋ฏธ๋งŒ์˜ gRPC ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋„๋ก ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

gRPC ํด๋ผ์ด์–ธํŠธ ์—…๋ฐ์ดํŠธ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ gRPC ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด์ „ ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

xDS ์ด๋ฆ„ ๋ฆฌ์กธ๋ฒ„๋ฅผ gRPC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ข…์† ํ•ญ๋ชฉ์œผ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Java ๋ฐ Go์˜ ์–ธ์–ด๋ณ„ ์š”๊ตฌ์‚ฌํ•ญ์€ ๋‹ค์Œ ์„น์…˜์— ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด์—๋Š” ์ถ”๊ฐ€์ ์ธ ์š”๊ตฌ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ž๋ฐ” ์š”๊ตฌ์‚ฌํ•ญ

์ž๋ฐ”์—์„œ Gradle์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ grpc-xds ์ข…์† ํ•ญ๋ชฉ์„ build.gradle ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. LATEST_GRPC_VERSION์„ gRPC์˜ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

dependencies {
  runtimeOnly 'io.grpc:grpc-xds:LATEST_GRPC_VERSION'
}

Maven์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ pom.xml์˜ <dependencies> ์„น์…˜์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. LATEST_GRPC_VERSION์„ gRPC์˜ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    <dependency>
      <groupId>io.grpc</groupId>
      <artifactId>grpc-xds</artifactId>
      <version>LATEST_GRPC_VERSION</version>
      <scope>runtime</scope>
    </dependency>

Go ์š”๊ตฌ์‚ฌํ•ญ

Go๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ xds Go ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

xds๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก gRPC ์ด๋ฆ„ ๋ฆฌ์กธ๋ฒ„ ์„ค์ •

DNS๋‚˜ ๋‹ค๋ฅธ ๋ฆฌ์กธ๋ฒ„ ์Šคํ‚ค๋งˆ๊ฐ€ ์•„๋‹Œ ๋Œ€์ƒ URI์—์„œ xds ์ด๋ฆ„ ๋ณ€ํ™˜ ์Šคํ‚ด์„ ์‚ฌ์šฉํ•˜๋„๋ก gRPC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด gRPC ์ฑ„๋„์„ ๋งŒ๋“ค ๋•Œ ๋Œ€์ƒ ์ด๋ฆ„์— xds:/// ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. gRPC ํด๋ผ์ด์–ธํŠธ์˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ์€ ์ฑ„๋„ ๋‹จ์œ„๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

Cloud Service Mesh ๊ตฌ์„ฑ์—์„œ ๋Œ€์ƒ URI์— ์‚ฌ์šฉ๋˜๋Š” ์„œ๋น„์Šค ์ด๋ฆ„์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Java์—์„œ๋Š” ์„œ๋น„์Šค ์ด๋ฆ„์ด helloworld์ธ ์ด ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฑ„๋„์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

ManagedChannelBuilder.forTarget("xds:///helloworld[:PORT_NUMBER]")

๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ ๋ฐ ๊ตฌ์„ฑ

xds ๋ฆฌ์กธ๋ฒ„ ์Šคํ‚ด์€ gRPC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— Cloud Service Mesh์— ์—ฐ๊ฒฐํ•˜์—ฌ ๋Œ€์ƒ ์„œ๋น„์Šค์˜ ๊ตฌ์„ฑ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์„ธ์š”.

  • ๋‹ค์Œ ์ƒ˜ํ”Œ์—์„œ์™€ ๊ฐ™์ด ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ gRPC์— xDS ์„œ๋ฒ„(Cloud Service Mesh)์— ์—ฐ๊ฒฐํ•˜์—ฌ ํŠน์ • ์„œ๋น„์Šค์˜ ๊ตฌ์„ฑ์„ ๊ฐ€์ ธ์˜ค๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํŒŒ์ผ ์ด๋ฆ„์„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” GRPC_XDS_BOOTSTRAP์ด๋ผ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์„ค์ • ์•ˆ๋‚ด์—๋Š” ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์‹œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŽธ์˜๋ฅผ ์œ„ํ•ด ์ตœ์‹  ๋ฒ„์ „์˜ Cloud Service Mesh gRPC ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์ƒ์„ฑ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cloud Service Mesh์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ๋“ค์–ด ์žˆ๋Š” ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํŒŒ์ผ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•จ๊ป˜ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ˜ํ”Œ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
  "xds_servers": [
    {
      "server_uri": "trafficdirector.googleapis.com:443",
      "channel_creds": [
        {
          "type": "google_default"
        }
      ],
      "server_features": ["xds_v3"]
    }
  ],
  "node": {
    "id": "projects/123456789012/networks/default/nodes/b7f9c818-fb46-43ca-8662-d3bdbcf7ec18",
    "metadata": {
      "TRAFFICDIRECTOR_NETWORK_NAME": "default"
    },
    "locality": {
      "zone": "us-central1-a"
    }
  }
}

๋‹ค์Œ ํ‘œ์—์„œ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํŒŒ์ผ์˜ ํ•„๋“œ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

ํ•„๋“œ ๊ฐ’ ๋ฐ ์„ค๋ช…
xds_servers xDS ์„œ๋ฒ„ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. gRPC๋Š” ๋ชฉ๋ก์˜ ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
server_uri 1๊ฐœ ์ด์ƒ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. gRPC๋Š” xds_servers ๋ชฉ๋ก์˜ ์ฒซ ๋ฒˆ์งธ xDS ์„œ๋ฒ„์—๋งŒ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ trafficdirector.googleapis.com:443์ž…๋‹ˆ๋‹ค.
channel_creds xDS ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•  ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด์ž…๋‹ˆ๋‹ค.
type google_default ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด ์ž‘๋™ ๋ฐฉ์‹์„ ์ฐธ์กฐํ•˜์„ธ์š”.
server_features xDS v3 ์ง€์›๊ณผ ๊ฐ™์€ ์„œ๋ฒ„์—์„œ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
node xDS ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์ •๋ณด์ž…๋‹ˆ๋‹ค.
id

id๋Š” ์ด์ „ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ๋‹ค์Œ ํ˜•์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

projects/PROJECT_NUMBER/networks/NETWORK_NAME/nodes/ID

ID ๊ฐ’์œผ๋กœ ๊ณ ์œ  ๋ฌธ์ž์—ด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Cloud Service Mesh์— ์—ฐ๊ฒฐ๋˜๋Š” gRPC ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

metadata xDS ์„œ๋ฒ„ ๊ด€๋ จ ์ •๋ณด์ž…๋‹ˆ๋‹ค.
TRAFFICDIRECTOR_NETWORK_NAME ํ•„๋“œ๊ฐ€ ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ ์ง€์ •๋˜์ง€ ์•Š์œผ๋ฉด ๊ฐ’์ด default๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
locality gRPC ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” Google Cloud ์˜์—ญ์ž…๋‹ˆ๋‹ค.

์„ค์ • ํ”„๋กœ์„ธ์Šค ๊ณ„์†ํ•˜๊ธฐ

์ด ๋ฌธ์„œ์— ์„ค๋ช…๋œ ๊ธฐ๋ณธ ์š”๊ฑด์„ ์™„๋ฃŒํ•œ ํ›„ ๋‹ค์Œ ๋ฌธ์„œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.