VM ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน ๋ฐฑ์—”๋“œ๊ฐ€ ์žˆ๋Š” ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ์„ค์ •

์ด ๋ฌธ์„œ์—์„œ๋Š” Compute Engine VM์—์„œ ์‹คํ–‰๋˜๋Š” ์„œ๋น„์Šค์˜ ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ๋ฆฌ์ „์— ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋Š” ์ฃผ๋กœ ๊ด€ํ• ๊ถŒ ๊ทœ์ • ์ค€์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ๋Š” ์›Œํฌ๋กœ๋“œ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋Š” ํ”„๋ฆฌ๋ฏธ์—„ ๋ฐ ํ‘œ์ค€ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค ๋“ฑ๊ธ‰์„ ์ง€์›ํ•˜๋ฏ€๋กœ ํ‘œ์ค€ ๋„คํŠธ์›Œํฌ ๋“ฑ๊ธ‰ ์ด๊ทธ๋ ˆ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ํ•„์š”ํ•œ ์›Œํฌ๋กœ๋“œ ๋˜ํ•œ ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ ์‚ฌํ•ญ์„ ์ˆ™์ง€ํ•˜์„ธ์š”.

๊ถŒํ•œ

์ด ๊ฐ€์ด๋“œ๋ฅผ ์ง„ํ–‰ํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๋„คํŠธ์›Œํฌ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ ์†Œ์œ ์ž ๋˜๋Š” ํŽธ์ง‘์ž์ด๊ฑฐ๋‚˜ ๋‹ค์Œ Compute Engine IAM ์—ญํ• ์„ ๋ชจ๋‘ ๋ณด์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—… ํ•„์š”ํ•œ ์—ญํ• 
๋„คํŠธ์›Œํฌ, ์„œ๋ธŒ๋„ท, ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ๊ตฌ์„ฑ์š”์†Œ ๋งŒ๋“ค๊ธฐ ๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ์ž
๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ ๋ณด์•ˆ ๊ด€๋ฆฌ์ž
์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ ์ธ์Šคํ„ด์Šค ๊ด€๋ฆฌ์ž

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์„ค์ • ๊ฐœ์š”

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋Œ€๋žต์ ์ธ ๊ตฌ์„ฑ ํ๋ฆ„์˜ ์„ค๋ช…์— ๋”ฐ๋ผ ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ง„ ๋‹จ๊ณ„๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ง„ ๊ตฌ์„ฑ์š”์†Œ
๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ง„ ๊ตฌ์„ฑ์š”์†Œ(ํ™•๋Œ€ํ•˜๋ ค๋ฉด ํด๋ฆญ)

๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์ด ์˜ˆ์‹œ์—์„œ๋Š” ํ•˜๋‚˜์˜ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์™€ ๋‘ ๊ฐœ์˜ ๋ฐฑ์—”๋“œ ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์ด ์žˆ๋Š” us-west1 ๋ฆฌ์ „์˜ VPC ๋„คํŠธ์›Œํฌ์— ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋‹ค์ด์–ด๊ทธ๋žจ์— ํ‘œ์‹œ๋œ ํ•ญ๋ชฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋‘ ๊ฐœ์˜ ์„œ๋ธŒ๋„ท์ด ์žˆ๋Š” VPC ๋„คํŠธ์›Œํฌ:

    1. ์„œ๋ธŒ๋„ท ํ•˜๋‚˜๋Š” ๋ฐฑ์—”๋“œ(์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน)์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ IP ์ฃผ์†Œ ๋ฒ”์œ„๋Š” 10.1.2.0/24์ž…๋‹ˆ๋‹ค.

    2. ๋‹ค๋ฅธ ์„œ๋ธŒ๋„ท์€ us-west1 ๋ฆฌ์ „์˜ ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์ž…๋‹ˆ๋‹ค. ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” VPC ๋„คํŠธ์›Œํฌ์˜ ๊ฐ ๋ฆฌ์ „์— ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฆฌ์ „์˜ ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์€ ํ•ด๋‹น ๋ฆฌ์ „์˜ ๋ชจ๋“  ๋ฆฌ์ „ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ๊ฐ„์— ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค. ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์—์„œ ์„œ๋น„์Šค์˜ ๋ฐฑ์—”๋“œ๋กœ ๋ณด๋‚ธ ํŒจํ‚ท์˜ ์†Œ์Šค ์ฃผ์†Œ๋Š” ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์—์„œ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ ๋ฆฌ์ „์˜ ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์˜ ๊ธฐ๋ณธ IP ์ฃผ์†Œ ๋ฒ”์œ„๋Š” ๊ถŒ์žฅ ์„œ๋ธŒ๋„ท ํฌ๊ธฐ์ธ 10.129.0.0/23์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  2. ๋„คํŠธ์›Œํฌ์—์„œ ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„์„ ํ—ˆ์šฉํ•˜๋Š” ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์ž…๋‹ˆ๋‹ค. ์ฆ‰, 10.129.0.0/23(์ด ์˜ˆ์‹œ์—์„œ ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท ๋ฒ”์œ„)์˜ TCP ํฌํŠธ 80, 443, 8080 ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๋Š” ํ•˜๋‚˜์˜ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ ์ ๊ฒ€ ํ”„๋กœ๋ธŒ์˜ ๋˜ ๋‹ค๋ฅธ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์ž…๋‹ˆ๋‹ค.

  3. ๋ฐฑ์—”๋“œ ์ธ์Šคํ„ด์Šค.

  4. ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน:

    1. Compute Engine VM ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๊ด€๋ฆฌํ˜• ๋˜๋Š” ๋น„๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน
    2. GKE ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ NEG

    ๊ฐ ์˜์—ญ์—์„œ ๋ฐฐํฌ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๋ฐฑ์—”๋“œ ๊ทธ๋ฃน ์œ ํ˜•์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  5. ๋ฐฑ์—”๋“œ ์ค€๋น„ ์ƒํƒœ๋ฅผ ๋ณด๊ณ ํ•˜๋Š” ๋ฆฌ์ „๋ณ„ ์ƒํƒœ ์ ๊ฒ€์ž…๋‹ˆ๋‹ค.

  6. ๋ฐฑ์—”๋“œ์˜ ์‚ฌ์šฉ ๋ฐ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋ฆฌ์ „๋ณ„ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

  7. ๋ฆฌ์ „๋ณ„ URL ๋งต์€ ์š”์ฒญ์˜ URL์„ ํŒŒ์‹ฑํ•˜๊ณ  ์š”์ฒญ URL์˜ ํ˜ธ์ŠคํŠธ์™€ ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ํŠน์ • ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

  8. ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜์—ฌ URL ๋งต์— ์ „๋‹ฌํ•˜๋Š” ๋ฆฌ์ „๋ณ„ ๋Œ€์ƒ HTTP ๋˜๋Š” HTTPS ํ”„๋ก์‹œ์ž…๋‹ˆ๋‹ค. HTTPS์˜ ๊ฒฝ์šฐ ๋ฆฌ์ „๋ณ„ SSL ์ธ์ฆ์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. HTTPS ๋ถ€ํ•˜ ๋ถ„์‚ฐ์„ ๊ตฌ์„ฑํ•  ๊ฒฝ์šฐ ๋Œ€์ƒ ํ”„๋ก์‹œ๊ฐ€ SSL ์ธ์ฆ์„œ ๋˜๋Š” ์ธ์ฆ์„œ ๊ด€๋ฆฌ์ž ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SSL ํŠธ๋ž˜ํ”ฝ์„ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์ƒ ํ”„๋ก์‹œ๋Š” HTTP๋‚˜ HTTPS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ์ธ์Šคํ„ด์Šค์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  9. ๊ฐ ์ˆ˜์‹  ์š”์ฒญ์„ ๋Œ€์ƒ ํ”„๋ก์‹œ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ์™ธ๋ถ€ IP ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„ ์ „๋‹ฌ ๊ทœ์น™์ž…๋‹ˆ๋‹ค.

    ์ „๋‹ฌ ๊ทœ์น™๊ณผ ์—ฐ๊ฒฐ๋œ ์™ธ๋ถ€ IP ์ฃผ์†Œ๋Š” ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ IP ์ฃผ์†Œ ์˜ˆ์•ฝ์˜ ์„ค๋ช…๋Œ€๋กœ gcloud compute addresses create ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์˜ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ๋ฐ ์„œ๋ธŒ๋„ท ๊ตฌ์„ฑ

๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•œ ์„œ๋ธŒ๋„ท ํ•œ ๊ฐœ์™€ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ํ”„๋ก์‹œ๋ฅผ ์œ„ํ•œ ์„œ๋ธŒ๋„ท ํ•œ ๊ฐœ, ์ด ๋‘ ๊ฐœ ์„œ๋ธŒ๋„ท์ด ์žˆ๋Š” VPC ๋„คํŠธ์›Œํฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋Š” ๋ฆฌ์ „์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํŠธ๋ž˜ํ”ฝ ์†Œ์Šค๊ฐ€ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์™€ ๋™์ผํ•œ ๋ฆฌ์ „์˜ ์„œ๋ธŒ๋„ท์— ์žˆ๋Š” ๊ฒฝ์šฐ VPC ๋„คํŠธ์›Œํฌ ๋‚ด์˜ ํŠธ๋ž˜ํ”ฝ์ด ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋กœ ๋ผ์šฐํŒ…๋ฉ๋‹ˆ๋‹ค.

์ด ์˜ˆ์‹œ์—์„œ๋Š” ๋‹ค์Œ VPC ๋„คํŠธ์›Œํฌ, ๋ฆฌ์ „ ๋ฐ ์„œ๋ธŒ๋„ท์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋„คํŠธ์›Œํฌ. ๋„คํŠธ์›Œํฌ๋Š” ์ปค์Šคํ…€ ๋ชจ๋“œ VPC ๋„คํŠธ์›Œํฌ์ด๋ฉฐ ์ด๋ฆ„์€ lb-network์ž…๋‹ˆ๋‹ค.

  • ๋ฐฑ์—”๋“œ ์„œ๋ธŒ๋„ท. us-west1 ๋ฆฌ์ „์— ์žˆ๋Š” backend-subnet์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์„œ๋ธŒ๋„ท์€ ๊ธฐ๋ณธ IP ๋ฒ”์œ„๋กœ 10.1.2.0/24๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ํ”„๋ก์‹œ ์„œ๋ธŒ๋„ท. us-west1 ๋ฆฌ์ „์— ์žˆ๋Š” proxy-only-subnet์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์„œ๋ธŒ๋„ท์€ ๊ธฐ๋ณธ IP ๋ฒ”์œ„๋กœ 10.129.0.0/23์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฐฑ์—”๋“œ ๋„คํŠธ์›Œํฌ ๋ฐ ์„œ๋ธŒ๋„ท ๊ตฌ์„ฑ

์ฝ˜์†”

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

    VPC ๋„คํŠธ์›Œํฌ๋กœ ์ด๋™

  2. VPC ๋„คํŠธ์›Œํฌ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ์ด๋ฆ„์— lb-network๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  4. ์„œ๋ธŒ๋„ท ์„น์…˜์—์„œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    • ์„œ๋ธŒ๋„ท ์ƒ์„ฑ ๋ชจ๋“œ๋ฅผ ์ปค์Šคํ…€์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์ƒˆ ์„œ๋ธŒ๋„ท ์„น์…˜์— ๋‹ค์Œ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
      • ์ด๋ฆ„: backend-subnet
      • ๋ฆฌ์ „: us-west1
      • IP ์ฃผ์†Œ ๋ฒ”์œ„: 10.1.2.0/24
    • ์™„๋ฃŒ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  5. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

  1. gcloud compute networks create ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค์Šคํ…€ VPC ๋„คํŠธ์›Œํฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. gcloud compute networks subnets create ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ us-west1 ๋ฆฌ์ „์˜ lb-network ๋„คํŠธ์›Œํฌ์— ์„œ๋ธŒ๋„ท์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    gcloud compute networks subnets create backend-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

Terraform

VPC ๋„คํŠธ์›Œํฌ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด google_compute_network ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_compute_network" "default" {
  name                    = "lb-network"
  auto_create_subnetworks = false
  routing_mode            = "REGIONAL"
}

lb-network ๋„คํŠธ์›Œํฌ์— VPC ์„œ๋ธŒ๋„ท์„ ๋งŒ๋“ค๋ ค๋ฉด google_compute_subnetwork ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_compute_subnetwork" "default" {
  name                       = "backend-subnet"
  ip_cidr_range              = "10.1.2.0/24"
  network                    = google_compute_network.default.id
  private_ipv6_google_access = "DISABLE_GOOGLE_ACCESS"
  purpose                    = "PRIVATE"
  region                     = "us-west1"
  stack_type                 = "IPV4_ONLY"
}

API

  1. networks.insert ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด POST ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ PROJECT_ID๋Š” ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
    {
     "routingConfig": {
       "routingMode": "REGIONAL"
     },
     "name": "lb-network",
     "autoCreateSubnetworks": false
    }
    
  2. subnetworks.insert ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด POST ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ PROJECT_ID๋Š” ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks
    {
     "name": "backend-subnet",
     "network": "projects/PROJECT_ID/global/networks/lb-network",
     "ipCidrRange": "10.1.2.0/24",
     "region": "projects/PROJECT_ID/regions/us-west1",
    }
    

ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท ๊ตฌ์„ฑ

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

์ด ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์€ lb-network VPC ๋„คํŠธ์›Œํฌ์˜ ๋™์ผํ•œ ๋ฆฌ์ „์— ์žˆ๋Š” ๋ชจ๋“  Envoy ๊ธฐ๋ฐ˜ ๋ฆฌ์ „ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ๋‹น ๋ฆฌ์ „๋ณ„ ํ™œ์„ฑ ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์€ ํ•˜๋‚˜๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜์†”

๋˜ํ•œ Google Cloud ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋‚˜์ค‘์— ๋ถ€ํ•˜ ๋ถ„์‚ฐ ํŽ˜์ด์ง€์—์„œ ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

    VPC ๋„คํŠธ์›Œํฌ๋กœ ์ด๋™

  2. VPC ๋„คํŠธ์›Œํฌ์˜ ์ด๋ฆ„(lb-network)์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ์„œ๋ธŒ๋„ท ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. ์ด๋ฆ„์— proxy-only-subnet๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  5. ๋ฆฌ์ „์—์„œ us-west1์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  6. ์šฉ๋„๋ฅผ ๋ฆฌ์ „๋ณ„ ๊ด€๋ฆฌํ˜• ํ”„๋ก์‹œ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  7. IP ์ฃผ์†Œ ๋ฒ”์œ„์— 10.129.0.0/23์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  8. ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

gcloud compute networks subnets create ๋ช…๋ น์–ด๋กœ ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

gcloud compute networks subnets create proxy-only-subnet \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=us-west1 \
  --network=lb-network \
  --range=10.129.0.0/23

Terraform

lb-network ๋„คํŠธ์›Œํฌ์— VPC ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์„ ๋งŒ๋“ค๋ ค๋ฉด google_compute_subnetwork ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_compute_subnetwork" "proxy_only" {
  name          = "proxy-only-subnet"
  ip_cidr_range = "10.129.0.0/23"
  network       = google_compute_network.default.id
  purpose       = "REGIONAL_MANAGED_PROXY"
  region        = "us-west1"
  role          = "ACTIVE"
}

API

subnetworks.insert ๋ฉ”์„œ๋“œ๋กœ ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ PROJECT_ID๋Š” ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks
{
  "name": "proxy-only-subnet",
  "ipCidrRange": "10.129.0.0/23",
  "network": "projects/PROJECT_ID/global/networks/lb-network",
  "region": "projects/PROJECT_ID/regions/us-west1",
  "purpose": "REGIONAL_MANAGED_PROXY",
  "role": "ACTIVE"
}

๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ๊ตฌ์„ฑ

์ด ์˜ˆ์‹œ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • fw-allow-health-check. ๋ถ€ํ•˜ ๋ถ„์‚ฐ๋˜๋Š” ์ธ์Šคํ„ด์Šค์— ์ ์šฉ๋˜๋Š” ์ธ๊ทธ๋ ˆ์Šค ๊ทœ์น™์œผ๋กœ Google Cloud์ƒํƒœ ์ ๊ฒ€ ์‹œ์Šคํ…œ(130.211.0.0/22 ๋ฐ 35.191.0.0/16 ์ฐธ์กฐ)์˜ ๋ชจ๋“  TCP ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ๋Š” load-balanced-backend ๋Œ€์ƒ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์ด ์ ์šฉ๋˜๋Š” VM์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

  • fw-allow-proxies: ๋ถ€ํ•˜ ๋ถ„์‚ฐ๋˜๋Š” ์ธ์Šคํ„ด์Šค์— ์ ์šฉ๋˜๋Š” ์ธ๊ทธ๋ ˆ์Šค ๊ทœ์น™์œผ๋กœ ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ๊ด€๋ฆฌํ˜• ํ”„๋ก์‹œ๋กœ๋ถ€ํ„ฐ ํฌํŠธ 80, 443, 8080๋กœ์˜ TCP ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ๋Š” ๋Œ€์ƒ ํƒœ๊ทธ load-balanced-backend๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์ด ์ ์šฉ๋˜๋Š” VM์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์ด ์—†์œผ๋ฉด ๊ธฐ๋ณธ ๊ฑฐ๋ถ€ ์ธ๊ทธ๋ ˆ์Šค ๊ทœ์น™์€ ๋ฐฑ์—”๋“œ ์ธ์Šคํ„ด์Šค๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ํƒœ๊ทธ๋Š” ๋ฐฑ์—”๋“œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์ƒ ํƒœ๊ทธ๊ฐ€ ์—†์œผ๋ฉด VPC ๋„คํŠธ์›Œํฌ์˜ ๋ชจ๋“  ๋ฐฑ์—”๋“œ ์ธ์Šคํ„ด์Šค์— ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ VM์„ ๋งŒ๋“ค ๋•Œ๋Š” ๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน ๋งŒ๋“ค๊ธฐ์— ๋‚˜์˜จ ๋Œ€๋กœ ์ง€์ •๋œ ๋Œ€์ƒ ํƒœ๊ทธ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ ๋ฐฉํ™”๋ฒฝ ์ •์ฑ… ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์œผ๋กœ ์ด๋™

  2. ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•˜์—ฌGoogle Cloud ์ƒํƒœ ์ ๊ฒ€์„ ํ—ˆ์šฉํ•˜๋Š” ๊ทœ์น™์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    • ์ด๋ฆ„: fw-allow-health-check
    • ๋„คํŠธ์›Œํฌ: lb-network
    • ํŠธ๋ž˜ํ”ฝ ๋ฐฉํ–ฅ: ์ธ๊ทธ๋ ˆ์Šค
    • ์ผ์น˜ ์‹œ ์ž‘์—…: ํ—ˆ์šฉ
    • ๋Œ€์ƒ: ์ง€์ •๋œ ๋Œ€์ƒ ํƒœ๊ทธ
    • ๋Œ€์ƒ ํƒœ๊ทธ: load-balanced-backend
    • ์†Œ์Šค ํ•„ํ„ฐ: IPv4 ๋ฒ”์œ„
    • ์†Œ์Šค IPv4 ๋ฒ”์œ„: 130.211.0.0/22 ๋ฐ 35.191.0.0/16
    • ํ”„๋กœํ† ์ฝœ ๋ฐ ํฌํŠธ:
      • ์ง€์ •๋œ ํ”„๋กœํ† ์ฝœ ๋ฐ ํฌํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
      • TCP ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์„ ํƒํ•œ ํ›„ ํฌํŠธ ๋ฒˆํ˜ธ์— 80์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
        ๊ถŒ์žฅ์‚ฌํ•ญ์— ๋”ฐ๋ผ์„œ ์ƒํƒœ ํ™•์ธ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ๊ณผ ์ผ์น˜ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ ๋ฐ ํฌํŠธ๋กœ ์ด๋Ÿฌํ•œ ๊ทœ์น™์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ ๋ฐ ํฌํŠธ์— tcp:80์„ ์‚ฌ์šฉํ•˜๋ฉด Google Cloud ๊ฐ€ ํฌํŠธ 80์—์„œ HTTP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ VM์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํฌํŠธ 443์—์„œ HTTPS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  3. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ๋ฐฑ์—”๋“œ์— ์—ฐ๊ฒฐํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๊ทœ์น™์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    • ์ด๋ฆ„: fw-allow-proxies
    • ๋„คํŠธ์›Œํฌ: lb-network
    • ํŠธ๋ž˜ํ”ฝ ๋ฐฉํ–ฅ: ์ธ๊ทธ๋ ˆ์Šค
    • ์ผ์น˜ ์‹œ ์ž‘์—…: ํ—ˆ์šฉ
    • ๋Œ€์ƒ: ์ง€์ •๋œ ๋Œ€์ƒ ํƒœ๊ทธ
    • ๋Œ€์ƒ ํƒœ๊ทธ: load-balanced-backend
    • ์†Œ์Šค ํ•„ํ„ฐ: IPv4 ๋ฒ”์œ„
    • ์†Œ์Šค IPv4 ๋ฒ”์œ„: 10.129.0.0/23
    • ํ”„๋กœํ† ์ฝœ ๋ฐ ํฌํŠธ:
      • ์ง€์ •๋œ ํ”„๋กœํ† ์ฝœ ๋ฐ ํฌํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
      • TCP ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ ํฌํŠธ ๋ฒˆํ˜ธ๋กœ 80, 443, 8080์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  5. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

  1. Google Cloud์ƒํƒœ ํ™•์ธ์„ ํ—ˆ์šฉํ•˜๋Š” fw-allow-health-check ๊ทœ์น™์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ๋Š” ์ƒํƒœ ํ™•์ธ ํ”„๋กœ๋ฒ„์˜ ๋ชจ๋“  TCP ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•„์š”์— ๋”ฐ๋ผ ๋” ์ข์€ ํฌํŠธ ์ง‘ํ•ฉ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --target-tags=load-balanced-backend \
        --rules=tcp
    
  2. ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ํ”„๋ก์‹œ๋ฅผ ๋ฐฑ์—”๋“œ์— ์—ฐ๊ฒฐํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” fw-allow-proxies ๊ทœ์น™์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. source-ranges๋ฅผ ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์˜ ํ• ๋‹น๋œ ๋ฒ”์œ„๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ์‹œ: 10.129.0.0/23).

    gcloud compute firewall-rules create fw-allow-proxies \
      --network=lb-network \
      --action=allow \
      --direction=ingress \
      --source-ranges=source-range \
      --target-tags=load-balanced-backend \
      --rules=tcp:80,tcp:443,tcp:8080
    

Terraform

๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ๋งŒ๋“ค๋ ค๋ฉด google_compute_firewall ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_compute_firewall" "default" {
  name = "fw-allow-health-check"
  allow {
    protocol = "tcp"
  }
  direction     = "INGRESS"
  network       = google_compute_network.default.id
  priority      = 1000
  source_ranges = ["130.211.0.0/22", "35.191.0.0/16"]
  target_tags   = ["load-balanced-backend"]
}
resource "google_compute_firewall" "allow_proxy" {
  name = "fw-allow-proxies"
  allow {
    ports    = ["443"]
    protocol = "tcp"
  }
  allow {
    ports    = ["80"]
    protocol = "tcp"
  }
  allow {
    ports    = ["8080"]
    protocol = "tcp"
  }
  direction     = "INGRESS"
  network       = google_compute_network.default.id
  priority      = 1000
  source_ranges = ["10.129.0.0/23"]
  target_tags   = ["load-balanced-backend"]
}

API

firewalls.insert ๋ฉ”์„œ๋“œ์— POST ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ fw-allow-health-check ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ PROJECT_ID๋Š” ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
{
  "name": "fw-allow-health-check",
  "network": "projects/PROJECT-ID/global/networks/lb-network",
  "sourceRanges": [
    "130.211.0.0/22",
    "35.191.0.0/16"
  ],
  "targetTags": [
    "load-balanced-backend"
  ],
  "allowed": [
    {
      "IPProtocol": "tcp"
    }
  ],
  "direction": "INGRESS"
}

firewalls.insert ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ํ”„๋ก์‹œ ์„œ๋ธŒ๋„ท ๋‚ด์—์„œ TCP ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๋„๋ก fw-allow-proxies ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ PROJECT_ID๋Š” ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
{
  "name": "fw-allow-proxies",
  "network": "projects/PROJECT_ID/global/networks/lb-network",
  "sourceRanges": [
    "10.129.0.0/23"
  ],
  "targetTags": [
    "load-balanced-backend"
  ],
  "allowed": [
    {
      "IPProtocol": "tcp",
      "ports": [
        "80"
      ]
    },
    {
      "IPProtocol": "tcp",
      "ports": [
        "443"
      ]
    },
    {
      "IPProtocol": "tcp",
      "ports": [
        "8080"
      ]
    }
  ],
  "direction": "INGRESS"
}

VM ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค๋กœ ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ๊ตฌ์„ฑ

์ด ์„น์…˜์—์„œ๋Š” Compute Engine VM์—์„œ ์‹คํ–‰๋˜๋Š” ์„œ๋น„์Šค์— ํ•„์š”ํ•œ ๊ตฌ์„ฑ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ VM์€ ์ „๋‹ฌ ๊ทœ์น™์— ๊ตฌ์„ฑ๋œ IP ์ฃผ์†Œ์™€ ํฌํŠธ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด IP ์ฃผ์†Œ ๋ฐ ํฌํŠธ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „์†กํ•  ๋•Œ ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ URL ๋งต์— ๋”ฐ๋ผ ์š”์ฒญ์ด ๋ฐฑ์—”๋“œ ๊ฐ€์ƒ ๋จธ์‹ (VM)์œผ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€์˜ ์˜ˆ์‹œ์—์„œ๋Š” ์ž„์‹œ ์™ธ๋ถ€ IP ์ฃผ์†Œ ํ• ๋‹น์„ ํ—ˆ์šฉํ•˜๋Š” ๋Œ€์‹  ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ์ „๋‹ฌ ๊ทœ์น™์— ์˜ˆ์•ฝ๋œ ์™ธ๋ถ€ IP ์ฃผ์†Œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ถŒ์žฅ์‚ฌํ•ญ์— ๋”ฐ๋ผ์„œ ์ „๋‹ฌ ๊ทœ์น™์— IP ์ฃผ์†Œ๋ฅผ ์˜ˆ์•ฝํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน ๋ฐฑ์—”๋“œ ๋งŒ๋“ค๊ธฐ

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

์ฝ˜์†”

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

    ์ธ์Šคํ„ด์Šค ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ด๋™

    1. ์ธ์Šคํ„ด์Šค ํ…œํ”Œ๋ฆฟ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    2. ์ด๋ฆ„์— l7-xlb-backend-template๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    3. ๋ถ€ํŒ… ๋””์Šคํฌ๊ฐ€ Debian GNU/Linux 12(bookworm)์™€ ๊ฐ™์€ Debian ์ด๋ฏธ์ง€๋กœ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ์•ˆ๋‚ด์—์„œ๋Š” apt-get์ฒ˜๋Ÿผ Debian์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    4. ๊ณ ๊ธ‰ ์˜ต์…˜์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    5. ๋„คํŠธ์›Œํ‚น์„ ํด๋ฆญํ•˜๊ณ  ๋‹ค์Œ ํ•„๋“œ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
      1. ๋„คํŠธ์›Œํฌ ํƒœ๊ทธ์— load-balanced-backend๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
      2. ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค์— ๋‹ค์Œ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
        • ๋„คํŠธ์›Œํฌ: lb-network
        • ์„œ๋ธŒ๋„ท: backend-subnet
    6. ๊ด€๋ฆฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์‹œ์ž‘ ์Šคํฌ๋ฆฝํŠธ ํ•„๋“œ์— ๋‹ค์Œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
    7. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Google Cloud ์ฝ˜์†”์—์„œ ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์œผ๋กœ ์ด๋™

    1. ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    2. ์ƒˆ ๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน(์Šคํ…Œ์ดํŠธ๋ฆฌ์Šค(Stateless))์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์Šคํ…Œ์ดํŠธ๋ฆฌ์Šค(Stateless) ๋˜๋Š” ์Šคํ…Œ์ดํŠธํ’€(Stateful) MIG๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
    3. ์ด๋ฆ„์— l7-xlb-backend-example๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    4. ์œ„์น˜์—์„œ ๋‹จ์ผ ์˜์—ญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    5. ๋ฆฌ์ „์—์„œ us-west1์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    6. ์˜์—ญ์—์„œ us-west1-a๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    7. ์ธ์Šคํ„ด์Šค ํ…œํ”Œ๋ฆฟ์—์„œ l7-xlb-backend-template์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    8. ์ž๋™ ํ™•์žฅ ๋ชจ๋“œ์—์„œ ์‚ฌ์šฉ: ๊ทธ๋ฃน์— ์ธ์Šคํ„ด์Šค ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

      ์ตœ์†Œ ์ธ์Šคํ„ด์Šค ์ˆ˜๋ฅผ 2๋กœ, ์ตœ๋Œ€ ์ธ์Šคํ„ด์Šค ์ˆ˜๋ฅผ 2 ์ด์ƒ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    9. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

์ด ๊ฐ€์ด๋“œ์˜ gcloud ์•ˆ๋‚ด์—์„œ๋Š” Cloud Shell ๋˜๋Š” bash๊ฐ€ ์„ค์น˜๋œ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

  1. gcloud compute instance-templates create ๋ช…๋ น์–ด๋กœ HTTP ์„œ๋ฒ„๊ฐ€ ํฌํ•จ๋œ VM ์ธ์Šคํ„ด์Šค ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    gcloud compute instance-templates create l7-xlb-backend-template \
    --region=us-west1 \
    --network=lb-network \
    --subnet=backend-subnet \
    --tags=load-balanced-backend \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'
    
  2. gcloud compute instance-groups managed create ๋ช…๋ น์–ด๋กœ ์˜์—ญ์— ๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    gcloud compute instance-groups managed create l7-xlb-backend-example \
        --zone=us-west1-a \
        --size=2 \
        --template=l7-xlb-backend-template
    

Terraform

์ธ์Šคํ„ด์Šค ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค๋ ค๋ฉด google_compute_instance_template ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_compute_instance_template" "default" {
  name = "l7-xlb-backend-template"
  disk {
    auto_delete  = true
    boot         = true
    device_name  = "persistent-disk-0"
    mode         = "READ_WRITE"
    source_image = "projects/debian-cloud/global/images/family/debian-12"
    type         = "PERSISTENT"
  }
  labels = {
    managed-by-cnrm = "true"
  }
  machine_type = "n1-standard-1"
  metadata = {
    startup-script = <<EOF
    #! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    sudo echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    sudo systemctl restart apache2
    EOF
  }
  network_interface {
    access_config {
      network_tier = "PREMIUM"
    }
    network    = google_compute_network.default.id
    subnetwork = google_compute_subnetwork.default.id
  }
  region = "us-west1"
  scheduling {
    automatic_restart   = true
    on_host_maintenance = "MIGRATE"
    provisioning_model  = "STANDARD"
  }
  service_account {
    email  = "default"
    scopes = ["https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/pubsub", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append"]
  }
  tags = ["load-balanced-backend"]
}

๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์„ ๋งŒ๋“ค๋ ค๋ฉด google_compute_instance_group_manager ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_compute_instance_group_manager" "default" {
  name = "l7-xlb-backend-example"
  zone = "us-west1-a"
  named_port {
    name = "http"
    port = 80
  }
  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  base_instance_name = "vm"
  target_size        = 2
}

API

  1. instanceTemplates.insert ๋ฉ”์„œ๋“œ๋กœ ์ธ์Šคํ„ด์Šค ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ PROJECT_ID๋Š” ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
    {
     "name":"l7-xlb-backend-template",
     "properties": {
       "machineType":"e2-standard-2",
       "tags": {
         "items":[
           "load-balanced-backend"
         ]
       },
       "metadata": {
         "kind":"compute#metadata",
         "items":[
           {
             "key":"startup-script",
             "value":"#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2"
           }
         ]
       },
       "networkInterfaces":[
         {
           "network":"projects/PROJECT_ID/global/networks/lb-network",
           "subnetwork":"regions/us-west1/subnetworks/backend-subnet",
           "accessConfigs":[
             {
               "type":"ONE_TO_ONE_NAT"
             }
           ]
         }
       ],
       "disks": [
         {
           "index":0,
           "boot":true,
           "initializeParams": {
             "sourceImage":"projects/debian-cloud/global/images/family/debian-12"
           },
           "autoDelete":true
         }
       ]
     }
    }
    
  2. instanceGroupManagers.insert ๋ฉ”์„œ๋“œ๋กœ ๊ฐ ์˜์—ญ์— ๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ PROJECT_ID๋Š” ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/{zone}/instanceGroupManagers
    {
     "name": "l7-xlb-backend-example",
     "zone": "projects/PROJECT_ID/zones/us-west1-a",
     "instanceTemplate": "projects/PROJECT_ID/global/instanceTemplates/l7-xlb-backend-template",
     "baseInstanceName": "l7-xlb-backend-example",
     "targetSize": 2
    }
    

์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์— ์ด๋ฆ„์ด ์ง€์ •๋œ ํฌํŠธ ์ถ”๊ฐ€

์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์— HTTP ์„œ๋น„์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ํ•ด๋‹น ํฌํŠธ์— ํฌํŠธ ์ด๋ฆ„์„ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๊ฐ€ ํŠธ๋ž˜ํ”ฝ์„ ์ด๋ฆ„์ด ์ง€์ •๋œ ํฌํŠธ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์œผ๋กœ ์ด๋™

  2. ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์˜ ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค(์ด ์˜ˆ์‹œ์—์„œ๋Š” l7-xlb-backend-example).

  3. ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์˜ ๊ฐœ์š” ํŽ˜์ด์ง€์—์„œ ์ˆ˜์ • ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. ํฌํŠธ ์ด๋ฆ„ ๋งคํ•‘ ์ง€์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  5. ํ•ญ๋ชฉ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  6. ํฌํŠธ ์ด๋ฆ„์œผ๋กœ http๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํฌํŠธ ๋ฒˆํ˜ธ๋กœ 80์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  7. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

gcloud compute instance-groups set-named-ports ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud compute instance-groups set-named-ports l7-xlb-backend-example \
    --named-ports http:80 \
    --zone us-west1-a

Terraform

named_port ์†์„ฑ์€ ๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน ์ƒ˜ํ”Œ์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ IP ์ฃผ์†Œ ์˜ˆ์•ฝ

๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ๊ณ ์ • IP ์ฃผ์†Œ๋ฅผ ์˜ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ ๊ณ ์ • ์ฃผ์†Œ ์˜ˆ์•ฝ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ๊ณ ์ • ์ฃผ์†Œ ์˜ˆ์•ฝ์œผ๋กœ ์ด๋™

  2. ์ƒˆ ์ฃผ์†Œ์˜ ์ด๋ฆ„์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  3. ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค ๋“ฑ๊ธ‰์— ์Šคํƒ ๋”๋“œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  4. IP ๋ฒ„์ „์—์„œ IPv4๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. IPv6 ์ฃผ์†Œ๋Š” ์ „์—ญ๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ „์—ญ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์—์„œ๋งŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  5. ์œ ํ˜•์—์„œ ๋ฆฌ์ „์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  6. ๋ฆฌ์ „์—์„œ us-west1์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  7. ์—ฐ๊ฒฐ ๋Œ€์ƒ ์˜ต์…˜์„ ์—†์Œ์œผ๋กœ ์„ค์ •๋œ ์ƒํƒœ๋กœ ๋‘ก๋‹ˆ๋‹ค. ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ๋งŒ๋“ค๋ฉด ์ด IP ์ฃผ์†Œ๊ฐ€ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ์ „๋‹ฌ ๊ทœ์น™์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

  8. ์˜ˆ์•ฝ์„ ํด๋ฆญํ•˜์—ฌ IP ์ฃผ์†Œ๋ฅผ ์˜ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.

gcloud

  1. gcloud compute๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ์ • ์™ธ๋ถ€ IP ์ฃผ์†Œ๋ฅผ ์˜ˆ์•ฝํ•˜๋ ค๋ฉด compute addresses create ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    gcloud compute addresses create ADDRESS_NAME  \
       --region=us-west1 \
       --network-tier=STANDARD
    

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

    • ADDRESS_NAME: ์ฃผ์†Œ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
    • REGION: ์ด ์ฃผ์†Œ๋ฅผ ์˜ˆ์•ฝํ•  ๋ฆฌ์ „์ž…๋‹ˆ๋‹ค. ์ด ๋ฆฌ์ „์€ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์™€ ๋™์ผํ•œ ๋ฆฌ์ „์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฆฌ์ „ IP ์ฃผ์†Œ๋Š” IPv4์ž…๋‹ˆ๋‹ค.
  2. ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด compute addresses describe ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    gcloud compute addresses describe ADDRESS_NAME
    

Terraform

IP ์ฃผ์†Œ๋ฅผ ์˜ˆ์•ฝํ•˜๋ ค๋ฉด google_compute_address ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_compute_address" "default" {
  name         = "address-name"
  address_type = "EXTERNAL"
  network_tier = "STANDARD"
  region       = "us-west1"
}

Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ธฐ๋ณธ Terraform ๋ช…๋ น์–ด๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

API

๋ฆฌ์ „ IPv4 ์ฃผ์†Œ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋ฆฌ์ „ addresses.insert ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses

์š”์ฒญ ๋ณธ๋ฌธ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

{
  "name": "ADDRESS_NAME"
  "networkTier": "STANDARD"
  "region": "us-west1"
}

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

  • ADDRESS_NAME: ์ฃผ์†Œ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • REGION: ์š”์ฒญ์˜ ๋ฆฌ์ „ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • PROJECT_ID: ์ด ์š”์ฒญ์˜ ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.

๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ๊ตฌ์„ฑ

์ด ์˜ˆ์‹œ์—์„œ๋Š” ๋‹ค์Œ ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • HTTP ์ƒํƒœ ์ ๊ฒ€
  • ๊ด€๋ฆฌํ˜• ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์ด ๋ฐฑ์—”๋“œ์ธ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค
  • URL ๋งต
    • ๋Œ€์ƒ HTTP(S) ํ”„๋ก์‹œ์— ๋ฆฌ์ „์ด ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉด ๋ฆฌ์ „๋ณ„ URL ๋งต์„ ์ฐธ์กฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์ „๋ณ„ URL ๋งต์€ ์ˆ˜์‹  URL์˜ ํ˜ธ์ŠคํŠธ ๋ฐ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ์ •์˜ํ•œ ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฆฌ์ „๋ณ„ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋กœ ์š”์ฒญ์„ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์ „๋ณ„ URL ๋งต์€ ๋™์ผํ•œ ๋ฆฌ์ „์˜ ๋ฆฌ์ „๋ณ„ ๋Œ€์ƒ ํ”„๋ก์‹œ ๊ทœ์น™์—์„œ๋งŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • SSL ์ธ์ฆ์„œ(HTTPS์šฉ)
  • ๋Œ€์ƒ ํ”„๋ก์‹œ
  • ์ „๋‹ฌ ๊ทœ์น™

ํ”„๋ก์‹œ ๊ฐ€์šฉ์„ฑ

๊ฒฝ์šฐ์— ๋”ฐ๋ผ Google Cloud ๋ฆฌ์ „์— ์ƒˆ๋กœ์šด ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ํ”„๋ก์‹œ ์šฉ๋Ÿ‰์ด ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ Google Cloud ์ฝ˜์†”์—์„œ ํ”„๋ก์‹œ ๊ฐ€์šฉ์„ฑ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์— ๋‹ค๋ฅธ ๋ฆฌ์ „์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฆฌ์ „์— ๋ฐฑ์—”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ์ด ๋ฐฉ๋ฒ•์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์ด ์ด๋ฏธ ํ• ๋‹น๋œ VPC ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์šฉ๋Ÿ‰ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

์ฝ˜์†”

๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ์œ ํ˜• ์„ ํƒ

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

    ๋ถ€ํ•˜ ๋ถ„์‚ฐ์œผ๋กœ ์ด๋™

  2. ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ์œ ํ˜•์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ(HTTP/HTTPS)๋ฅผ ์„ ํƒํ•˜๊ณ  ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ณต๊ฐœ ๋˜๋Š” ๋‚ด๋ถ€์—์„œ ๊ณต๊ฐœ(์™ธ๋ถ€)๋ฅผ ์„ ํƒํ•˜๊ณ  ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  5. ์ „์—ญ ๋˜๋Š” ๋‹จ์ผ ๋ฆฌ์ „ ๋ฐฐํฌ์—์„œ ๋ฆฌ์ „ ์›Œํฌ๋กœ๋“œ์— ์ ํ•ฉ์„ ์„ ํƒํ•˜๊ณ  ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  6. ๊ตฌ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ตฌ์„ฑ

  1. ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ์ด๋ฆ„์— regional-l7-xlb๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฆฌ์ „์—์„œ us-west1์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ๋„คํŠธ์›Œํฌ์—์„œ lb-network๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท ์˜ˆ์•ฝ

๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ๊ฒฝ์šฐ ํ”„๋ก์‹œ ์ „์šฉ ์„œ๋ธŒ๋„ท์„ ์˜ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.

  1. ์„œ๋ธŒ๋„ท ์˜ˆ์•ฝ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ์ด๋ฆ„์— proxy-only-subnet๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  3. IP ์ฃผ์†Œ ๋ฒ”์œ„์— 10.129.0.0/23์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  4. ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ŸฐํŠธ์—”๋“œ ๊ตฌ์„ฑ

HTTP์˜ ๊ฒฝ์šฐ:

  1. ํ”„๋ŸฐํŠธ์—”๋“œ ๊ตฌ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ์ด๋ฆ„์„ l7-xlb-forwarding-rule์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. ํ”„๋กœํ† ์ฝœ์„ HTTP๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค ๋“ฑ๊ธ‰์„ ํ‘œ์ค€์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  5. ํฌํŠธ๋ฅผ 80์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  6. ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ IP ์ฃผ์†Œ ์˜ˆ์•ฝ์—์„œ ๋งŒ๋“  IP ์ฃผ์†Œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  7. ์™„๋ฃŒ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

HTTPS์˜ ๊ฒฝ์šฐ:

  1. ํ”„๋ŸฐํŠธ์—”๋“œ ๊ตฌ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ์ด๋ฆ„ ํ•„๋“œ์— l7-xlb-forwarding-rule์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  3. ํ”„๋กœํ† ์ฝœ ํ•„๋“œ์—์„œ HTTPS (includes HTTP/2)๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค ๋“ฑ๊ธ‰์„ ํ‘œ์ค€์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  5. ํฌํŠธ๊ฐ€ 443์œผ๋กœ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  6. ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ IP ์ฃผ์†Œ ์˜ˆ์•ฝ์—์„œ ๋งŒ๋“  IP ์ฃผ์†Œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  7. ์ธ์ฆ์„œ ๋ชฉ๋ก์—์„œ ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.
    1. ์ด๋ฏธ Compute Engine ์ž์ฒด ๊ด€๋ฆฌํ˜• SSL ์ธ์ฆ์„œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ๊ธฐ๋ณธ SSL ์ธ์ฆ์„œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    2. ์ƒˆ ์ธ์ฆ์„œ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
      1. ์ด๋ฆ„ ํ•„๋“œ์— l7-xlb-cert๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
      2. ํ•ด๋‹น ํ•„๋“œ์— ๋‹ค์Œ PEM ํ˜•์‹์˜ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
        • ์ธ์ฆ์„œ
        • ๋น„๊ณต๊ฐœ ํ‚ค
      3. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  8. ์„ ํƒ์‚ฌํ•ญ: ๊ธฐ๋ณธ SSL ์ธ์ฆ์„œ ์™ธ์— ์ธ์ฆ์„œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.
    1. ์ธ์ฆ์„œ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    2. ์ด๋ฏธ ์ธ์ฆ์„œ๊ฐ€ ์žˆ์œผ๋ฉด ์ธ์ฆ์„œ ๋ชฉ๋ก์—์„œ ์ธ์ฆ์„œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    3. ์„ ํƒ์‚ฌํ•ญ: ์ƒˆ ์ธ์ฆ์„œ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•˜๊ณ  ์ด์ „ ๋‹จ๊ณ„์— ๋‚˜์˜จ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
  9. SSL ์ •์ฑ… ๋ชฉ๋ก์—์„œ SSL ์ •์ฑ…์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๊ฒฝ์šฐ SSL ์ •์ฑ…์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

    1. SSL ์ •์ฑ… ๋ชฉ๋ก์—์„œ ์ •์ฑ… ๋งŒ๋“ค๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    2. SSL ์ •์ฑ…์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    3. ์ตœ์†Œ TLS ๋ฒ„์ „์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ TLS 1.0์ž…๋‹ˆ๋‹ค.
    4. ์‚ฌ์ „ ๊ตฌ์„ฑ๋œ Google ๊ด€๋ฆฌํ˜• ํ”„๋กœํ•„ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ SSL ๊ธฐ๋Šฅ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์ปค์Šคํ…€ ํ”„๋กœํ•„์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์„ค์ •๋œ ๊ธฐ๋Šฅ๊ณผ ์‚ฌ์šฉ ์ค‘์ง€๋œ ๊ธฐ๋Šฅ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
    5. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    SSL ์ •์ฑ…์„ ๋งŒ๋“ค์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ Google Cloud SSL ์ •์ฑ…์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

  10. ์™„๋ฃŒ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ๊ตฌ์„ฑ

  1. ๋ฐฑ์—”๋“œ ๊ตฌ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ ๋˜๋Š” ์„ ํƒ ๋ฉ”๋‰ด์—์„œ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์˜ ์ด๋ฆ„์„ l7-xlb-backend-service๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  4. ํ”„๋กœํ† ์ฝœ์—์„œ HTTP๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ์ด๋ฆ„์ด ์ง€์ •๋œ ํฌํŠธ์— http๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  6. ๋ฐฑ์—”๋“œ ์œ ํ˜•์„ ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  7. ์ƒˆ ๋ฐฑ์—”๋“œ ์„น์…˜์—์„œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    1. ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์„ l7-xlb-backend-example์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    2. ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ 80์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    3. ๋ถ„์‚ฐ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉ๋ฅ ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    4. ์™„๋ฃŒ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  8. ์ƒํƒœ ์ ๊ฒ€ ๋ชฉ๋ก์—์„œ ์ƒํƒœ ์ ๊ฒ€ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    1. ์ด๋ฆ„์„ l7-xlb-basic-check์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    2. ํ”„๋กœํ† ์ฝœ์„ HTTP๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    3. ํฌํŠธ๋ฅผ 80์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    4. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  9. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๋ผ์šฐํŒ… ๊ทœ์น™ ๊ตฌ์„ฑ

  1. ๋ผ์šฐํŒ… ๊ทœ์น™์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ชจ๋“œ์—์„œ ๋‹จ์ˆœํ•œ ํ˜ธ์ŠคํŠธ ๋ฐ ๊ฒฝ๋กœ ๊ทœ์น™์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. l7-xlb-backend-service๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ํ˜ธ์ŠคํŠธ ๋ฐ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์œ ์ผํ•œ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ๊ฒ€ํ† 

  1. ๊ฒ€ํ†  ๋ฐ ์™„๋ฃŒ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ๊ตฌ์„ฑ ์„ค์ •์„ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.
  3. ์„ ํƒ์‚ฌํ•ญ: ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” REST API ์š”์ฒญ์„ ๋ณด๋ ค๋ฉด ์ƒ์‘ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

  1. gcloud compute health-checks create http ๋ช…๋ น์–ด๋กœ HTTP ์ƒํƒœ ํ™•์ธ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

    gcloud compute health-checks create http l7-xlb-basic-check \
       --region=us-west1 \
       --request-path='/' \
       --use-serving-port
    
  2. gcloud compute backend-services create ๋ช…๋ น์–ด๋กœ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

    gcloud compute backend-services create l7-xlb-backend-service \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --protocol=HTTP \
      --port-name=http \
      --health-checks=l7-xlb-basic-check \
      --health-checks-region=us-west1 \
      --region=us-west1
    
  3. gcloud compute backend-services add-backend ๋ช…๋ น์–ด๋กœ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์— ๋ฐฑ์—”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    gcloud compute backend-services add-backend l7-xlb-backend-service \
      --balancing-mode=UTILIZATION \
      --instance-group=l7-xlb-backend-example \
      --instance-group-zone=us-west1-a \
      --region=us-west1
    
  4. gcloud compute url-maps create ๋ช…๋ น์–ด๋กœ URL ๋งต์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    gcloud compute url-maps create regional-l7-xlb-map \
      --default-service=l7-xlb-backend-service \
      --region=us-west1
    
  5. ๋Œ€์ƒ ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    HTTP์˜ ๊ฒฝ์šฐ:

    HTTP ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ๊ฒฝ์šฐ gcloud compute target-http-proxies create ๋ช…๋ น์–ด๋กœ ๋Œ€์ƒ ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    gcloud compute target-http-proxies create l7-xlb-proxy \
      --url-map=regional-l7-xlb-map \
      --url-map-region=us-west1 \
      --region=us-west1
    

    HTTPS์˜ ๊ฒฝ์šฐ:

    Compute Engine ๋˜๋Š” ์ธ์ฆ์„œ ๊ด€๋ฆฌ์ž ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ์„œ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“  ํ›„ ์ธ์ฆ์„œ๋ฅผ ๋Œ€์ƒ ํ”„๋ก์‹œ์— ์ง์ ‘ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

    1. ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๋ณ€์ˆ˜ ์ด๋ฆ„์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

      export LB_CERT=path to PEM-formatted file
      
      export LB_PRIVATE_KEY=path to PEM-formatted file
      
    2. gcloud compute ssl-certificates create ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ „๋ณ„ SSL ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

      gcloud compute ssl-certificates create l7-xlb-cert \
       --certificate=$LB_CERT \
       --private-key=$LB_PRIVATE_KEY \
       --region=us-west1
      
    3. ๋ฆฌ์ „๋ณ„ SSL ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ gcloud compute target-https-proxies create ๋ช…๋ น์–ด๋กœ ๋Œ€์ƒ ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

      gcloud compute target-https-proxies create l7-xlb-proxy \
       --url-map=regional-l7-xlb-map \
       --region=us-west1 \
       --ssl-certificates=l7-xlb-cert
      
  6. ์ „๋‹ฌ ๊ทœ์น™์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    HTTP์˜ ๊ฒฝ์šฐ:

    ์˜ฌ๋ฐ”๋ฅธ ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ gcloud compute forwarding-rules create ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    gcloud compute forwarding-rules create l7-xlb-forwarding-rule \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --network-tier=STANDARD \
      --network=lb-network \
      --address=ADDRESS_NAME \
      --ports=80 \
      --region=us-west1 \
      --target-http-proxy=l7-xlb-proxy \
      --target-http-proxy-region=us-west1
    

    HTTPS์˜ ๊ฒฝ์šฐ:

    ์˜ฌ๋ฐ”๋ฅธ ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ gcloud compute forwarding-rules create ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „๋‹ฌ ๊ทœ์น™์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    gcloud compute forwarding-rules create l7-xlb-forwarding-rule \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --network-tier=STANDARD \
      --network=lb-network \
      --address=ADDRESS_NAME \
      --ports=443 \
      --region=us-west1 \
      --target-https-proxy=l7-xlb-proxy \
      --target-https-proxy-region=us-west1
    

Terraform

์ƒํƒœ ์ ๊ฒ€์„ ๋งŒ๋“ค๋ ค๋ฉด google_compute_region_health_check ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_compute_region_health_check" "default" {
  name               = "l7-xlb-basic-check"
  check_interval_sec = 5
  healthy_threshold  = 2
  http_health_check {
    port_specification = "USE_SERVING_PORT"
    proxy_header       = "NONE"
    request_path       = "/"
  }
  region              = "us-west1"
  timeout_sec         = 5
  unhealthy_threshold = 2
}

๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด google_compute_region_backend_service ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_compute_region_backend_service" "default" {
  name                  = "l7-xlb-backend-service"
  region                = "us-west1"
  load_balancing_scheme = "EXTERNAL_MANAGED"
  health_checks         = [google_compute_region_health_check.default.id]
  protocol              = "HTTP"
  session_affinity      = "NONE"
  timeout_sec           = 30
  backend {
    group           = google_compute_instance_group_manager.default.instance_group
    balancing_mode  = "UTILIZATION"
    capacity_scaler = 1.0
  }
}

URL ๋งต์„ ๋งŒ๋“ค๋ ค๋ฉด google_compute_region_url_map๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_compute_region_url_map" "default" {
  name            = "regional-l7-xlb-map"
  region          = "us-west1"
  default_service = google_compute_region_backend_service.default.id
}

๋Œ€์ƒ HTTP ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด google_compute_region_target_http_proxy ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_compute_region_target_http_proxy" "default" {
  name    = "l7-xlb-proxy"
  region  = "us-west1"
  url_map = google_compute_region_url_map.default.id
}

์ „๋‹ฌ ๊ทœ์น™์„ ๋งŒ๋“ค๋ ค๋ฉด google_compute_forwarding_rule ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_compute_forwarding_rule" "default" {
  name       = "l7-xlb-forwarding-rule"
  provider   = google-beta
  depends_on = [google_compute_subnetwork.proxy_only]
  region     = "us-west1"

  ip_protocol           = "TCP"
  load_balancing_scheme = "EXTERNAL_MANAGED"
  port_range            = "80"
  target                = google_compute_region_target_http_proxy.default.id
  network               = google_compute_network.default.id
  ip_address            = google_compute_address.default.id
  network_tier          = "STANDARD"
}

Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ธฐ๋ณธ Terraform ๋ช…๋ น์–ด๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

API

regionHealthChecks.insert ๋ฉ”์„œ๋“œ์— POST ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ƒํƒœ ํ™•์ธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ PROJECT_ID๋Š” ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/{region}/healthChecks
{
  "name": "l7-xlb-basic-check",
  "type": "HTTP",
  "httpHealthCheck": {
    "portSpecification": "USE_SERVING_PORT"
  }
}

regionBackendServices.insert ๋ฉ”์„œ๋“œ์— POST ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ฆฌ์ „๋ณ„ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ PROJECT_ID๋Š” ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/us-west1/backendServices
{
  "name": "l7-xlb-backend-service",
  "backends": [
    {
      "group": "projects/<var>PROJECT_ID</var>/zones/us-west1-a/instanceGroups/l7-xlb-backend-example",
      "balancingMode": "UTILIZATION"
    }
  ],
  "healthChecks": [
    "projects/<var>PROJECT_ID</var>/regions/us-west1/healthChecks/l7-xlb-basic-check"
  ],
  "loadBalancingScheme": "EXTERNAL_MANAGED"
}

regionUrlMaps.insert ๋ฉ”์„œ๋“œ์— POST ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ URL ๋งต์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ PROJECT_ID๋Š” ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/us-west1/urlMaps
{
  "name": "regional-l7-xlb-map",
  "defaultService": "projects/<var>PROJECT_ID</var>/regions/us-west1/backendServices/l7-xlb-backend-service"
}

regionTargetHttpProxies.insert ๋ฉ”์„œ๋“œ์— POST ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋Œ€์ƒ HTTP ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ PROJECT_ID๋Š” ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/targetHttpProxy
{
  "name": "l7-xlb-proxy",
  "urlMap": "projects/PROJECT_ID/global/urlMaps/regional-l7-xlb-map",
  "region": "us-west1"
}

forwardingRules.insert ๋ฉ”์„œ๋“œ์— POST ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ „๋‹ฌ ๊ทœ์น™์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ PROJECT_ID๋Š” ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
{
  "name": "l7-xlb-forwarding-rule",
  "IPAddress": "10.1.2.99",
  "IPProtocol": "TCP",
  "portRange": "80-80",
  "target": "projects/PROJECT_ID/regions/us-west1/targetHttpProxies/l7-xlb-proxy",
  "loadBalancingScheme": "EXTERNAL_MANAGED",
  "network": "projects/PROJECT_ID/global/networks/lb-network",
  "networkTier": "STANDARD",
}

๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์— ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ

๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ๋งŒ๋“  ํ›„ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์™€ ์—ฐ๊ฒฐ๋œ IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: 30.90.80.100). ๋„๋ฉ”์ธ์ด ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•˜๋ ค๋ฉด ๋„๋ฉ”์ธ ๋“ฑ๋ก ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ A ๋ ˆ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. SSL ์ธ์ฆ์„œ์— ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋ฉด ๋ชจ๋‘ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ IP ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” A ๋ ˆ์ฝ”๋“œ๋ฅผ ๋„๋ฉ”์ธ๋งˆ๋‹ค ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด www.example.com ๋ฐ example.com์˜ A ๋ ˆ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

Cloud DNS๋ฅผ DNS ์ œ๊ณต์—…์ฒด๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ํ…Œ์ŠคํŠธ

๋ถ€ํ•˜ ๋ถ„์‚ฐ ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ด๋ฏ€๋กœ ์ด์ œ ์ „๋‹ฌ ๊ทœ์น™์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „์†กํ•˜๊ณ  ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋กœ ๋ถ„์‚ฐ๋˜๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜์†”

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

    ๋ถ€ํ•˜ ๋ถ„์‚ฐ์œผ๋กœ ์ด๋™

  2. ๋ฐฉ๊ธˆ ๋งŒ๋“  ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฐฑ์—”๋“œ ์„น์…˜์—์„œ VM์ด ์ •์ƒ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ •์ƒ ์—ด์— ๋‘ VM์ด ๋ชจ๋‘ ์ •์ƒ์œผ๋กœ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(2/2). ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋จผ์ € ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•ด ๋ณด์„ธ์š”. Google Cloud ์ฝ˜์†”์—์„œ VM์ด ์ •์ƒ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ๋ช‡ ๋ถ„ ์ •๋„ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๋ถ„ ํ›„์—๋„ ๋ฐฑ์—”๋“œ๊ฐ€ ์ •์ƒ์œผ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด ๋ฐฉํ™”๋ฒฝ ๊ตฌ์„ฑ๊ณผ ๋ฐฑ์—”๋“œ VM์— ํ• ๋‹น๋œ ๋„คํŠธ์›Œํฌ ํƒœ๊ทธ๋ฅผ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.
  4. Google Cloud ์ฝ˜์†”์—์„œ ๋ฐฑ์—”๋“œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ •์ƒ์ž„์„ ํ‘œ์‹œํ•˜๋ฉด https://IP_ADDRESS( ๋˜๋Š” http://IP_ADDRESS)๋กœ ์ด๋™ํ•˜์—ฌ ์›น๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•ด ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. IP_ADDRESS๋ฅผ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ IP ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  5. ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ HTTPS ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์— ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ ์ˆ˜๋ฝํ•˜๋„๋ก ๋ช…์‹œ์ ์œผ๋กœ ์ง€์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  6. ๋ธŒ๋ผ์šฐ์ €๋Š” ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•œ ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„๊ณผ ์˜์—ญ์„ ํ‘œ์‹œํ•˜๋Š” ์ฝ˜ํ…์ธ ๋กœ ํŽ˜์ด์ง€์— ๋ Œ๋”๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: Page served from: lb-backend-example-xxxx). ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ด ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ด ๊ฐ€์ด๋“œ์˜ ๊ตฌ์„ฑ ์„ค์ •์„ ๊ฒ€ํ† ํ•˜์„ธ์š”.

gcloud

์˜ˆ์•ฝ๋œ IPv4 ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

gcloud beta compute addresses describe ADDRESS_NAME \
    --format="get(address)" \
    --region="us-west1"

์›น๋ธŒ๋ผ์šฐ์ €์—์„œ https://IP_ADDRESS(๋˜๋Š” http://IP_ADDRESS)๋กœ ์ด๋™ํ•˜์—ฌ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. IP_ADDRESS๋ฅผ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ IP ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ HTTPS ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์— ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ ์ˆ˜๋ฝํ•˜๋„๋ก ๋ช…์‹œ์ ์œผ๋กœ ์ง€์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐฑ์—”๋“œ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋กœ ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ด ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ด ๊ฐ€์ด๋“œ์˜ ๊ตฌ์„ฑ ์„ค์ •์„ ๊ฒ€ํ† ํ•˜์„ธ์š”.

์ถ”๊ฐ€ ๊ตฌ์„ฑ ์˜ต์…˜

์ด ์„น์…˜์—์„œ๋Š” ๋Œ€์ฒด ๋ฐ ์ถ”๊ฐ€ ๊ตฌ์„ฑ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋Š” ๊ตฌ์„ฑ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ž‘์—…์€ ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ์…˜ ์–ดํ”ผ๋‹ˆํ‹ฐ ์‚ฌ์šฉ ์„ค์ •

์ด ์ ˆ์ฐจ์—์„œ๋Š” ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๊ฐ€ ์ƒ์„ฑ๋œ ์ฟ ํ‚ค ์–ดํ”ผ๋‹ˆํ‹ฐ, ํ—ค๋” ํ•„๋“œ ์–ดํ”ผ๋‹ˆํ‹ฐ ๋˜๋Š” HTTP ์ฟ ํ‚ค ์–ดํ”ผ๋‹ˆํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์˜ˆ์‹œ ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ƒ์„ฑ๋œ ์ฟ ํ‚ค ์–ดํ”ผ๋‹ˆํ‹ฐ๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜๋ฉด ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์—์„œ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ ํ›„์† ์š”์ฒญ์˜ ๊ฒฝ์šฐ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋Š” ๊ฐ™์€ ๋ฐฑ์—”๋“œ VM ๋˜๋Š” ์—”๋“œํฌ์ธํŠธ๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์ „ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ๊ฒฝ์šฐ ์ฟ ํ‚ค ์ด๋ฆ„์€ GCILB์ž…๋‹ˆ๋‹ค.

ํ—ค๋” ํ•„๋“œ ์–ดํ”ผ๋‹ˆํ‹ฐ๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜๋ฉด ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋Š” --custom-request-header ํ”Œ๋ž˜๊ทธ์— ์ด๋ฆ„์ด ์ง€์ •๋œ HTTP ํ—ค๋”์˜ ๊ฐ’์— ๋”ฐ๋ผ NEG์˜ ๋ฐฑ์—”๋“œ VM ๋˜๋Š” ์—”๋“œํฌ์ธํŠธ๋กœ ์š”์ฒญ์„ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. ํ—ค๋” ํ•„๋“œ ์–ดํ”ผ๋‹ˆํ‹ฐ๋Š” ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์ง€์—ญ ์ •์ฑ…์ด RING_HASH ๋˜๋Š” MAGLEV์ด๊ณ  ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์˜ ์ผ๊ด€๋œ ํ•ด์‹œ๊ฐ€ HTTP ํ—ค๋”์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

HTTP ์ฟ ํ‚ค ์–ดํ”ผ๋‹ˆํ‹ฐ๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜๋ฉด ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋Š” ์„ ํƒ ์‚ฌํ•ญ์ธ --affinity-cookie-ttl ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ HTTP_COOKIE ํ”Œ๋ž˜๊ทธ์— ์ด๋ฆ„์ด ์ง€์ •๋œ HTTP ์ฟ ํ‚ค์— ๋”ฐ๋ผ NEG์˜ ๋ฐฑ์—”๋“œ VM ๋˜๋Š” ์—”๋“œํฌ์ธํŠธ๋กœ ์š”์ฒญ์„ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTP ์š”์ฒญ์— ์ฟ ํ‚ค๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉด ํ”„๋ก์‹œ๊ฐ€ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ Set-Cookie ํ—ค๋”์— ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. HTTP ์ฟ ํ‚ค ์–ดํ”ผ๋‹ˆํ‹ฐ๋Š” ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์ง€์—ญ ์ •์ฑ…์ด RING_HASH ๋˜๋Š” MAGLEV์ด๊ณ  ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์˜ ์ผ๊ด€๋œ ํ•ด์‹œ๊ฐ€ HTTP ์ฟ ํ‚ค๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์˜ ์„ธ์…˜ ์–ดํ”ผ๋‹ˆํ‹ฐ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

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

    ๋ถ€ํ•˜ ๋ถ„์‚ฐ์œผ๋กœ ์ด๋™

  2. ๋ฐฉ๊ธˆ ๋งŒ๋“  ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  3. ๋ฐฑ์—”๋“œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. l7-xlb-backend-service(์ด ์˜ˆ์‹œ์—์„œ ๋งŒ๋“  ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ์ด๋ฆ„)๋ฅผ ํด๋ฆญํ•˜๊ณ  ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  5. ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ์„ธ๋ถ€์ •๋ณด ํŽ˜์ด์ง€์—์„œ ๊ณ ๊ธ‰ ๊ตฌ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  6. ๋ฉ”๋‰ด์—์„œ ์„ธ์…˜ ์–ดํ”ผ๋‹ˆํ‹ฐ์— ์›ํ•˜๋Š” ์„ธ์…˜ ์–ดํ”ผ๋‹ˆํ‹ฐ ์œ ํ˜•์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  7. ์—…๋ฐ์ดํŠธ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ l7-xlb-backend-service ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ์„ธ์…˜ ์–ดํ”ผ๋‹ˆํ‹ฐ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

gcloud compute backend-services update l7-xlb-backend-service \
    --session-affinity=GENERATED_COOKIE | HEADER_FIELD | HTTP_COOKIE | CLIENT_IP
    --region=us-west1

API

์„ธ์…˜ ์–ดํ”ผ๋‹ˆํ‹ฐ๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด regionBackendServices/patch ๋ฉ”์„œ๋“œ๋กœ PATCH ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

PATCH https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/us-west1/regionBackendServices/l7-xlb-backend-service
{
  "sessionAffinity": <var>"GENERATED_COOKIE" | "HEADER_FIELD" | "HTTP_COOKIE" | "CLIENT_IP"</var>
}

ํด๋ผ์ด์–ธํŠธ HTTP ์—ฐ๊ฒฐ ์œ ์ง€ ์ œํ•œ ์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ

์ด์ „ ๋‹จ๊ณ„์—์„œ ๋งŒ๋“  ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋Š” ํด๋ผ์ด์–ธํŠธ HTTP ์—ฐ๊ฒฐ ์œ ์ง€ ์ œํ•œ ์‹œ๊ฐ„์˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ HTTP ์—ฐ๊ฒฐ ์œ ์ง€ ์ œํ•œ ์‹œ๊ฐ„์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

์ฝ˜์†”

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

    ๋ถ€ํ•˜ ๋ถ„์‚ฐ์œผ๋กœ ์ด๋™

  2. ์ˆ˜์ •ํ•  ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ํ”„๋ŸฐํŠธ์—”๋“œ ๊ตฌ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  5. ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ํŽผ์นฉ๋‹ˆ๋‹ค. HTTP ์—ฐ๊ฒฐ ์œ ์ง€ ์ œํ•œ ์‹œ๊ฐ„์— ์ œํ•œ ์‹œ๊ฐ„ ๊ฐ’์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  6. ์—…๋ฐ์ดํŠธ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  7. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ฒ€ํ† ํ•˜๋ ค๋ฉด ๊ฒ€ํ†  ๋ฐ ์™„๋ฃŒ๋ฅผ ํด๋ฆญํ•œ ๋‹ค์Œ ์—…๋ฐ์ดํŠธ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

HTTP ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ๊ฒฝ์šฐ gcloud compute target-http-proxies update ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ƒ HTTP ํ”„๋ก์‹œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

      gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \
          --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
          --region=REGION
      

HTTPS ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์˜ ๊ฒฝ์šฐ gcloud compute target-https-proxies update ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ƒ HTTPS ํ”„๋ก์‹œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

      gcloud compute target-https-proxies update TARGET_HTTP_PROXY_NAME \
          --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
          --region REGION
      

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

  • TARGET_HTTP_PROXY_NAME: ๋Œ€์ƒ HTTP ํ”„๋ก์‹œ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • TARGET_HTTPS_PROXY_NAME: ๋Œ€์ƒ HTTPS ํ”„๋ก์‹œ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • HTTP_KEEP_ALIVE_TIMEOUT_SEC: HTTP ์—ฐ๊ฒฐ ์œ ์ง€ ์ œํ•œ ์‹œ๊ฐ„ ๊ฐ’์ž…๋‹ˆ๋‹ค(5~600์ดˆ ์‚ฌ์ด).

์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์—์„œ IAP ์‚ฌ์šฉ ์„ค์ •

IAP๋ฅผ ์‚ฌ์šฉ ์„ค์ • ๋˜๋Š” ์‚ฌ์šฉ ์ค‘์ง€(๊ธฐ๋ณธ๊ฐ’)ํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์„ค์ •๋œ ๊ฒฝ์šฐ oauth2-client-id ๋ฐ oauth2-client-secret ๊ฐ’์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

IAP๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด --iap=enabled ํ”Œ๋ž˜๊ทธ๋ฅผ oauth2-client-id ๋ฐ oauth2-client-secret๊ณผ ํ•จ๊ป˜ ํฌํ•จํ•˜๋„๋ก ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”.

์›ํ•˜๋Š” ๊ฒฝ์šฐ Google Cloud ์ฝ˜์†”, gcloud CLI ๋˜๋Š” API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Compute Engine ๋ฆฌ์†Œ์Šค์— IAP๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„