ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฉ”์‹œ ์„ค์ •

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ๋‹ค์Œ ํ”Œ๋žซํผ์— ๋Œ€ํ•ด ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฉ”์‹œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•˜์ด๋ธŒ๋ฆฌ๋“œ: Google Cloud ๊ธฐ๋ฐ˜ GKE ๋ฐ VMware์šฉ Google Distributed Cloud(์†Œํ”„ํŠธ์›จ์–ด ์ „์šฉ)
  • ํ•˜์ด๋ธŒ๋ฆฌ๋“œ: Google Cloud ๊ธฐ๋ฐ˜ GKE ๋ฐ ๋ฒ ์–ด๋ฉ”ํƒˆ์šฉ Google Distributed Cloud(์†Œํ”„ํŠธ์›จ์–ด ์ „์šฉ)

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์•ˆ๋‚ด์— ๋”ฐ๋ผ ๋‘ ๊ฐœ์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์„ค์ •ํ•˜์ง€๋งŒ ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ํ™•์žฅํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ฉ”์‹œ์— ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์š”๊ฑด

  • ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋™์ผํ•œ Fleet ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์— ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  GKE ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ์˜ ๊ณต์œ  VPC ๊ตฌ์„ฑ ์•ˆ์— ์œ„์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋Ÿฌ์Šคํ„ฐ์˜ Kubernetes ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์ฃผ์†Œ์™€ ๊ฒŒ์ดํŠธ์›จ์ด ์ฃผ์†Œ๋Š” ๋ฉ”์‹œ์˜ ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. GKE ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ๋Š” Google Cloud ํ”„๋กœ์ ํŠธ์—์„œ ์™ธ๋ถ€ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์œ ํ˜•์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šน์ธ๋œ ๋„คํŠธ์›Œํฌ ๋ฐ VPC ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์‚ฌ์šฉํ•ด์„œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • GKE ๋น„๊ณต๊ฐœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํฌํ•จํ•œ ๋น„๊ณต๊ฐœ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. VMware์šฉ Google Distributed Cloud(์†Œํ”„ํŠธ์›จ์–ด ์ „์šฉ) ๋ฐ ๋ฒ ์–ด๋ฉ”ํƒˆ์šฉ Google Distributed Cloud(์†Œํ”„ํŠธ์›จ์–ด ์ „์šฉ)๋ฅผ ํฌํ•จํ•œ ์˜จํ”„๋ ˆ๋ฏธ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ GKE ํด๋Ÿฌ์Šคํ„ฐ์˜ ํฌ๋“œ์—์„œ Kubernetes ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์ฃผ์†Œ ๋ฐ ๊ฒŒ์ดํŠธ์›จ์ด ์ฃผ์†Œ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. CloudVPN์„ ์‚ฌ์šฉํ•˜์—ฌ GKE ํด๋Ÿฌ์Šคํ„ฐ์˜ ์„œ๋ธŒ๋„ท์„ ์˜จํ”„๋ ˆ๋ฏธ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • Istio CA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ์— ๋™์ผํ•œ ์ปค์Šคํ…€ ๋ฃจํŠธ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

๋ฉ”์‹œ์— ์„ค์ •ํ•˜๋ ค๋Š” ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด kubeconfig ํŒŒ์ผ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. GKE ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒˆ kubeconfig ํŒŒ์ผ์„ ๋งŒ๋“ค๋ ค๋ฉด ํ„ฐ๋ฏธ๋„์˜ ๊ฐ’์œผ๋กœ ํŒŒ์ผ ์ „์ฒด ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š” KUBECONFIG ํ™˜๊ฒฝ์„ ๋‚ด๋ณด๋‚ด๊ณ  kubeconfig ํ•ญ๋ชฉ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ฐ ์ž๋ฆฌํ‘œ์‹œ์ž ์„ค์ •

east-west ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์„ค์น˜ํ•  ๋•Œ๋Š” ๋‹ค์Œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  1. ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์–ด์—์„œ FLEET_PROJECT_ID๋ฅผ Fleet ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์˜ ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    export PROJECT_NUMBER=$(gcloud projects describe FLEET_PROJECT_ID --format="value(projectNumber)")
    
  2. ๋ฉ”์‹œ ์‹๋ณ„์ž์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    export MESH_ID="proj-${PROJECT_NUMBER}"
    
  3. ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์šฉ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    • GKE ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์œผ๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

      export NETWORK_1="PROJECT_ID-CLUSTER_NETWORK"

    • ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ๋Š” default๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

      export NETWORK_2="default"

    --network_id์— ๋‹ค๋ฅธ ๊ฐ’์„ ์‚ฌ์šฉํ•ด์„œ ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ์— Cloud Service Mesh๋ฅผ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ ๋™์ผํ•œ ๊ฐ’์„ NETWORK_2์— ๊ฐ’์œผ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

east-west ๊ฒŒ์ดํŠธ์›จ์ด ์„ค์น˜

  1. CLUSTER_2(์˜จํ”„๋ ˆ๋ฏธ์Šค ํด๋Ÿฌ์Šคํ„ฐ)์— ๋Œ€ํ•œ east-west ํŠธ๋ž˜ํ”ฝ ์ „์šฉ ํด๋Ÿฌ์Šคํ„ฐ์ธ CLUSTER_1(GKE ํด๋Ÿฌ์Šคํ„ฐ)์— ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --network ${NETWORK_1}  \
        --revision asm-1260-11 | \
        ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_1 install -y -f -
    

    ์ด ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ธํ„ฐ๋„ท์— ๊ณต๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ์‹œ์Šคํ…œ์—์„œ๋Š” ์™ธ๋ถ€ ๊ณต๊ฒฉ์„ ์ฐจ๋‹จํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ์•ก์„ธ์Šค ์ œํ•œ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. CLUSTER_2์— CLUSTER_1์˜ east-west ํŠธ๋ž˜ํ”ฝ ์ „์šฉ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --network ${NETWORK_2} \
        --revision asm-1260-11 | \
        ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_2 install -y -f -
    

์„œ๋น„์Šค ๋…ธ์ถœ

ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋ณ„๋„์˜ ๋„คํŠธ์›Œํฌ์— ์žˆ์œผ๋ฏ€๋กœ ๋‘ ํด๋Ÿฌ์Šคํ„ฐ์˜ east-west ๊ฒŒ์ดํŠธ์›จ์ด์— ๋ชจ๋“  ์„œ๋น„์Šค(\*.local)๋ฅผ ๋…ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ์ธํ„ฐ๋„ท์—์„œ๋Š” ๊ณต๊ฐœ ์ƒํƒœ์ง€๋งŒ, ๋งˆ์น˜ ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ์— ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” mTLS ์ธ์ฆ์„œ์™€ ์›Œํฌ๋กœ๋“œ ID๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค๋งŒ ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ์˜ east-west ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ๋…ธ์ถœ

    kubectl --kubeconfig=PATH_TO_KUBECONFIG_1 apply -n istio-system -f \
        asm/istio/expansion/expose-services.yaml
    kubectl --kubeconfig=PATH_TO_KUBECONFIG_2 apply -n istio-system -f \
        asm/istio/expansion/expose-services.yaml

์—”๋“œํฌ์ธํŠธ ๊ฒ€์ƒ‰ ์‚ฌ์šฉ ์„ค์ •

asmcli create-mesh ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์—”๋“œํฌ์ธํŠธ ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ 2๊ฐœ๋งŒ ํ‘œ์‹œํ•˜์ง€๋งŒ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด GKE ํ—ˆ๋ธŒ ์„œ๋น„์Šค ํ•œ๋„์— ๋”ฐ๋ฅธ ์ถ”๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์— ์—”๋“œํฌ์ธํŠธ ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  ./asmcli create-mesh \
      FLEET_PROJECT_ID \
      PATH_TO_KUBECONFIG_1 \
      PATH_TO_KUBECONFIG_2

๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ์—ฐ๊ฒฐ ํ™•์ธ

์‚ฌ์ด๋“œ์นด ํ”„๋ก์‹œ ์‚ฝ์ž…์„ ์ฐธ์กฐํ•˜์„ธ์š”.