์—ฐ๊ฒฐ ๋ฌธ์ œ ๋””๋ฒ„๊ทธ

์†Œ๊ฐœ

์ผ๋ฐ˜์ ์œผ๋กœ ์—ฐ๊ฒฐ ๋ฌธ์ œ๋Š” ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ์˜์—ญ ์ค‘ ํ•˜๋‚˜์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

  • ์—ฐ๊ฒฐ - ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‚˜์š”?
  • ์Šน์ธ - ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ๊ถŒํ•œ์ด ์žˆ๋‚˜์š”?
  • ์ธ์ฆ - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ๋ฐ›์•„๋“ค์ด๋‚˜์š”?

์ด๋Ÿฌํ•œ ๊ฐ ์˜์—ญ์€ ์กฐ์‚ฌ๋ฅผ ์œ„ํ•ด ๋” ๋‹ค์–‘ํ•œ ๊ฒฝ๋กœ๋กœ ์„ธ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์„น์…˜์—๋Š” ๋ฌธ์ œ๋ฅผ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ์Šค์Šค๋กœ ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ๋Š” ์งˆ๋ฌธ์˜ ์˜ˆ์‹œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ๋ฌธ์ œ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€

ํŠน์ • API ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ฐธ์กฐ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ถ”๊ฐ€ ์—ฐ๊ฒฐ ๋ฌธ์ œ ํ•ด๊ฒฐ

๋‹ค๋ฅธ ์—ฐ๊ฒฐ ๋ฌธ์ œ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ํŽ˜์ด์ง€์˜ ์—ฐ๊ฒฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ผ๋ฐ˜์ ์ธ ์—ฐ๊ฒฐ ๋ฌธ์ œ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—ฐ๊ฒฐ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ข…๋ฃŒํ•˜๋Š”์ง€ ํ™•์ธ

'Aborted connection nnnn to db:'๊ฐ€ ํฌํ•จ๋œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๊ฒฝ์šฐ ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—ฐ๊ฒฐ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ค‘์ง€ํ•˜์ง€ ์•Š์•˜์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๋กœ ์ธํ•ด ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜๋Š” Cloud SQL ์ธ์Šคํ„ด์Šค์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฌธ์ œ์˜ ์›์ธ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ํŒจํ‚ท์„ ๊ฒ€์‚ฌํ•˜๋ ค๋ฉด tcpdump๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ๊ด€๋ฆฌ ๊ถŒ์žฅ์‚ฌํ•ญ์˜ ์˜ˆ์‹œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๊ด€๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ

์ธ์Šคํ„ด์Šค๊ฐ€ SSL์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ Google Cloud ์ฝ˜์†”์˜ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฝ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค์˜ ์—ฐ๊ฒฐ ํŽ˜์ด์ง€๋ฅผ ์—ด๊ณ  ๋ณด์•ˆ ํƒญ์„ ์„ ํƒํ•œ ํ›„ ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ์œ ํšจํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋งŒ๋ฃŒ๋œ ๊ฒฝ์šฐ ์ƒˆ ์ธ์ฆ์„œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ƒˆ ์ธ์ฆ์„œ๋กœ ์ˆœํ™˜์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธ

์—ฐ๊ฒฐ์— ์‹คํŒจํ•˜๋ฉด ์—ฐ๊ฒฐ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด๋ถ€ ํ™˜๊ฒฝ์—์„œ psql ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ์—ฐ๊ฒฐํ•˜๋Š” ๋“ฑ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์—ฐ๊ฒฐํ•˜๋ ค๋Š” IP ์ฃผ์†Œ๊ฐ€ Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์—ฐ๊ฒฐํ•  ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    ๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Cloud SQL ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์€ RFC 1918 ์ฃผ์†Œ ๋ฒ”์œ„์—์„œ ์ž๋™์œผ๋กœ ์Šน์ธ๋ฉ๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๋ชจ๋“  ๋น„๊ณต๊ฐœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ Cloud SQL ์ธ์ฆ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. RFC 1918 ์ด์™ธ์˜ ์ฃผ์†Œ ๋ฒ”์œ„๋Š” ์Šน์ธ๋œ ๋„คํŠธ์›Œํฌ๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL์€ ๊ธฐ๋ณธ์ ์œผ๋กœ VPC์—์„œ RFC 1918 ์ด์™ธ์˜ ์„œ๋ธŒ๋„ท ๊ฒฝ๋กœ๋ฅผ ํ•™์Šตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. RFC 1918 ์ด์™ธ์˜ ๊ฒฝ๋กœ๋ฅผ ๋‚ด๋ณด๋‚ด๋ ค๋ฉด ๋„คํŠธ์›Œํฌ ํ”ผ์–ด๋ง์„ Cloud SQL๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    gcloud compute networks peerings update cloudsql-postgres-googleapis-com \
    --network=NETWORK \
    --export-subnet-routes-with-public-ip \
    --project=PROJECT_ID
  • ํ˜„์žฌ IP ์ฃผ์†Œ

  • gcloud sql connect ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” ์ž ์‹œ ๋™์•ˆ IP ์ฃผ์†Œ๋ฅผ ์Šน์ธํ•ฉ๋‹ˆ๋‹ค. gcloud CLI์™€ psql ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ค์น˜๋œ ํ™˜๊ฒฝ์—์„œ ์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Cloud Shell์—์„œ๋„ ์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Cloud Shell์€Google Cloud ์ฝ˜์†”์—์„œ ์ œ๊ณต๋˜๋ฉฐ gcloud CLI์™€ psql ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์ „ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Cloud Shell์—์„œ๋Š” Cloud SQL์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Compute Engine ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • 0.0.0.0/0์„ ์ธ์ฆํ•˜์—ฌ ์ผ์‹œ์ ์œผ๋กœ ๋ชจ๋“  IP ์ฃผ์†Œ๋ฅผ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ๋ฐฉ๋ฒ• ํ™•์ธ

์—ฐ๊ฒฐ ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๊ฒฝ์šฐ

FATAL: database `user` does not exist.

gcloud sql connect --user ๋ช…๋ น์–ด๋Š” ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž(postgres)์˜ ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•œ ๋‹ค์Œ "\c" psql ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋กœ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ์‹œ์ž‘ ๋ฐฉ๋ฒ• ๊ฒฐ์ •

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ˜„์žฌ์˜ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SELECT * from pg_stat_activity ;

1.2.3.4์™€ ๊ฐ™์€ IP ์ฃผ์†Œ๊ฐ€ ํ‘œ์‹œ๋œ ์—ฐ๊ฒฐ์€ IP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. cloudsqlproxy~1.2.3.4๊ฐ€ ํ‘œ์‹œ๋œ ์—ฐ๊ฒฐ์€ Cloud SQL ์ธ์ฆ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ App Engine์—์„œ ์‹œ์ž‘๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. localhost์—์„œ์˜ ์—ฐ๊ฒฐ์€ ์ผ๋ถ€ ๋‚ด๋ถ€ Cloud SQL ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ํ•œ๋„

Cloud SQL ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ QPS ํ•œ๋„๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฐ๊ฒฐ, ํฌ๊ธฐ, App Engine๋ณ„ ํ•œ๋„๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ• ๋‹น๋Ÿ‰ ๋ฐ ํ•œ๋„๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์€ ์„œ๋ฒ„ ๋ฐ ์—ฐ๊ฒฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ ์—ฐ๊ฒฐ ๊ด€๋ฆฌ ๊ถŒ์žฅ์‚ฌํ•ญ์„ ์ฐธ๊ณ ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ ๊ณต๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ณ  Cloud SQL ์—ฐ๊ฒฐ ํ•œ๋„๋ฅผ ์ดˆ๊ณผํ•  ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ด์„ธ์š”. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๊ด€๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์—ฐ๊ฒฐ ๋ฐ ์Šค๋ ˆ๋“œ ํ‘œ์‹œ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณด๋ ค๋ฉด pg_stat_activity ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

select * from pg_stat_activity;

์—ฐ๊ฒฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ(Compute Engine์—์„œ)

Compute Engine ์ธ์Šคํ„ด์Šค์™€์˜ ์—ฐ๊ฒฐ์€ 10๋ถ„ ๋™์•ˆ ๋น„ํ™œ์„ฑ ์ƒํƒœ์ด๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๋˜์–ด Compute Engine ์ธ์Šคํ„ด์Šค์™€ Cloud SQL ์ธ์Šคํ„ด์Šค ๊ฐ„์˜ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ์—ฐ๊ฒฐ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Compute Engine ๋ฌธ์„œ์˜ ๋„คํŠธ์›Œํ‚น ๋ฐ ๋ฐฉํ™”๋ฒฝ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด TCP ์—ฐ๊ฒฐ ์œ ์ง€๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์–ด๋Š” TCP ์—ฐ๊ฒฐ ์œ ์ง€ ๊ฐ’์„ 1๋ถ„์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์ธ์Šคํ„ด์Šค ์žฌ๋ถ€ํŒ… ์‹œ ๊ตฌ์„ฑ์„ ์˜๊ตฌ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ tcp_keepalive_time ๊ฐ’์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

cat /proc/sys/net/ipv4/tcp_keepalive_time

tcp_keepalive_time์„ 60์ดˆ๋กœ ์„ค์ •ํ•˜๊ณ  ์žฌ๋ถ€ํŒ…ํ•  ๋•Œ๋„ ์˜๊ตฌ์ ์ด๊ฒŒ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

echo 'net.ipv4.tcp_keepalive_time = 60' | sudo tee -a /etc/sysctl.conf

๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

sudo /sbin/sysctl --load=/etc/sysctl.conf

tcp_keepalive_time ๊ฐ’์„ ํ‘œ์‹œํ•˜์—ฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

cat /proc/sys/net/ipv4/tcp_keepalive_time

์—ฐ๊ฒฐ ๋””๋ฒ„๊น… ๋„๊ตฌ

tcpdump

tcpdump๋Š” ํŒจํ‚ท์„ ์บก์ฒ˜ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ๋ฌธ์ œ๋ฅผ ๋””๋ฒ„๊น…ํ•  ๋•Œ ํ˜ธ์ŠคํŠธ์™€ Cloud SQL ์ธ์Šคํ„ด์Šค ์‚ฌ์ด์˜ ํŒจํ‚ท์„ ์บก์ฒ˜ํ•˜๊ณ  ๊ฒ€์‚ฌํ•˜๋ ค๋ฉด tcpdump๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋กœ์ปฌ IP ์ฃผ์†Œ ์ฐพ๊ธฐ

ํ˜ธ์ŠคํŠธ์˜ ๋กœ์ปฌ ์ฃผ์†Œ๋ฅผ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ ip -br address show ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. Linux์—์„œ๋Š” ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค, ์ธํ„ฐํŽ˜์ด์Šค ์ƒํƒœ, ๋กœ์ปฌ IP, MAC ์ฃผ์†Œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด eth0 UP 10.128.0.7/32 fe80::4001:aff:fe80:7/64์ž…๋‹ˆ๋‹ค.

๋˜๋Š” ipconfig ๋˜๋Š” ifconfig๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ๋กœ ํ…Œ์ŠคํŠธ

์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ๋Š” ๋„คํŠธ์›Œํฌ์˜ ์—”๋“œํฌ์ธํŠธ ๊ฐ„ ์—ฐ๊ฒฐ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ง„๋‹จ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์„ ๋ถ„์„ํ•˜๊ณ  ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋Ÿฐํƒ€์ž„ ํ™•์ธ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ Cloud SQL์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค. ์ด ์•ˆ๋‚ด์— ๋”ฐ๋ผ Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ

psql ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ psql ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ๊ณผ Cloud SQL ์ธ์ฆ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ psql ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ IP ์ฃผ์†Œ ํ™•์ธ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ์ปดํ“จํ„ฐ์˜ IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•˜์—ฌ ๊ทธ ์ฃผ์†Œ์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค์— ์•ก์„ธ์Šคํ•˜๋„๋ก ์Šน์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • ์ปดํ“จํ„ฐ๊ฐ€ ํ”„๋ก์‹œ ๋˜๋Š” ๋ฐฉํ™”๋ฒฝ ๋’ค์— ์žˆ์œผ๋ฉด ์ปดํ“จํ„ฐ์— ๋กœ๊ทธ์ธํ•˜๊ณ  ๋‚ด IP ํ™•์ธ ์‚ฌ์ดํŠธ์—์„œ IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์ปดํ“จํ„ฐ๊ฐ€ ํ”„๋ก์‹œ ๋˜๋Š” ๋ฐฉํ™”๋ฒฝ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ์ปดํ“จํ„ฐ์— ๋กœ๊ทธ์ธํ•ด์„œ whatismyipaddress.com๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋‚˜ ์„œ๋น„์Šค๋กœ ์‹ค์ œ IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋กœ์ปฌ ํฌํŠธ ์—ด๊ธฐ

ํ˜ธ์ŠคํŠธ๊ฐ€ ์–ด๋–ค ํฌํŠธ์—์„œ ๋ฆฌ์Šจ ์ค‘์ธ์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ss -tunlp4 ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์–ด๋–ค ํฌํŠธ๊ฐ€ ๊ฐœ๋ฐฉ๋˜์–ด ๋ฆฌ์Šจ ์ค‘์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ด๋ฉด ํฌํŠธ 5432์—์„œ ๋ฆฌ์Šจํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. SSH์˜ ๊ฒฝ์šฐ ํฌํŠธ 22๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋กœ์ปฌ ํฌํŠธ ํ™œ๋™

netstat ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๋กœ์ปฌ ํฌํŠธ ํ™œ๋™์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด netstat -lt์€ ํ˜„์žฌ ํ™œ์„ฑ ํฌํŠธ๋ฅผ ๋ชจ๋‘ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

telnet์„ ์‚ฌ์šฉํ•˜์—ฌ Cloud SQL ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐ

TCP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Cloud SQL ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด telnet ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. Telnet์€ ์ œ๊ณต๋œ IP ์ฃผ์†Œ์™€ ํฌํŠธ๋กœ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Cloud SQL ์ธ์Šคํ„ด์Šค๊ฐ€ PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ํฌํŠธ 5432์—์„œ telnet์œผ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: telnet 35.193.198.159 5432).

์„ฑ๊ณตํ•˜๋ฉด ๋‹ค์Œ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Trying 35.193.198.159...

Connected to 35.193.198.159. .

์‹คํŒจํ•˜๋ฉด ์—ฐ๊ฒฐ ์‹œ๋„๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ telnet์ด ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.

Trying 35.193.198.159...

^C. .

ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ

ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์€ pg_hba.conf๋ผ๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ๋กœ ์ œ์–ด๋ฉ๋‹ˆ๋‹ค(HBA๋Š” ํ˜ธ์ŠคํŠธ ๊ธฐ๋ฐ˜ ์ธ์ฆ(host-based authentication)์„ ์˜๋ฏธํ•จ).

์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” pg_hba.conf ํŒŒ์ผ์˜ ๋ณต์ œ ์—ฐ๊ฒฐ ์„น์…˜์ด Cloud SQL VPC์˜ IP ์ฃผ์†Œ ๋ฒ”์œ„์˜ ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

Cloud Logging

Cloud SQL ๋ฐ Cloud SQL์€ Cloud Logging์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Cloud Logging ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  Cloud SQL ์ƒ˜ํ”Œ ์ฟผ๋ฆฌ๋ฅผ ๊ฒ€ํ† ํ•˜์„ธ์š”.

๋กœ๊ทธ ๋ณด๊ธฐ

Cloud SQL ์ธ์Šคํ„ด์Šค์™€ Cloud VPN ๋˜๋Š” Compute Engine ์ธ์Šคํ„ด์Šค์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Google Cloudํ”„๋กœ์ ํŠธ์˜ ๋กœ๊ทธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Cloud SQL ์ธ์Šคํ„ด์Šค ๋กœ๊ทธ ํ•ญ๋ชฉ์˜ ๋กœ๊ทธ๋ฅผ ๋ณด๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

์ฝ˜์†”

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

    Cloud Logging์œผ๋กœ ์ด๋™

  2. ํŽ˜์ด์ง€ ์ƒ๋‹จ์—์„œ ๊ธฐ์กด Cloud SQL ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ์ฟผ๋ฆฌ ๋นŒ๋”์—์„œ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฆฌ์†Œ์Šค: Cloud SQL Database๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ™”์ƒ์ž์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ๋กœ๊ทธ ์ด๋ฆ„: Cloud SQL ์„น์…˜์œผ๋กœ ์Šคํฌ๋กคํ•˜๊ณ  ์ธ์Šคํ„ด์Šค์— ์ ํ•ฉํ•œ ๋กœ๊ทธ ํŒŒ์ผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
      • cloudsql.googleapis.com/postgres.log
    • ์‹ฌ๊ฐ๋„: ๋กœ๊ทธ ์ˆ˜์ค€์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ๊ธฐ๊ฐ„: ๋ฏธ๋ฆฌ ์„ค์ •์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์ปค์Šคํ…€ ๋ฒ”์œ„๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

gcloud

gcloud logging ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ์—์„œ PROJECT_ID๋ฅผ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. limit ํ”Œ๋ž˜๊ทธ๋Š” ๋ฐ˜ํ™˜ํ•  ์ตœ๋Œ€ ํ•ญ๋ชฉ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

gcloud logging read "projects/PROJECT_ID/logs/cloudsql.googleapis.com/postgres.log" \
--limit=10

๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ

๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Cloud SQL ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์€ RFC 1918 ์ฃผ์†Œ ๋ฒ”์œ„์—์„œ ์ž๋™์œผ๋กœ ์Šน์ธ๋ฉ๋‹ˆ๋‹ค. RFC 1918 ์ด์™ธ์˜ ์ฃผ์†Œ ๋ฒ”์œ„๋Š” Cloud SQL์—์„œ ์Šน์ธ๋œ ๋„คํŠธ์›Œํฌ๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ RFC 1918 ์ด์™ธ์˜ ๊ฒฝ๋กœ๋ฅผ ๋‚ด๋ณด๋‚ด๋ ค๋ฉด ๋„คํŠธ์›Œํฌ ํ”ผ์–ด๋ง์„ Cloud SQL๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

gcloud compute networks peerings update cloudsql-postgres-googleapis-com 
--network=NETWORK
--export-subnet-routes-with-public-ip
--project=PROJECT_ID

VPN ๋ฌธ์ œ ํ•ด๊ฒฐ

Cloud VPN ๋ฌธ์ œ ํ•ด๊ฒฐ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.