[Go] Service Weaver: GKE ๋ฐฐํฌ
์๋ง ์ด๊ฒ ์๋ฒ๋ฅผ ๋ง๋ ์ฃผ ๋ชฉ์ ์ค ํ๋์ด์ง ์๋ ์ถ๋ค. GCP ์ ์ ๋๋ฆฌ๊ธฐ...
GCP์ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค์ ๋ถ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ฐ๋ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ค.
๋ค๋ฅธ ํด๋ผ์ฐ๋ ๊ธฐ๋ฅ์ด๋ ์จํ๋ ๋ฏธ์ค ๊ธฐ๋ฅ๋ ์ถํ์ ์ ๊ณต๋ ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค. ํ์ฌ๋ก์๋ ๊ณ ๋ คํ๊ณ ์์ง ์์๋ฏ.
weaver gke CLI ์ค์น
weaver cli๋ฅผ ์ฌ์ฉํด์ ์๋ํ๋ ๋ฐฐํฌ๋ฅผ ์๋ํ๋ ค๋ฉด, ๋ ์ ์ฉ ๋๊ตฌ๋ฅผ ํ๋ ๊น์์ค์ผ ํ๋ค.
go install github.com/ServiceWeaver/weaver-gke/cmd/weaver-gke@latest

GCP CLI ์ค์น
gcp cli๊ฐ ์๋ค๋ฉด. ์๋ ๋งํฌ์ ๋ค์ด๊ฐ์ ์ ์ ํ ๊น์์ค๋ค.
gcloud CLI ์ค์น | Google Cloud

ํ๋ฌ๊ทธ์ธ๋ ํ๋ ๊น์์ฃผ๊ณ
gcloud components install gke-gcloud-auth-plugin



๊ณ์ ์ ๋ณด๋ ์ ์ ํ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.

๋ฐ์ค๋น
๋ฃจํธ URL๋ก ํฌ์ค์ฒดํฌ์ฉ API๋ฅผ ํ๋ ํ์ค์ผ ํ๋ค.
// Health Check
http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
fmt.Fprintf(writer, "OK")
})
์ด๊ฒ ์์ผ๋ฉด ์ปจํ
์ด๋์ ๊ฑด๊ฐํจ์ ์ ์๊ฐ ์์ด์ ์ฌ๋ฐฐํฌ๊ฐ ๋๋๋ ๊ตฌ๋ฒ์ ์ ๋ด๋ฆฌ์ง ๋ชปํ๋ค.
๋ฐฐํฌํ๊ธฐ
๋จผ์ toml ํ์ผ์ ์ ์ ํ ์์ ํด์ค์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ windows/macOS ํ๊ฒฝ์์๋ ๋ฐฐํฌ๋ฅผ ์๋ํ๊ธฐ์ ํ๊ณ๊ฐ ์๋ค.
์ด์ฐจํผ ์ฟ ๋ฒ๋ก ๋ฐฐํฌํ๋ ค๋ฉด ์คํํ์ผ์ ๋ฆฌ๋
์ค์ฉ์ผ๋ก ๋ง์์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค...
๊ทธ๋ฆฌ๊ณ gke ์ต์ ์ ์ถ๊ฐํ๋ค.
[serviceweaver]
name = "weaver-start"
binary = "./weaver-start"
# binary = "./weaver-start.exe"
[gke]
regions = ["asia-northeast3"]
public_listener = [
{name = "weaver-start", hostname = "weaver.myyrakle.com"},
]
์ค์ ๋ก ๋ฐฐํฌํ ๋ฆฌ์ ๊ณผ, ํผ๋ธ๋ฆญ ๋ฆฌ์ค๋๋ฅผ ์ ์ํ๋ค.
ํผ๋ธ๋ฆญ ๋ฆฌ์ค๋๋ฅผ ์ ์ํ์ง ์์ผ๋ฉด private ๋ฆฌ์ค๋๋ง ์ด๋ ค์ ๋ด๋ถ ํต์ ๋ง ๊ฐ๋ฅํด์ง๋ค.
๊ทธ๋ฆฌ๊ณ gke deploy ๋ช ๋ น์ผ๋ก ์คํํด์ฃผ๋ฉด ๋๋ค.
weaver gke deploy weaver.toml
๊ทธ๋ผ ํ์ธ์๋์ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ์์ํ๋ค.

์ ์ํ ์ ์, ์ค์์ ์ด์ฉ config ํด๋ฌ์คํฐ๋ฅผ ์ถ๊ฐ๋ก ๋์ด๋ค๋ ๊ฒ์ด๋ค.
ํ์ฌ๋ us-central1 ๋ฆฌ์ ์ ๊ณ ์ ์ผ๋ก ๋์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ ๊ณผ ๋ฐฐํฌ๊ฐ ๋๋๋ฉด, ๋ ธ๋๋ ์์์ ์ ๋์์ค ๊ฒ์ด๋ค.


์๋น์ค ์ํ๋ gke status ๋ช ๋ น์ผ๋ก ํ์ธํ ์ ์๋ค.
๋ฐ๋ก ํผ๋ธ๋ฆญ ๋ฆฌ์ค๋๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด ์์ ๊ฐ์ด private ๋ก๋๋ฐธ๋ฐ์๋ก ๊ตฌ์ฑ๋ private ์๋ํฌ์ธํธ๋ง ๋ง๋ค์ด์ง๊ณ
ํผ๋ธ๋ฆญ ๋ฆฌ์ค๋๋ฅผ ์ค์ ํ๋ฉด ์ด๋ฐ ์์ผ๋ก ๋๋ค.

public ์๋ํฌ์ธํธ ํธ์ถ
๊ทธ๋ฅ ๊ฐ๋จํ๊ฒ ์ ๋๋ ํ ์คํธ๋ง ํด๋ณด๊ณ ์ถ๋ค๋ฉด, ์์ฒญ ํค๋์ ๋๋ฉ์ธ ์ ๋ณด๋ง ๋ฃ๊ณ public IP์ ์ด๋ณด๋ฉด ๋๋ค.
curl --header "Host: ๋๋ฉ์ธ" http:...

์ ๋๋ก ์ฐ๋ ค๋ฉด ๋๋ฉ์ธ ๋ถ์ฌ์ ์ฐ๋ฉด ๋ ์ข๊ณ

๊ทผ๋ฐ ๋ญ๊ฐ SSL ์ค์ ์ ์๋์ผ๋ก ํด์ฃผ๊ธด ํด์ฃผ๋๋ฐ... SSL ์ธ์ฆ์ ํ๋ก๋น์ ๋์ด ํ์ธ์ ๊ฑธ๋ฆฐ๋ค.
24์๊ฐ๊น์ง ๊ธฐ๋ค๋ ค๋ณด๋๋ค.
๋ด ๊ฒฝ์ฐ์๋ 2์๊ฐ์ฏค ๊ฑธ๋ฆฐ ๊ฒ ๊ฐ๋ค.
AWS๋ ๋ช๋ถ์ด๋ฉด ๋๋๋ฐ... ์ข ์์ฌ์ด ์๋๋ค.
private ์๋ํฌ์ธํธ
VPC ๋ด์์๋ง ์ฌ์ฉํ private ์๋ํฌ์ธํธ๋ "์๋น์ค๋ช .๋ฆฌ์ ๋ช .serviceweaver.internal"์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
๊ทธ๋์ ์ด๋ ๊ฒ ์ฐ๋ฉด ๋๋ค๊ณ ์๋ดํ๊ธด ํ๋๋ฐ..
๋ชจ๋ฅด๊ฒ ๋ค. ์ ์๋๋ค.
๋ด๋ถ ๋ก๋๋ฐธ๋ฐ์์ ์ฐ๋ envoy์์ ๋ฐ์ํ๋ ์ค๋ฅ์ผํ
๋ฐ, ์์ง ๋ง๋ค๋ค ๋ง์์ ๊ทธ๋ฐ๊ฑด์ง ๋ญ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค.
๋์๋ณด๋
๊ธฐ์กด๊ณผ ๋์ผํ๊ฒ ๋์๋ณด๋๋ฅผ ํผ์ณ๋ณผ ์ ์๋ค.



์ฌ๋ฐฐํฌ
๋น์ฐํ ์ฑ์ ์๊ฐ์ ๋ฐ๋ผ ๋ณํํด์ผํ๊ณ , ์ ๋ฒ์ ์ ์ฑ์ ๋ฐฐํฌํ๋ ๊ฒ์ ๋งํ์ง ์์๋ ์ ๊ฒ์ด๋ค.
์ ๋ฒ์ ์ ์ฑ์ ๋ฐฐํฌํ๋ ค๋ฉด, ์ฝ๋๋ฅผ ์์ ํ๊ณ

๋น๋ํด์ ๋๊ฐ์ด deploy๋ฅผ ์๋ํ๋ฉด ๋๋ค.

๊ทธ๋ผ ์ ๋ฒ์ ์ "deployment"๊ฐ ๋ฐ ๊ฒ์ด๊ณ ,

์์์ ์ ๊ต์ฒดํด์ค ๊ฒ์ด๋ค.

๊ทผ๋ฐ ์๋ฌด๋๋ ์ด์ฐฝ๊ธฐ ํ๋ก์ ํธ๋ผ ๊ฒฐํจ์ด ์๋๊ฑด์ง, ์ง๊ธ์ ๊ต์ฒด์ค์ ๋ค์ดํ์์ด ์ข ๋ฐ์ํ๋ค.
๋ ์์ ํ๋๊ธธ ๊ธฐ๋ค๋ ค์ผ ํ ๊ฒ ๊ฐ๋ค.
๋ฐฐํฌ ์ ๊ฑฐํ๊ธฐ
๊ทธ๋ฅ ๋ฐฐํฌ๋จ์๋ฅผ ์น ๋ ๋ ค๋ฒ๋ฆฌ๊ณ ์ถ๋ค๋ฉด, kill ๋ช ๋ น์ ์ฐ๋ฉด ๋๋ค.


๊ทธ๋ ๋ค.
์์ง ํ๋ก์ ํธ ์ด๊ธฐ๋ค๋ณด๋, ์ ์ฒด์ ์ผ๋ก ๋ฏธ์ํ ๋ถ๋ถ์ด ๋ง์ด ๋ณด์ธ๋ค.
์์ ํ๊ฐ ๋๊ณ ์จํ๋ ๋ฏธ์ค๋ ํ์ฌ ํด๋ผ์ฐ๋๋ ์ง์์ด ๋๋ค๋ฉด.. ์ฐธ ์ข์ ๊ฒ ๊ฐ๋ค.
์ฐธ์กฐ
Service Weaver Docs