HTTPS ์š”์ฒญ์œผ๋กœ ํ˜ธ์ถœ

์„œ๋น„์Šค๋‚˜ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๋ฉด Cloud Run์—์„œ ์„œ๋น„์Šค์˜ HTTPS ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. HTTPS ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  Cloud Run ์„œ๋น„์Šค์—๋Š” ์„œ๋น„์Šค์˜ ๊ธฐ๋ณธ HTTPS ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์•ˆ์ •์ ์ธ HTTPS URL์ด ์žˆ์ง€๋งŒ ์ปค์Šคํ…€ ๋„๋ฉ”์ธ๋„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

  • ์ปค์Šคํ…€ RESTful ์›น API
  • ๋น„๊ณต๊ฐœ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค
  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ HTTP ๋ฏธ๋“ค์›จ์–ด ๋˜๋Š” ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ
  • ์‚ฌ์ „ ํŒจํ‚ค์ง•๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

๊ณต๊ฐœ ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ

Cloud Run์— ๊ณต๊ฐœ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ณต๊ฐœ ์ธํ„ฐ๋„ท์—์„œ ์„œ๋น„์Šค๋กœ์˜ ์•ก์„ธ์Šค ๊ถŒํ•œ
  • ๊ณต๊ฐœ ์‚ฌ์šฉ์„ ์œ„ํ•œ URL

์„œ๋น„์Šค๋ฅผ ๊ณต๊ฐœ๋กœ ์„ค์ •ํ•˜๋ ค๋ฉด ๋ฐฐํฌํ•  ๋•Œ ๋˜๋Š” ๋ฐฐํฌ ํ›„์— ์–ธ์ œ๋“ ์ง€ ์ธ์ฆ๋˜์ง€ ์•Š์€(๊ณต๊ฐœ) ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ์„œ๋น„์Šค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค URL

Cloud Run์€ ๋ชจ๋“  ์„œ๋น„์Šค์— ํ•ด์‹œ ๊ธฐ๋ฐ˜ ๋น„๊ฒฐ์ •๋ก ์  URL์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ์ด๋ฆ„ ๊ธธ์ด์—์„œ ํ—ˆ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Cloud Run์€ ์„œ๋น„์Šค์— ๊ฒฐ์ •๋ก ์  URL๋„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ธฐ๋ณธ run.app URL์„ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Google Cloud ์ฝ˜์†”์—์„œ ์„œ๋น„์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ gcloud CLI์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์„œ๋น„์Šค URL์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud run services describe SERVICE --format 'value(status.url)'

๊ฒฐ์ •๋ก ์  URL์ด ํ‘œ์‹œ๋  ๋•Œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

Cloud Run ์„œ๋น„์Šค๊ฐ€ Cloud Functions v2 API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ ์„œ๋น„์Šค์— cloudfunctions.net URL๋„ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ์ •๋ก ์  URL

๊ฒฐ์ • URL์„ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋น„์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ „์— ์„œ๋น„์Šค URL์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ์ • URL์€ 63์ž ์ดํ•˜์˜ DNS ์„ธ๊ทธ๋จผํŠธ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DNS ์„ธ๊ทธ๋จผํŠธ์—๋Š” ์„œ๋น„์Šค ์ด๋ฆ„, ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ, ํ•˜๋‚˜ ์ด์ƒ์˜ ํŠธ๋ž˜ํ”ฝ ํƒœ๊ทธ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Cloud Run ์„œ๋น„์Šค์˜ ๊ฒฐ์ • URL์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์ž…๋‹ˆ๋‹ค.

https://[TAG---]SERVICE_NAME-PROJECT_NUMBER.REGION.run.app

๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • TAG๋Š” ์š”์ฒญํ•˜๋Š” ๋ฒ„์ „์˜ ์„ ํƒ์  ํŠธ๋ž˜ํ”ฝ ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • PROJECT_NUMBER๋Š” Google Cloud ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.
  • SERVICE_NAME์€ Cloud Run ์„œ๋น„์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • REGION์€ ๋ฆฌ์ „ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค(์˜ˆ: europe-west1).

๋น„๊ฒฐ์ •๋ก ์  URL

๋น„๊ฒฐ์ •๋ก ์  URL์—๋Š” ๊ฒฐ์ •๋ก ์  ํ˜•์‹์ด ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, URL์˜ ๋‘ ๋ฒˆ์งธ ํ•„๋“œ๊ฐ€ ๋ฌด์ž‘์œ„ ํ•ด์‹œ์ด๋ฏ€๋กœ ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์ „์— ์ „์ฒด URL์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•œ ํ›„์—๋Š” URL์ด ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

Cloud Run ์„œ๋น„์Šค์˜ ๋น„๊ฒฐ์ •๋ก ์  URL์€ https://[TAG---]SERVICE_IDENTIFIER.run.app ํ˜•์‹์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ TAG๋Š” ์š”์ฒญํ•˜๋Š” ๋ฒ„์ „์˜ ์„ ํƒ์ ์ธ ํŠธ๋ž˜ํ”ฝ ํƒœ๊ทธ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  SERVICE_IDENTIFIER๋Š” Cloud Run ์„œ๋น„์Šค์˜ ์•ˆ์ •์ ์ด๊ณ  ๊ณ ์œ ํ•œ ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. SERVICE_IDENTIFIER์—๋Š” ๊ณ ์ • ํ˜•์‹์ด ์—†์œผ๋ฏ€๋กœ ์ด๋ฅผ ํŒŒ์‹ฑํ•˜์ง€ ๋งˆ์„ธ์š”. SERVICE_IDENTIFIER ์ƒ์„ฑ ๋…ผ๋ฆฌ๋Š” ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‘๋‹ต ์ŠคํŠธ๋ฆฌ๋ฐ

Cloud Run์€ ์ŠคํŠธ๋ฆฌ๋ฐ HTTP ์‘๋‹ต์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” Transfer-Encoding: chunked ์‘๋‹ต ํ—ค๋”๋กœ ์‘๋‹ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

HTTP-HTTPS ๊ฐ„ ๋ฆฌ๋””๋ ‰์…˜

Cloud Run์€ ๋ชจ๋“  HTTP ์š”์ฒญ์„ HTTPS๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜์ง€๋งŒ ์›น ์„œ๋น„์Šค์— ์—ฐ๊ฒฐ๋˜๊ธฐ ์ „์— TLS๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค์—์„œ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ URL(http://)๋กœ ๋‹ค๋ฅธ ์›น ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์›น ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ํŽ˜์ด์ง€์— ํ˜ผํ•ฉ ์ฝ˜ํ…์ธ  ๊ฒฝ๊ณ  ๋˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. X-Forwarded-Proto HTTP ํ—ค๋”์™€ ๊ฐ™์€ HTTP ์š”์ฒญ์˜ ํ”„๋ก์‹œ ์ง€์‹œ๋ฌธ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ฐธ์กฐ ์›น URI ๋˜๋Š” ๊ณ„์ •์— https ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

HTTP ๋ฐ HTTP/2

๊ธฐ๋ณธ์ ์œผ๋กœ Cloud Run์€ ํ•ด๋‹น ์š”์ฒญ์ด ์ปจํ…Œ์ด๋„ˆ๋กœ ์ „์†ก๋  ๋•Œ HTTP/2 ์š”์ฒญ์„ HTTP/1๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. HTTP/2 ์—”๋“œ ํˆฌ ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„œ๋น„์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•˜๋ ค๋ฉด HTTP/2 ์‚ฌ์šฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ

Cloud Run์—์„œ ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด IAM ํ˜ธ์ถœ์ž ๊ถŒํ•œ์„ ํ™œ์šฉํ•˜์—ฌ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€ ์Šน์ธ ๋ฐ ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜(์˜ˆ: Identity Platform)์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ

๋น„๊ณต๊ฐœ ์„œ๋น„์Šค๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ Google Cloud CLI์—์„œ Cloud Run ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค๊ฐ€ http://localhost:8080(๋˜๋Š” --port๋กœ ์ง€์ •๋œ ํฌํŠธ)์œผ๋กœ ํ”„๋ก์‹œ๋˜์–ด ํ™œ์„ฑ ๊ณ„์ •์˜ ํ† ํฐ ๋˜๋Š” ์ง€์ •ํ•œ ๋‹ค๋ฅธ ํ† ํฐ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์›น๋ธŒ๋ผ์šฐ์ € ๋˜๋Š” curl ๋“ฑ์˜ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์›น์‚ฌ์ดํŠธ ๋˜๋Š” API๋ฅผ ๋น„๊ณต๊ฐœ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

Linux, macOS, WSL(๊ถŒ์žฅ) ๋˜๋Š” cygwin ํ™˜๊ฒฝ์—์„œ ๋‹ค์Œ ๋ช…๋ น์ค„์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๋กœ์ปฌ๋กœ ํ”„๋ก์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud run services proxy SERVICE --project PROJECT-ID

curl๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Authorization ํ—ค๋”์— ์ธ์ฆ ํ† ํฐ์„ ์ „๋‹ฌํ•˜์—ฌ ํ”„๋ก์‹œ ์—†์ด ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL

์„œ๋น„์Šค ๊ฐ„ ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค

Cloud Run ์„œ๋น„์Šค๋Š” ์„œ๋น„์Šค ๊ฐ„ ์ธ์ฆ์œผ๋กœ ๋‹ค๋ฅธ Cloud Run ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„๊ณต๊ฐœ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ƒ˜ํ”Œ ์ฝ”๋“œ

ID ํ† ํฐ์„ ๊ฐ€์ ธ์˜ค๊ณ  ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค์— HTTP ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋Š” ์ฝ”๋“œ ์ƒ˜ํ”Œ์€ ์„œ๋น„์Šค ๊ฐ„ ์ธ์ฆ ์ฃผ์ œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ๊ฐœ์„ 

HTTPS ํ”„๋ก์‹œ๋Š” HTTP ์„œ๋น„์Šค์—์„œ ์บ์‹ฑ, ์š”์ฒญ ๊ฒ€์‚ฌ ๋˜๋Š” ์Šน์ธ๊ณผ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๊ธฐ๋Šฅ์„ ์˜คํ”„๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ๋งŽ์€ HTTP ํ”„๋ก์‹œ๊ฐ€ API ๊ฒŒ์ดํŠธ์›จ์ด ์†”๋ฃจ์…˜ ๋˜๋Š” Istio์™€ ๊ฐ™์€ ์„œ๋น„์Šค ๋ฉ”์‹œ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Cloud Run ์„œ๋น„์Šค ๊ฐœ์„ ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”Google Cloud ์ œํ’ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.