Cloud Service Mesh ๋‹จ๊ณ„๋ณ„ ๋ฌธ์ œ ํ•ด๊ฒฐ

์ด ์„น์…˜์—์„œ๋Š” Cloud Service Mesh๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ง€์›์ด ํ•„์š”ํ•˜๋ฉด ์ง€์› ๋ฐ›๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฌธ์ œ ํ•ด๊ฒฐ ๋‹จ๊ณ„

Cloud Service Mesh ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์ž๋™ ๊ตฌ์„ฑ ๊ฒ€์ฆ ๋„๊ตฌ ์‚ฌ์šฉ
  2. ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ์™€ ์•Œ๋ ค์ง„ ํ•ด๊ฒฐ์ฑ… ํ™•์ธ
  3. ๋ฌธ์ œ ๋ฒ”์œ„ ์ขํžˆ๊ธฐ
  4. ๊ด€๋ จ ๋กœ๊ทธ ๋ฐ ์ •๋ณด ๊ฒ€ํ† 
  5. ์ง„๋‹จ ๋กœ๊ทธ ์ˆ˜์ง‘ ๋ฐ ๋„์›€๋ง ํƒ์ƒ‰

Cloud Service Mesh ์ง„๋‹จ ๋„๊ตฌ๋Š” ์ผ๋ฐ˜์ ์ธ ๊ตฌ์„ฑ ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์•ˆ๋‚ด์— ๋”ฐ๋ผ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

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

  1. ํด๋Ÿฌ์Šคํ„ฐ์˜ kubeconfig ์ปจํ…์ŠคํŠธ๊ฐ€ kubeconfig ํŒŒ์ผ์— ์ œ๊ณต๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=CLUSTER_LOCATION --project=PROJECT_NAME
    

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • CLUSTER_NAME: ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
    • CLUSTER_LOCATION: ํด๋Ÿฌ์Šคํ„ฐ์˜ ์˜์—ญ ๋˜๋Š” ๋ฆฌ์ „์ž…๋‹ˆ๋‹ค.
    • PROJECT_NAME: ํ”„๋กœ์ ํŠธ ์ด๋ฆ„
  2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‹ค์Œ ๋ช…๋ น์–ด ์ค‘ ํ•˜๋‚˜๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    gcloud auth application-default login --billing-project=PROJECT_NAME
    
    gcloud auth application-default set-quota-project PROJECT_NAME
    

    PROJECT_NAME์„ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์ œ์–ด ์˜์—ญ ์ƒํƒœ ๋ณด๊ธฐ

๋‹ค์Œ ๋ช…๋ น์–ด๋Š” Cloud Service Mesh ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ์ƒํƒœ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ฆฌ๋จ

  • Cloud Service Mesh ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ ์ƒํƒœ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    gcloud beta container fleet mesh debug proxy-status \
        --membership=MEMBERSHIP_NAME \
        --location=MEMBERSHIP_LOCATION \
        --project=PROJECT_NAME
    

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • MEMBERSHIP_NAME: ๋ฉค๋ฒ„์‹ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
    • MEMBERSHIP_LOCATION: ๋ฉค๋ฒ„์‹ญ์˜ ๋ฆฌ์ „์ž…๋‹ˆ๋‹ค. gcloud container fleet memberships list --project FLEET_PROJECT_ID๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉค๋ฒ„์‹ญ์˜ ์œ„์น˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ FLEET_PROJECT_ID๋ฅผ Fleet ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
    • PROJECT_NAME: ํ”„๋กœ์ ํŠธ ์ด๋ฆ„

    ๋‹ค์Œ ํ‘œ์—์„œ๋Š” ๊ฐ€๋Šฅํ•œ ์‘๋‹ต์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

    ์•Œ ์ˆ˜ ์—†์Œ (๊ธฐ๋ณธ๊ฐ’) โฃ์ƒํƒœ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    ๋™๊ธฐํ™”๋จ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ํด๋ผ์ด์–ธํŠธ์— ๊ตฌ์„ฑ์„ ์ „์†กํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ACK๋ฅผ ์ˆ˜์‹ ํ–ˆ์Šต๋‹ˆ๋‹ค.
    ์˜ค๋ฅ˜ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ํด๋ผ์ด์–ธํŠธ์— ๊ตฌ์„ฑ์„ ์ „์†กํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ NACK๋ฅผ ์ˆ˜์‹ ํ–ˆ์Šต๋‹ˆ๋‹ค.
    ๋น„ํ™œ์„ฑ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ํด๋ผ์ด์–ธํŠธ์— ๊ตฌ์„ฑ์„ ์ „์†กํ–ˆ์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ACK ๋˜๋Š” NACK๋ฅผ ์ˆ˜์‹ ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
    ์ „์†ก๋˜์ง€ ์•Š์Œ ๊ตฌ์„ฑ์ด ์ „์†ก๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
    ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ ํ•ด๋‹น ์—†์Œ
    ์ง€์›๋˜์ง€ ์•Š์Œ ๋ฌธ์ œ ํ•ด๊ฒฐ API์—์„œ๋Š” ๋™๊ธฐํ™” ์ƒํƒœ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด

  • kubectl get pods -n istio-system
  • kubectl describe -n istio-system
  • istio-system์˜ ๋ชจ๋“  pod์— ํ•ด๋‹น: kubectl logs -n istio-system -l istio --all-containers
  • istioctl version
  • istioctl proxy-status
  • kubectl get configmap istio -o yaml && kubectl get configmap istio-sidecar-injector -o yaml
  • kubectl top pods -n istio-system

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ ๊ทœ๋ชจ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • kubectl get nodes
  • kubectl get services --all-namespaces
  • kubectl get pods --all-namespaces

ํ”„๋ก์‹œ ๊ตฌ์„ฑ ๋ณด๊ธฐ

๋‹ค์Œ ๋ช…๋ น์–ด๋Š” Cloud Service Mesh ํ”„๋ก์‹œ ๊ตฌ์„ฑ์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ฆฌ๋จ

gcloud beta container fleet mesh debug proxy-config POD_NAME.NAMESPACE \ 
    --type=TYPE \
    --membership=MEMBERSHIP_NAME \
    --location=MEMBERSHIP_LOCATION \
    --project=PROJECT_NAME
  • POD_NAME: ํฌ๋“œ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • NAMESPACE: ํฌ๋“œ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.
  • TYPE: ํด๋Ÿฌ์Šคํ„ฐ, ๋ฆฌ์Šค๋„ˆ, ๊ฒฝ๋กœ, ์—”๋“œํฌ์ธํŠธ, ๋ถ€ํŠธ์ŠคํŠธ๋žฉ, ๋กœ๊ทธ, ๋ณด์•ˆ ๋น„๋ฐ€, all ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
  • MEMBERSHIP_NAME: ๋ฉค๋ฒ„์‹ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • MEMBERSHIP_LOCATION: ๋ฉค๋ฒ„์‹ญ์˜ ๋ฆฌ์ „์ž…๋‹ˆ๋‹ค. gcloud container fleet memberships list --project FLEET_PROJECT_ID๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉค๋ฒ„์‹ญ์˜ ์œ„์น˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ FLEET_PROJECT_ID๋ฅผ Fleet ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  • PROJECT_NAME: ํ”„๋กœ์ ํŠธ ์ด๋ฆ„

ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด

ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์— ๋Œ€ํ•œ ํ”„๋ก์‹œ ๊ตฌ์„ฑ์„ ๋ณด๋ ค๋ฉด istioctl proxy-config๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Envoy ๋ฐ istiod ๋””๋ฒ„๊น…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฌธ์ œ๊ฐ€ ์ง€์†๋˜๋ฉด ๋‹ค์Œ ์„น์…˜์„ ์ฐธ์กฐํ•˜์—ฌ ์ด๋ฏธ ์•Œ๋ ค์ง„ ๋ฌธ์ œ์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”.

์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ์ฑ… ํ™•์ธ

๋‹ค์Œ๊ณผ ๊ฐ™์ด Cloud Service Mesh ๊ธฐ๋Šฅ ์˜์—ญ์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•œ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ์ฑ… ์„น์…˜์— ๋‚˜์˜จ ๋ฌธ์ œ์™€ ํ˜„์žฌ ์ฆ์ƒ์ด ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฌธ์ œ ๋ฒ”์œ„ ์ขํžˆ๊ธฐ

Cloud Service Mesh๋Š” ์—ฌ๋Ÿฌ ์—ฐ๋™ ๊ธฐ์ˆ ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŠน์ • ์œ ํ˜•์˜ ๋ฌธ์ œ๋Š” ํŠน์ • ๊ธฐ๋Šฅ ์˜์—ญ ๋˜๋Š” ๊ตฌ์„ฑ์š”์†Œ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ ๊ตฌ์„ฑ์š”์†Œ๋Š” ์œ ์šฉํ•œ ์ž์ฒด ๋กœ๊ทธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ณต๋˜๋Š” ์ •๋ณด์˜ ์–‘์„ ์ˆ˜๋™์œผ๋กœ ๋ถ„์„ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•  ๋ฌธ์ œ์˜ ๋ฒ”์œ„๋ฅผ ์ขํž™๋‹ˆ๋‹ค.

  • ๋ฌธ์ œ๊ฐ€ ์ œ์–ด ์˜์—ญ ๋˜๋Š” ๋ฐ์ดํ„ฐ ์˜์—ญ(์˜ˆ: istiod ๋˜๋Š” Envoy ํ”„๋ก์‹œ)์—์„œ ๋ฐœ์ƒํ•˜๋‚˜์š”?
  • ์–ด๋–ค ๊ธฐ๋Šฅ ์˜์—ญ์—์„œ ๋„คํŠธ์›Œํ‚น, ์›๊ฒฉ ๋ถ„์„, ๋ณด์•ˆ ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋‚˜์š”?
  • ์„œ๋น„์Šค ๋ฉ”์‹œ ์ „์ฒด ๋˜๋Š” ํŠน์ • ๋ฐฐํฌ์— ํŠธ๋ž˜ํ”ฝ ์†์‹ค์ด ์žˆ๋‚˜์š”?
  • ์„œ๋น„์Šค ๋ฉ”์‹œ์— ํŠธ๋ž˜ํ”ฝ์„ ํ™•์žฅํ•˜๋Š” ๊ธฐ๋Šฅ ๋ถ€์กฑ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์•…ํ™”๋˜๋‚˜์š”?
  • ์ง€์—ฐ ์‹œ๊ฐ„์ด๋‚˜ ๋‹ค๋ฅธ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋‚˜์š”?
  • ์š”์ฒญ ์‹œ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?
  • ์ตœ๊ทผ Istio, GKE ๋“ฑ์˜ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•œ ํ›„ ๋ฌธ์ œ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ๋‚˜์š”?
  • ์„œ๋น„์Šค ๋ฉ”์‹œ ๋‚ด์˜ ํŠธ๋ž˜ํ”ฝ์ด ์ฆ๊ฐ€ ๋˜๋Š” ๊ธ‰์ฆํ–ˆ๋‚˜์š”?
  • ์ด ํด๋Ÿฌ์Šคํ„ฐ์— ๋ˆˆ์— ๋„๋Š” ๊ธฐ๋Šฅ์ด ์‚ฌ์šฉ ์„ค์ •๋˜์–ด ์žˆ๊ฑฐ๋‚˜ ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์€ ๋ฐฐํฌ๊ฐ€ ์žˆ๋‚˜์š”?
  • ๋†’์€ CPU ์‚ฌ์šฉ๋ฅ  ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ ์ด ๊ด€์ฐฐ๋˜๋‚˜์š”? ๊ทธ๋ ‡๋‹ค๋ฉด ๊ทœ๋ชจ์— ๋งž๋Š” ์˜ˆ์ƒ ์‚ฌ์šฉ๋ฅ ์€ ์–ผ๋งˆ์ธ๊ฐ€์š”?
  • ๊ณ ๋ คํ•  ํ• ๋‹น๋Ÿ‰ ์ œํ•œ์ด ์žˆ๋‚˜์š”?

๊ด€๋ จ ๋กœ๊ทธ ๋ฐ ์ •๋ณด ๊ฒ€ํ† 

๋ฌธ์ œ์˜ ๋ฒ”์œ„๋ฅผ ์ขํžŒ ํ›„์—๋Š” ํŠน์ • ๋กœ๊ทธ์™€ ์ •๋ณด์— ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Cloud Service Mesh๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ๋กœ๊ทธ ๋ฐ ๋กœ๊ทธ์— ํฌํ•จ๋œ ์ •๋ณด๋ฅผ ํ•ด์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Cloud Service Mesh ๋กœ๊ทธ ํ•ด์„์„ ์ฐธ์กฐํ•˜์„ธ์š”.