Istio์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ค€๋น„

Istio์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ค€๋น„

Istio๋Š” ๋ถ„์‚ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ฐ๊ฒฐ, ๋ณด์•ˆ, ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ ์œ„ํ•œ ํŽธ๋ฆฌํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Istio๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์™€ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ข…์†์„ฑ์„ ํŒจํ‚ค์ง•ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ, ์ด๋Ÿฌํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Kubernetes๋ฅผ ํฌํ•จํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ๋กœ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Istio๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ๊ฐ–์ถ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ะฑะตะท ์ด์Šคํ‹ฐ์˜ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ์™€ ๊ฐœ๋…์ด ์ด๋ฏธ ์ต์ˆ™ํ•˜๋‹ค๋ฉด ์ด ํŠœํ† ๋ฆฌ์–ผ์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋ฐ”๋กœ ์„น์…˜์œผ๋กœ ์ด๋™ํ•˜์„ธ์š”. Google Kubernetes Engine(GKE)์— Istio ์„ค์น˜ ์•„๋‹ˆ๋ฉด ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ GKE ๊ธฐ๋ฐ˜ Istio.

์ด๋Š” ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ดํ•ด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์†Œ์Šค ์ฝ”๋“œ๋ถ€ํ„ฐ GKE ์ปจํ…Œ์ด๋„ˆ๊นŒ์ง€ ์ „์ฒด ํ”„๋กœ์„ธ์Šค๋ฅผ ์•ˆ๋‚ดํ•˜๋Š” ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ Istio๊ฐ€ ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ปจํ…Œ์ด๋„ˆ, Kubernetes, ์„œ๋น„์Šค ๋ฉ”์‹œ ๋˜๋Š” Istio์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅธ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—…

์ด ์ž์Šต์„œ์—์„œ๋Š” ๋‹ค์Œ ์ž‘์—…์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

  1. ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ Hello World ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.
  2. ์†Œ์Šค ์ฝ”๋“œ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆ์— ํŒจํ‚ค์ง•ํ•ฉ๋‹ˆ๋‹ค.
  4. Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  5. ํด๋Ÿฌ์Šคํ„ฐ์— ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

Kubernetes Engine API๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ง€์นจ์„ ๋”ฐ๋ฅด์„ธ์š”.

  1. ์ด๋™ Kubernetes ์—”์ง„ ํŽ˜์ด์ง€ Google Cloud Platform ์ฝ˜์†”์—์„œ.
  2. ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. API ๋ฐ ๊ด€๋ จ ์„œ๋น„์Šค๊ฐ€ ํ™œ์„ฑํ™”๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๋ช‡ ๋ถ„ ์ •๋„ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. Google Cloud Platform ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๊ฒฐ์ œ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ๊ฒฐ์ œ ํ™œ์„ฑํ™” ๋ฐฉ๋ฒ• ์•Œ์•„๋ณด๊ธฐ.

์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์„ ์ค€๋น„ํ•˜๋Š” Cloud Shell์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Google Compute Engine์˜ g1-small Debian ๊ธฐ๋ฐ˜ Linux, Linux ๋˜๋Š” macOS ์ปดํ“จํ„ฐ.

์˜ต์…˜ A: Cloud Shell ์‚ฌ์šฉ

Cloud Shell ์‚ฌ์šฉ์˜ ์ด์ :

  • Python 2 ๋ฐ Python 3 ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(ํฌํ•จ) virtualenv)์ด ์™„์ „ํžˆ ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ช…๋ น์ค„ ๋„๊ตฌ ์ง€ํด๋ผ์šฐ๋“œ, ๋„์ปค, ์ž์‹ ะธ ์ฟ  ๋ฒ ํ‹€์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ๋Š” ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์Šต๋‹ˆ๋‹ค ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ:
    1. ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ, Cloud Shell ์ฐฝ ์ƒ๋‹จ์— ์ˆ˜์ • ์•„์ด์ฝ˜์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค.
    2. Cloud Shell์˜ ๋ช…๋ น์ค„์—์„œ ์—ด๋ฆฌ๋Š” Emacs, Vim ๋˜๋Š” Nano.

์‚ฌ์šฉ ํด๋ผ์šฐ๋“œ ์…ธ:

  1. GCP ์ฝ˜์†”๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฒ„ํŠผ์„ ํด๋ฆญ Cloud Shell ํ™œ์„ฑํ™” (Cloud Shell ํ™œ์„ฑํ™”)๋ฅผ GCP ์ฝ˜์†” ์ฐฝ ์ƒ๋‹จ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

Istio์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ค€๋น„

ํ•˜๋ถ€์—๋Š” GCP ์ฝ˜์†” ๋ช…๋ น์ค„์ด ํฌํ•จ๋œ Cloud Shell ์„ธ์…˜์ด ์ƒˆ ์ฐฝ์—์„œ ์—ด๋ฆฝ๋‹ˆ๋‹ค.

Istio์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ค€๋น„

์˜ต์…˜ B: ๋กœ์ปฌ์—์„œ ๋ช…๋ น์ค„ ๋„๊ตฌ ์‚ฌ์šฉ

Linux ๋˜๋Š” macOS๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ปดํ“จํ„ฐ์—์„œ ์ž‘์—…ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž ์ •์˜ Python 3 ๋ฐ Python 2 ๊ฐœ๋ฐœ ํ™˜๊ฒฝ.

  2. ํด๋ผ์šฐ๋“œ SDK ์„ค์น˜ ๋ช…๋ น์ค„ ๋„๊ตฌ ์‚ฌ์šฉ ์ง€ํด๋ผ์šฐ๋“œ.

  3. ์„ธํŠธ ์ฟ  ๋ฒ ํ‹€ - ์ž‘์—…์„ ์œ„ํ•œ ๋ช…๋ น์ค„ ๋„๊ตฌ Kubernetes.

    gcloud components install kubectl

  4. ์„ธํŠธ Docker ์ปค๋ฎค๋‹ˆํ‹ฐ ์—๋””์…˜(CE). ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋„์ปค์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  5. ๋„๊ตฌ ์„ค์น˜ ํž˜๋‚ด ๋ฒ„์ „ ์ œ์–ดGitHub์—์„œ ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ ์ฝ”๋“œ ๋‹ค์šด๋กœ๋“œ

  1. ์†Œ์Šค ์ฝ”๋“œ ๋‹ค์šด๋กœ๋“œ ์•ˆ๋…•ํ•˜์„ธ์š” ์„œ๋ฒ„:

    git clone https://github.com/GoogleCloudPlatform/istio-samples

  2. ์˜ˆ์ œ ์ฝ”๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    cd istio-samples/sample-apps/helloserver

์—ฌ๋Ÿฌ ์„œ๋น„์Šค๊ฐ€ ํฌํ•จ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํƒ์ƒ‰

์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Python์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. REST:

  • ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ: ์—”๋“œํฌ์ธํŠธ๊ฐ€ ํ•˜๋‚˜์ธ ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„ ์–ป๋‹ค, /, ์ฝ˜์†”์— "hello world"๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋กœ๋“œ๊ฒ: ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‚ด๋Š” ์Šคํฌ๋ฆฝํŠธ ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ, ์ดˆ๋‹น ์š”์ฒญ ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Istio์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ค€๋น„

์†Œ์Šค ์ฝ”๋“œ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰

์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํƒ์ƒ‰ํ•˜๋ ค๋ฉด Cloud Shell ๋˜๋Š” ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰ํ•˜์„ธ์š”.
1) ์นดํƒˆ๋กœ๊ทธ์—์„œ istio-samples/sample-apps/helloserver ์šด์˜ ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ:

python3 server/server.py

์‹œ์ž‘ํ•  ๋•Œ ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ๋‹ค์Œ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค:

INFO:root:Starting server...

2) ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„ ์ฐฝ์„ ์—ด์–ด ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ. Cloud Shell์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜์—ฌ ๋‹ค๋ฅธ ์„ธ์…˜์„ ์—ฝ๋‹ˆ๋‹ค.
3) ๋‹ค์Œ์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ:

curl http://localhost:8080

์„œ๋ฒ„ ๋‹ต๋ณ€:

Hello World!

4) ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๋‹ค์Œ์ด ํฌํ•จ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ๊ฒ:

cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen

5) ๋‹ค์Œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

export SERVER_ADDR=http://localhost:8080
export REQUESTS_PER_SECOND=5

6) ์‹คํ–‰ virtualenv:

virtualenv --python python3 env

7) ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค:

source env/bin/activate

8) ๋‹ค์Œ์— ๋Œ€ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ๊ฒ:

pip3 install -r requirements.txt

9) ์‹คํ–‰ ๋กœ๋“œ๊ฒ:

python3 loadgen.py

์‹œ์ž‘ํ•  ๋•Œ ๋กœ๋“œ๊ฒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Starting loadgen: 2019-05-20 10:44:12.448415
5 request(s) complete to http://localhost:8080

๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„ ์ฐฝ์—์„œ ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ์ฝ˜์†”์— ๋‹ค์Œ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

127.0.0.1 - - [21/Jun/2019 14:22:01] "GET / HTTP/1.1" 200 -
INFO:root:GET request,
Path: /
Headers:
Host: localhost:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*

๋„คํŠธ์›Œํ‚น ๊ด€์ ์—์„œ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹จ์ผ ํ˜ธ์ŠคํŠธ(๋กœ์ปฌ ์ปดํ“จํ„ฐ ๋˜๋Š” Cloud Shell ๊ฐ€์ƒ ๋จธ์‹ )์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋‹น์‹ ์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ.
10) ์ค‘์ง€ํ•˜๋ ค๋ฉด ๋กœ๋“œ๊ฒ ะธ ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ, ์‹œ์ž‘ํ•˜๋‹ค Ctrl-c ๋ชจ๋“  ํ„ฐ๋ฏธ๋„ ์ฐฝ์—์„œ.
11) ํ„ฐ๋ฏธ๋„ ์ฐฝ์—์„œ ๋กœ๋“œ๊ฒ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

deactivate

์ปจํ…Œ์ด๋„ˆ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒจํ‚ค์ง•

GKE์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŒจํ‚ค์ง•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ะธ ๋กœ๋“œ๊ฒ -์— ์šฉ๊ธฐ. ์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŒจํ‚ค์ง€ํ•˜์—ฌ ํ•ด๋‹น ํ™˜๊ฒฝ์—์„œ ๊ฒฉ๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆ์— ํŒจํ‚ค์ง•ํ•˜๋ ค๋ฉด ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋„์ปค ํŒŒ์ผ. ๋„์ปค ํŒŒ์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์†Œ์Šค ์ฝ”๋“œ์™€ ํ•ด๋‹น ์ข…์†์„ฑ์„ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์„ ์ •์˜ํ•˜๋Š” ํ…์ŠคํŠธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๋„์ปค ์ด๋ฏธ์ง€. ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ Docker Hub์™€ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์—…๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ.

์˜ˆ์ œ์—๋Š” ์ด๋ฏธ ๋„์ปค ํŒŒ์ผ ์— ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ะธ ๋กœ๋“œ๊ฒ ์ด๋ฏธ์ง€๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ช…๋ น์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์— - ๋„์ปค ํŒŒ์ผ ์— ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ:

FROM python:3-slim as base
FROM base as builder
RUN apt-get -qq update 
    && apt-get install -y --no-install-recommends 
        g++ 
    && rm -rf /var/lib/apt/lists/*

# Enable unbuffered logging
FROM base as final
ENV PYTHONUNBUFFERED=1

RUN apt-get -qq update 
    && apt-get install -y --no-install-recommends 
        wget

WORKDIR /helloserver

# Grab packages from builder
COPY --from=builder /usr/local/lib/python3.7/ /usr/local/lib/python3.7/

# Add the application
COPY . .

EXPOSE 8080
ENTRYPOINT [ "python", "server.py" ]

  • ํŒ€ Python:3-slim์„ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉ Docker์—๊ฒŒ ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค. Python 3 ์ด๋ฏธ์ง€ ๋ฒ ์ด์Šค๋กœ.
  • ํŒ€ ๋ณต์‚ฌ. . ์†Œ์Šค ํŒŒ์ผ์„ ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค(์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋งŒ ์„œ๋ฒ„.py)์„ ์ปจํ…Œ์ด๋„ˆ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ง„์ž… ์ง€์  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ์ด ๋ช…๋ น์€ ์‹คํ–‰ํ–ˆ๋˜ ๋ช…๋ น๊ณผ ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„.py ์†Œ์Šค ์ฝ”๋“œ์—์„œ.
  • ํŒ€ ํญ๋กœํ•˜๋‹ค ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ํฌํŠธ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. 8080. ์ด ํŒ€์€ ์•„๋‹˜ ํฌํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํฌํŠธ๋ฅผ ์—ฌ๋Š” ๋ฐ ํ•„์š”ํ•œ ์ผ์ข…์˜ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. 8080 ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆํ™” ์ค€๋น„

1) ๋‹ค์Œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๊พธ๋‹ค PROJECT_ID GCP ํ”„๋กœ์ ํŠธ ID์— ์ถ”๊ฐ€ํ•˜์„ธ์š”.

export PROJECT_ID="PROJECT_ID"

export GCR_REPO="preparing-istio"

๊ฐ’ ์‚ฌ์šฉ PROJECT_ID ะธ GCR_REPO Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๊ณ  ํ”„๋ผ์ด๋น— Container Registry์— ํ‘ธ์‹œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

2) ๋ช…๋ น์ค„ ๋„๊ตฌ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ GCP ํ”„๋กœ์ ํŠธ ์„ค์ • ์ง€ํด๋ผ์šฐ๋“œ.

gcloud config set project $PROJECT_ID

3) ๋ช…๋ น์ค„ ๋„๊ตฌ์˜ ๊ธฐ๋ณธ ์˜์—ญ ์„ค์ • ์ง€ํด๋ผ์šฐ๋“œ.

gcloud config set compute/zone us-central1-b

4) GCP ํ”„๋กœ์ ํŠธ์—์„œ Container Registry ์„œ๋น„์Šค๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

gcloud services enable containerregistry.googleapis.com

์ปจํ…Œ์ด๋„ˆํ™” ์„œ๋ฒ„

  1. ์˜ˆ์ œ๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ:

    cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/

  2. ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์กฐ๋ฆฝํ•ฉ๋‹ˆ๋‹ค. ๋„์ปค ํŒŒ์ผ ๊ทธ๋ฆฌ๊ณ  ์•ž์„œ ์ •์˜ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1 .

๋งค๊ฐœ ๋ณ€์ˆ˜ -t Docker ํƒœ๊ทธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฏธ์ง€์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

  1. Container Registry์— ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
    docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1

Loadgen์˜ ์ปจํ…Œ์ด๋„ˆํ™”

1) ์˜ˆ์ œ๊ฐ€ ์œ„์น˜ํ•œ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ๊ฒ:

cd ../loadgen

2) ์ด๋ฏธ์ง€ ์ˆ˜์ง‘:

docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1 .

3) ์ด๋ฏธ์ง€๋ฅผ Container Registry์— ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

docker push gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1

์ด๋ฏธ์ง€ ๋ชฉ๋ก ๋ณด๊ธฐ

์ €์žฅ์†Œ์˜ ์ด๋ฏธ์ง€ ๋ชฉ๋ก์„ ๊ฒ€ํ† ํ•˜๊ณ  ์ด๋ฏธ์ง€๊ฐ€ ์—…๋กœ๋“œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio

์ด ๋ช…๋ น์€ ์ƒˆ๋กœ ์—…๋กœ๋“œ๋œ ์ด๋ฏธ์ง€์˜ ์ด๋ฆ„์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen

GKE ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. G.K.E.. GKE๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์„ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ง‘๊ณ„ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์กฐ์ • ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ฐ€์ƒ ๋จธ์‹ ์„ ๋…ธ๋“œ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. GKE ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์˜คํ”ˆ์†Œ์Šค Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. Kubernetes๋Š” ํด๋Ÿฌ์Šคํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

GKE ํด๋Ÿฌ์Šคํ„ฐ ๋งŒ๋“ค๊ธฐ:

1) ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

gcloud container clusters create istioready 
  --cluster-version latest 
  --machine-type=n1-standard-2 
  --num-nodes 4

ํŒ€ ์ง€ํด๋ผ์šฐ๋“œ ์ง€์ •ํ•œ GCP ํ”„๋กœ์ ํŠธ์™€ ๊ธฐ๋ณธ ์˜์—ญ์— istioready ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. Istio๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ตœ์†Œ 4๊ฐœ์˜ ๋…ธ๋“œ์™€ ๊ฐ€์ƒ ๋จธ์‹ ์„ ๋ณด์œ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. n1-ํ‘œ์ค€-2.

ํŒ€์€ ๋ช‡ ๋ถ„ ์•ˆ์— ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ค€๋น„๋˜๋ฉด ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ัะพะพะฑั‰ะตะฝะธะต.

2) ๋ช…๋ น์ค„ ๋„๊ตฌ์— ์ž๊ฒฉ ์ฆ๋ช…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฟ  ๋ฒ ํ‹€์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

gcloud container clusters get-credentials istioready

3) ์ด์ œ ๋‹ค์Œ์„ ํ†ตํ•ด Kubernetes์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟ  ๋ฒ ํ‹€. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ๋ช…๋ น์€ ๋…ธ๋“œ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectl get nodes

์ด ๋ช…๋ น์€ ๋…ธ๋“œ ๋ชฉ๋ก์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

NAME                                       STATUS   ROLES    AGE    VERSION
gke-istoready-default-pool-dbeb23dc-1vg0   Ready    <none>   99s    v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-36z5   Ready    <none>   100s   v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-fj7s   Ready    <none>   99s    v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-wbjw   Ready    <none>   99s    v1.13.6-gke.13

Kubernetes ํ•ต์‹ฌ ๊ฐœ๋…

๋‹ค์ด์–ด๊ทธ๋žจ์€ GKE์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Istio์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ค€๋น„

GKE์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์ „์— Kubernetes์˜ ์ฃผ์š” ๊ฐœ๋…์„ ์•Œ์•„๋ณด์„ธ์š”. ๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ๋งจ ๋งˆ์ง€๋ง‰์— ๋งํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋…ธ๋“œ ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ. GKE์—์„œ ๋…ธ๋“œ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ Kubernetes ํ”Œ๋žซํผ์—์„œ ๋…ธ๋“œ๋Š” ์ปดํ“จํ„ฐ ๋˜๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ๋‹จ์ผ ๋‹จ์œ„๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.
  • ํฌ๋“œ. Kubernetes์—์„œ ์ปจํ…Œ์ด๋„ˆ๋Š” ํฌ๋“œ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. Kubernetes์˜ ํฌ๋“œ๋Š” ๋ถ„ํ• ํ•  ์ˆ˜ ์—†๋Š” ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ํฌ๋“œ์—๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ๋กœ๋“œ๊ฒ ๋ณ„๋„์˜ ํฌ๋“œ์— ์žˆ์Šต๋‹ˆ๋‹ค. Pod์— ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ(์˜ˆ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ๋ฐ ํ”„๋ก์‹œ ์„œ๋ฒ„), ์ปจํ…Œ์ด๋„ˆ๋Š” ๋‹จ์ผ ์—”ํ„ฐํ‹ฐ๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ ํฌ๋“œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐํฌ. Kubernetes์—์„œ ๋ฐฐํฌ๋Š” ๋™์ผํ•œ Pod์˜ ์ปฌ๋ ‰์…˜์ธ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. ๋ฐฐํฌ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์— ๋ถ„์‚ฐ๋œ Pod์˜ ์—ฌ๋Ÿฌ ๋ณต์ œ๋ณธ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐํฌ๋Š” ์‹คํŒจํ–ˆ๊ฑฐ๋‚˜ ์‘๋‹ตํ•˜์ง€ ์•Š๋Š” Pod๋ฅผ ์ž๋™์œผ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.
  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค. GKE์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋กœ๋“œ๊ฒ ะธ ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ. Cloud Shell ๊ฐ€์ƒ ๋จธ์‹  ๋˜๋Š” ๋ฐ์Šคํฌํ†ฑ์—์„œ ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ๋‹ค์Œ์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ะฟะพ ะฐะดั€ะตััƒ localhost : 8080. GKE์— ๋ฐฐํฌ๋˜๋ฉด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ์—์„œ ํฌ๋“œ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Pod๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋…ธ๋“œ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๊ผฌํˆฌ๋ฆฌ ์˜๊ตฌ IP ์ฃผ์†Œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
    IP ์ฃผ์†Œ๋ฅผ ์–ป์œผ๋ ค๋ฉด ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ, Pod ์œ„์— ๋„คํŠธ์›Œํฌ ์ถ”์ƒํ™”๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋ฐ”๋กœ ๊ทธ๊ฑฐ์•ผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค. Kubernetes ์„œ๋น„์Šค๋Š” ํฌ๋“œ ์„ธํŠธ์— ๋Œ€ํ•œ ์˜๊ตฌ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ์„œ๋น„์Šค ์œ ํ˜•. ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ะธัะฟะพะปัŒะทัƒะตั‚ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ, ์—ฐ๋ฝํ•  ์™ธ๋ถ€ IP ์ฃผ์†Œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ.
    Kubernetes์—๋Š” DNS ์ด๋ฆ„์„ ํ• ๋‹นํ•˜๋Š” ๋‚ด์žฅ DNS ์‹œ์Šคํ…œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: helloserver.default.cluster.local) ์„œ๋น„์Šค. ๋•๋ถ„์— ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ Pod๋Š” ์ผ์ •ํ•œ ์ฃผ์†Œ๋กœ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋‹ค๋ฅธ Pod์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. DNS ์ด๋ฆ„์€ Cloud Shell์ด๋‚˜ ์ปดํ“จํ„ฐ ๋“ฑ ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Kubernetes ๋งค๋‹ˆํŽ˜์ŠคํŠธ

์†Œ์Šค์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ๋•Œ ๋ช…๋ นํ˜• ๋ช…๋ น์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. python3

์„œ๋ฒ„.py

๋ช…๋ นํ˜•์€ "์ด๊ฒƒ์„ ํ•˜๋ผ"๋ผ๋Š” ๋™์‚ฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์„ ์–ธ์  ๋ชจ๋ธ. ์ด๋Š” Kubernetes์—๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ์ •ํ™•ํ•˜๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ์„ค๋ช…ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Kubernetes๋Š” ์‹œ์Šคํ…œ์˜ ์‹ค์ œ ์ƒํƒœ๋ฅผ ์›ํ•˜๋Š” ์ƒํƒœ์™€ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”์— ๋”ฐ๋ผ Pod๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋งค๋‹ˆํŽ˜์ŠคํŠธ๋‚˜ ํŒŒ์ผ์— ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์–Œ. YAML ํŒŒ์ผ์—๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ Kubernetes ๊ฐ์ฒด์— ๋Œ€ํ•œ ์‚ฌ์–‘์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ์—๋Š” ๋‹ค์Œ์— ๋Œ€ํ•œ YAML ํŒŒ์ผ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ะธ ๋กœ๋“œ๊ฒ. ๊ฐ YAML ํŒŒ์ผ์€ ๋ฐฐํฌ ๊ฐ์ฒด์™€ Kubernetes ์„œ๋น„์Šค์˜ ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloserver
spec:
  selector:
    matchLabels:
      app: helloserver
  replicas: 1
  template:
    metadata:
      labels:
        app: helloserver
    spec:
      terminationGracePeriodSeconds: 5
      restartPolicy: Always
      containers:
      - name: main
        image: gcr.io/google-samples/istio/helloserver:v0.0.1
        imagePullPolicy: Always

  • ์ข…๋ฅ˜ ๊ฐ์ฒด์˜ ์œ ํ˜•์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ.์ด๋ฆ„ ๋ฐฐํฌ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ ํˆฌ๊ธฐ ์›ํ•˜๋Š” ์ƒํƒœ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์–‘.๋ณต์ œ๋ณธ ์›ํ•˜๋Š” ํฌ๋“œ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ์„น์…˜ ์‚ฌ์–‘.ํ…œํ”Œ๋ฆฟ ํฌ๋“œ ํ…œํ”Œ๋ฆฟ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. Pod ์‚ฌ์–‘์— ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜์ƒ๋Š” Container Registry์—์„œ ์ถ”์ถœํ•ด์•ผ ํ•˜๋Š” ์ด๋ฏธ์ง€์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋ฉ๋‹ˆ๋‹ค.

apiVersion: v1
kind: Service
metadata:
  name: hellosvc
spec:
  type: LoadBalancer
  selector:
    app: helloserver
  ports:
  - name: http
    port: 80
    targetPort: 8080

  • ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ: ํด๋ผ์ด์–ธํŠธ๋Š” ์˜๊ตฌ IP ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๋ฉฐ ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์˜ IP ์ฃผ์†Œ๋กœ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ํƒ€๊ฒŸ ํฌํŠธ: ๊ธฐ์–ตํ•˜์‹œ๋Š” ๋Œ€๋กœ ํŒ€์€ ๋…ธ์ถœ 8080 ะฒ ๋„์ปค ํŒŒ์ผ ํฌํŠธ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ํฌํŠธ๋ฅผ ์ œ๊ณต 8080์ปจํ…Œ์ด๋„ˆ์— ์ ‘์ด‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ hellosvc.default.cluster.local:80 (์งง์€ ์ด๋ฆ„: ์•ˆ๋…•ํ•˜์„ธ์š”)๋Š” ํฌํŠธ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค 8080 ํฌ๋“œ IP ์ฃผ์†Œ ์•ˆ๋…•ํ•˜์„ธ์š” ์„œ๋ฒ„.
  • ํฌํŠธ: ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋‹ค๋ฅธ ์„œ๋น„์Šค๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ํฌํŠธ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.

loadgen.yaml

๋ฐฐํฌ ๋Œ€์ƒ loadgen.yaml ๋ชจ์–‘ ์„œ๋ฒ„.yaml. ์ฐจ์ด์ ์€ ๋ฐฐํฌ ๊ฐœ์ฒด์— ์„น์…˜์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ™˜๊ฒฝ. ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ๊ฒ ์†Œ์Šค์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ๋•Œ ์„ค์น˜ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: loadgenerator
spec:
  selector:
    matchLabels:
      app: loadgenerator
  replicas: 1
  template:
    metadata:
      labels:
        app: loadgenerator
    spec:
      terminationGracePeriodSeconds: 5
      restartPolicy: Always
      containers:
      - name: main
        image: gcr.io/google-samples/istio/loadgen:v0.0.1
        imagePullPolicy: Always
        env:
        - name: SERVER_ADDR
          value: "http://hellosvc:80/"
        - name: REQUESTS_PER_SECOND
          value: "10"
        resources:
          requests:
            cpu: 300m
            memory: 256Mi
          limits:
            cpu: 500m
            memory: 512Mi

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

apiVersion: v1
kind: Service
metadata:
  name: loadgensvc
spec:
  type: ClusterIP
  selector:
    app: loadgenerator
  ports:
  - name: http
    port: 80
    targetPort: 8080

GKE์— ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ

1) ์˜ˆ์ œ๊ฐ€ ์œ„์น˜ํ•œ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ:

cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/

2) ์—ด๊ธฐ ์„œ๋ฒ„.yaml ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ์—์„œ.
3) ํ•„๋“œ์˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์˜์ƒ Docker ์ด๋ฏธ์ง€์˜ ์ด๋ฆ„์œผ๋กœ.

image: gcr.io/PROJECT_ID/preparing-istio/helloserver:v0.0.1

๋ฐ”๊พธ๋‹ค PROJECT_ID GCP ํ”„๋กœ์ ํŠธ ID์— ์ถ”๊ฐ€ํ•˜์„ธ์š”.
4) ์ €์žฅํ•˜๊ณ  ๋‹ซ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„.yaml.
5) YAML ํŒŒ์ผ์„ Kubernetes์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

kubectl apply -f server.yaml

์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ๋ช…๋ น์€ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

deployment.apps/helloserver created
service/hellosvc created

6) ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ๊ฒ:

cd ../loadgen

7) ์—ด๊ธฐ loadgen.yaml ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ์—์„œ.
8) ํ•„๋“œ์˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์˜์ƒ Docker ์ด๋ฏธ์ง€์˜ ์ด๋ฆ„์œผ๋กœ.

image: gcr.io/PROJECT_ID/preparing-istio/loadgenv0.0.1

๋ฐ”๊พธ๋‹ค PROJECT_ID GCP ํ”„๋กœ์ ํŠธ ID์— ์ถ”๊ฐ€ํ•˜์„ธ์š”.
9) ์ €์žฅํ•˜๊ณ  ๋‹ซ์Šต๋‹ˆ๋‹ค. loadgen.yaml, ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค.
10) YAML ํŒŒ์ผ์„ Kubernetes์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

kubectl apply -f loadgen.yaml

์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ๋ช…๋ น์€ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

deployment.apps/loadgenerator created
service/loadgensvc created

11) Pod ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

kubectl get pods

์ด ๋ช…๋ น์€ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

NAME                             READY   STATUS    RESTARTS   AGE
helloserver-69b9576d96-mwtcj     1/1     Running   0          58s
loadgenerator-774dbc46fb-gpbrz   1/1     Running   0          57s

12) ํฌ๋“œ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ทธ ์ถ”์ถœ ๋กœ๋“œ๊ฒ. ๋ฐ”๊พธ๋‹ค POD_ID ์ด์ „ ๋‹ต๋ณ€์˜ ์‹๋ณ„์ž๋กœ.

kubectl logs loadgenerator-POD_ID

13) ์™ธ๋ถ€ IP ์ฃผ์†Œ ํš๋“ ์•ˆ๋…•ํ•˜์„ธ์š”:

kubectl get service

๋ช…๋ น ์‘๋‹ต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

NAME         TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
hellosvc     LoadBalancer   10.81.15.158   192.0.2.1       80:31127/TCP   33m
kubernetes   ClusterIP      10.81.0.1      <none>          443/TCP        93m
loadgensvc   ClusterIP      10.81.15.155   <none>          80/TCP         4m52s

14) ๋‹ค์Œ์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์•ˆ๋…•ํ•˜์„ธ์š”: ๋ฐ”๊พธ๋‹ค EXTERNAL_IP ์™ธ๋ถ€ IP ์ฃผ์†Œ๋กœ ์•ˆ๋…•ํ•˜์„ธ์š”.

curl http://EXTERNAL_IP

Istio๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž

์ด๋ฏธ GKE์— ๋ฐฐํฌ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋“œ๊ฒ Kubernetes DNS๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(hellosvc:80) ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ๋‹ค์Œ์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ์™ธ๋ถ€ IP ์ฃผ์†Œ๋กœ. Kubernetes์—๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ์ด ์žˆ์ง€๋งŒ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ผ๋ถ€ ์ •๋ณด๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„œ๋น„์Šค๋Š” ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๊นŒ? ์„œ๋น„์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์„œ๋น„์Šค ๊ฐ„ ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„์€ ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”? ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋กœ๋“œ๊ฒ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ, ํ•˜์ง€๋งŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅธ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์„ธ์š”. ์ด๋Ÿฌํ•œ ์งˆ๋ฌธ์— ๋‹ตํ•˜๊ธฐ ์œ„ํ•ด GKE์—์„œ ์‹คํ–‰ ์ค‘์ธ ํฌ๋“œ ๋ชฉ๋ก์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  • ์ธก์ •ํ•ญ๋ชฉ. ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์— ์‘๋‹ตํ•ฉ๋‹ˆ๊นŒ? ์„œ๋ฒ„๋Š” ์ดˆ๋‹น ๋ช‡ ๊ฐœ์˜ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๊นŒ? ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋‚˜์š”?
  • ๋ณด์•ˆ์ •๋ณด. ์‚ฌ์ด์˜ ๊ตํ†ต ๋กœ๋“œ๊ฒ ะธ ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ๊ทธ๋ƒฅ ํ†ต๊ณผํ•ด HTTP ๋˜๋Š” mTLS?

Istio๋Š” ์ด ๋ชจ๋“  ์งˆ๋ฌธ์— ๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Istio๋Š” ์‚ฌ์ด๋“œ์นด ํ”„๋ก์‹œ๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ ˆ ๊ฐ ํฌ๋“œ์—. Envoy ํ”„๋ก์‹œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๋Š” ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€๋กœ์ฑ•๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‹ค์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ะธ ๋กœ๋“œ๊ฒ ์‚ฌ์ด๋“œ์นด ํ”„๋ก์‹œ Envoy๋ฅผ ํ†ตํ•ด ์ˆ˜์‹ ํ•˜๊ณ  ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์€ ๋กœ๋“œ๊ฒ ะบ ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ Envoy ํ”„๋ก์‹œ๋ฅผ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.

Envoy ํ”„๋ก์‹œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์€ ์„œ๋น„์Šค ๋ฉ”์‹œ๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๋ฉ”์‹œ ์•„ํ‚คํ…์ฒ˜๋Š” Kubernetes ์œ„์— ์ œ์–ด ๊ณ„์ธต์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Istio์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ค€๋น„

Envoy ํ”„๋ก์‹œ๋Š” ์ž์ฒด ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋˜๋ฏ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ๊ฑฐ์˜ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ Istio๋ฅผ GKE ํด๋Ÿฌ์Šคํ„ฐ ์œ„์— ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Istio์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ๋ฐฐํฌ์— ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ะธ ๋กœ๋“œ๊ฒ Kubernetes ์„œ๋น„์Šค์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ฌ์ง€์–ด ๋กœ๋“œ๊ฒ, ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๋ฐ›์ง€ ์•Š๋Š” ์„œ๋น„์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„œ๋น„์Šค์˜ ํฌํŠธ์—๋Š” ์ด๋ฆ„์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. GKE์—์„œ๋Š” ์„œ๋น„์Šค ํฌํŠธ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ Istio์—์„œ๋Š” ๋‹ค์Œ์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํฌํŠธ ์ด๋ฆ„ ๊ทธ์˜ ํ”„๋กœํ† ์ฝœ์— ๋”ฐ๋ผ. YAML ํŒŒ์ผ์—์„œ ๋‹ค์Œ ํฌํŠธ๋Š” ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ ๋ผ๊ณ  HTTP์„œ๋ฒ„๊ฐ€ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— HTTP. ๋งŒ์•ฝ ์„œ๋น„์Šค ์‚ฌ์šฉ ๋œ gRPC, ํฌํŠธ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. grpc.
  • ๋ฐฐํฌ์— ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ง€์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋™์ผํ•œ ์„œ๋น„์Šค ๋ฒ„์ „ ๊ฐ„ ํŠธ๋ž˜ํ”ฝ ๋ถ„ํ• ๊ณผ ๊ฐ™์€ Istio์˜ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Istio ์„ค์น˜

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

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

์ฒญ์†Œ

์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ ์‚ฌ์šฉํ•œ ๋ฆฌ์†Œ์Šค ๋น„์šฉ์ด Google Cloud Platform ๊ณ„์ •์— ์ฒญ๊ตฌ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋ ค๋ฉด Istio๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•œ ํ›„ ์ปจํ…Œ์ด๋„ˆ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ญ์ œํ•˜์„ธ์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ปดํ“จํŒ… ์ธ์Šคํ„ด์Šค, ๋””์Šคํฌ ๋ฐ ๋„คํŠธ์›Œํฌ ๋ฆฌ์†Œ์Šค์™€ ๊ฐ™์€ ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ญ์ง€?

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€