GKE์—์„œ ๊ด€๋ฆฌํ˜• Cloud Service Mesh ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ํ”„๋กœ๋น„์ €๋‹

Cloud Service Mesh๋Š” ๊ฐ„๋‹จํžˆ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” Google ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค ๋ฉ”์‹œ์ž…๋‹ˆ๋‹ค. Google์€ ๊ณ ๊ฐ์„ ์œ„ํ•ด ์•ˆ์ •์„ฑ, ์—…๊ทธ๋ ˆ์ด๋“œ, ํ™•์žฅ, ๋ณด์•ˆ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€์—์„œ๋Š” Fleet API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Istio API๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ˜• Cloud Service Mesh๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

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

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์Œ์ด ์ด๋ฏธ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  • ์ง€์›๋˜๋Š” ๋ฆฌ์ „ ์ค‘ ํ•˜๋‚˜์—์„œ ์ง€์›๋˜๋Š” GKE ๋ฒ„์ „์ด ์žˆ๋Š” ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํ•œ ๊ฐœ ์ด์ƒ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌํ˜• Cloud Service Mesh๋Š” GKE ์ถœ์‹œ ์ฑ„๋„์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ˆ์ •์„ฑ๊ณผ ์—…๊ทธ๋ ˆ์ด๋“œ ์†๋„ ๊ฐ„์— ๊ท ํ˜•์„ ๋งž์ถฅ๋‹ˆ๋‹ค. Cloud Service Mesh ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๊ตฌ์„ฑ์š”์†Œ(CNI, MDPC, ํ”„๋ก์‹œ, Istio CRD ํฌํ•จ)์˜ ์ƒˆ๋กœ์šด ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ GKE ์‹ ์† ์ฑ„๋„์„ ๊ตฌ๋…ํ•˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ์— ๋จผ์ € ์ถœ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ถฉ๋ถ„ํ•œ ์•ˆ์ •์„ฑ์„ ์ž…์ฆํ•˜๋ฉด GKE ์ผ๋ฐ˜ ์ฑ„๋„๋กœ ์Šน๊ฒฉ๋˜๊ณ , ๋งˆ์ง€๋ง‰์œผ๋กœ GKE ์•ˆ์ •ํ™” ๋ฒ„์ „ ์ฑ„๋„๋กœ ์Šน๊ฒฉ๋ฉ๋‹ˆ๋‹ค.

    • ๊ด€๋ฆฌํ˜• Cloud Service Mesh๋Š” GKE ์ถœ์‹œ ์ฑ„๋„์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • GKE ์ถœ์‹œ ์ฑ„๋„์„ ๋ณ€๊ฒฝํ•˜๋ฉด Cloud Service Mesh๋Š” ํ˜„์žฌ GKE ์ถœ์‹œ ์ฑ„๋„์— ๋งž๊ฒŒ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๊ตฌ์„ฑ์š”์†Œ(CNI, MDPC, ๊ธฐ๋ณธ์œผ๋กœ ์‚ฝ์ž…๋œ ํ”„๋ก์‹œ ๋ฒ„์ „, Istio CRD)๋ฅผ ์ž๋™์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ/๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋Ÿฌ์Šคํ„ฐ์— ๊ด€๋ฆฌํ˜• Cloud Service Mesh๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์— ์„ค์น˜ํ•˜๋Š” ํ•„์ˆ˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์œ„ํ•œ ์ถฉ๋ถ„ํ•œ ์šฉ๋Ÿ‰์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • kube-system ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ mdp-controller ๋ฐฐํฌ์—๋Š” CPU 50m, ๋ฉ”๋ชจ๋ฆฌ 128Mi๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
    • kube-system ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ istio-cni-node DaemonSet์—๋Š” ๊ฐ ๋…ธ๋“œ์—์„œ cpu 100m, ๋ฉ”๋ชจ๋ฆฌ 100Mi๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์กฐ์ง ์ •์ฑ… constraints/compute.disableInternetNetworkEndpointGroup์ด ์‚ฌ์šฉ ์ค‘์ง€๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ •์ฑ…์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด ServiceEntry๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ด€๋ฆฌํ˜• Cloud Service Mesh๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•  ํด๋ผ์ด์–ธํŠธ ๋จธ์‹ ์ด API ์„œ๋ฒ„์— ๋„คํŠธ์›Œํฌ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ Fleet์— ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์•ˆ๋‚ด์— ํฌํ•จ๋˜๊ฑฐ๋‚˜ ํ”„๋กœ๋น„์ €๋‹ ์ „์— ๋ณ„๋„๋กœ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ”„๋กœ์ ํŠธ์— ์„œ๋น„์Šค ๋ฉ”์‹œ Fleet ๊ธฐ๋Šฅ์ด ์‚ฌ์šฉ ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์•ˆ๋‚ด์— ํฌํ•จ๋˜์–ด ์žˆ๊ฑฐ๋‚˜ ๋ณ„๋„๋กœ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • GKE Autopilot์€ GKE ๋ฒ„์ „ 1.21.3 ์ด์ƒ์—์„œ๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

  • Cloud Service Mesh๋Š” ๋‹จ์ผ ํ”„๋กœ์ ํŠธ ๋‹จ์ผ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ ๋˜๋Š” ๋‹ค์ค‘ ํ”„๋กœ์ ํŠธ ๋‹จ์ผ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ ์—ฌ๋Ÿฌ GKE ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Cloud Service Mesh๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์—ญํ• 

๋‹ค์Œ ํ‘œ์—์„œ๋Š” ๊ด€๋ฆฌํ˜• Cloud Service Mesh๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์—ญํ• ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์—ญํ•  ์ด๋ฆ„ ์—ญํ•  ID ์œ„์น˜ ๋ถ€์—ฌ ์„ค๋ช…
GKE ํ—ˆ๋ธŒ ๊ด€๋ฆฌ์ž roles/gkehub.admin Fleet ํ”„๋กœ์ ํŠธ GKE ํ—ˆ๋ธŒ ๋ฐ ๊ด€๋ จ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ „์ฒด ์•ก์„ธ์Šค ๊ถŒํ•œ์ž…๋‹ˆ๋‹ค.
์„œ๋น„์Šค ์‚ฌ์šฉ๋Ÿ‰ ๊ด€๋ฆฌ์ž roles/serviceusage.serviceUsageAdmin Fleet ํ”„๋กœ์ ํŠธ ์„œ๋น„์Šค ์ƒํƒœ๋ฅผ ์‚ฌ์šฉ ์„ค์ •, ์ค‘์ง€, ๊ฒ€์‚ฌํ•˜๊ณ  ์ž‘์—…์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์†Œ๋น„์ž ํ”„๋กœ์ ํŠธ์˜ ํ• ๋‹น๋Ÿ‰๊ณผ ๊ฒฐ์ œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ฐธ๊ณ  1)
CA ์„œ๋น„์Šค ๊ด€๋ฆฌ์ž ๋ฒ ํƒ€ roles/privateca.admin Fleet ํ”„๋กœ์ ํŠธ CA ์„œ๋น„์Šค ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ „์ฒด ์•ก์„ธ์Šค ๊ถŒํ•œ์ž…๋‹ˆ๋‹ค. (์ฐธ๊ณ  2)

Cloud Service Mesh๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์—ญํ• 

๋‹ค์Œ ํ‘œ์—์„œ๋Š” ์„œ๋น„์Šค ๊ณ„์ •์ด ๊ด€๋ฆฌํ˜• Cloud Service Mesh๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์—ญํ• ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ์ ํŠธ๊ฐ€ Fleet ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์™€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ Fleet ํ”„๋กœ์ ํŠธ์˜ ์„œ๋น„์Šค ๊ณ„์ •์— ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์˜ ์ด๋Ÿฌํ•œ ์—ญํ• ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—ญํ•  ์ด๋ฆ„ ์—ญํ•  ID ์œ„์น˜ ๋ถ€์—ฌ ์„ค๋ช…
Anthos Service Mesh ์„œ๋น„์Šค ์—์ด์ „ํŠธ roles/anthosservicemesh.serviceAgent Fleet ํ”„๋กœ์ ํŠธ
Mesh ๊ด€๋ฆฌํ˜• ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์„œ๋น„์Šค ์—์ด์ „ํŠธ(๊ธฐ์กด) roles/meshcontrolplane.serviceAgent Fleet ํ”„๋กœ์ ํŠธ ์ด ์—ญํ• ์€ ์ด์ „ Cloud Service Mesh ์„ค์น˜์˜ ์ผ๋ถ€์˜€๋˜ ๊ธฐ์กด ์—ญํ• ์ž…๋‹ˆ๋‹ค. ์„ค์น˜์— ์ด ์„œ๋น„์Šค ์—ญํ• ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊ทธ๋Œ€๋กœ ๋‘๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ์„ค์น˜์—๋Š” ์ด ์—ญํ• ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ œํ•œ์‚ฌํ•ญ

Cloud Service Mesh ์ง€์› ๊ธฐ๋Šฅ ๋ฐ ์ œํ•œ์‚ฌํ•ญ ๋ชฉ๋ก์„ ๊ฒ€ํ† ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋‹ค์Œ ์‚ฌํ•ญ์— ์œ ์˜ํ•˜์„ธ์š”.

  • IstioOperator API๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด ์ฃผ์š” ๋ชฉ์ ์ด๋ฏ€๋กœ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • Certificate Authority Service(CA ์„œ๋น„์Šค)๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํด๋Ÿฌ์Šคํ„ฐ๋ณ„๋กœ Cloud Service Mesh๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋ฉฐ GKE Enterprise์—์„œ fleet-default ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • GKE Autopilot ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฒฝ์šฐ ํ”„๋กœ์ ํŠธ ๊ฐ„ ์„ค์ •์€ GKE 1.23 ์ด์ƒ์—์„œ๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

  • GKE Autopilot ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฒฝ์šฐ GKE Autopilot ๋ฆฌ์†Œ์Šค ํ•œ๋„์— ๋งž๊ฒŒ ๊ธฐ๋ณธ ํ”„๋ก์‹œ ๋ฆฌ์†Œ์Šค ์š”์ฒญ ๋ฐ ํ•œ๋„๊ฐ€ 500m CPU ๋ฐ 512MB ๋ฉ”๋ชจ๋ฆฌ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ปค์Šคํ…€ ์‚ฝ์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ๊ฐ’์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ด€๋ฆฌํ˜• ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ํ”„๋กœ๋น„์ €๋‹ ํ”„๋กœ์„ธ์Šค ์ค‘์— Istio CRD๊ฐ€ ์ง€์ •๋œ ํด๋Ÿฌ์Šคํ„ฐ์— ํ”„๋กœ๋น„์ €๋‹๋ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์— ๊ธฐ์กด Istio CRD๊ฐ€ ์žˆ์œผ๋ฉด ๋ฎ์–ด์”๋‹ˆ๋‹ค.

  • Istio CNI ๋ฐ Cloud Service Mesh๋Š” GKE Sandbox์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ TRAFFIC_DIRECTOR ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ด€๋ฆฌํ˜• Cloud Service Mesh๋Š” GKE Sandbox๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Cloud Shell์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ gcloud๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    1. Google Cloud CLI๋กœ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ FLEET_PROJECT_ID๋Š” Fleet ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์˜ ID์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ FLEET_PROJECT_ID๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ๋˜๋ฉฐ ํ”„๋กœ์ ํŠธ์™€ ์ด๋ฆ„์ด ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

             gcloud auth login --project FLEET_PROJECT_ID
      

    2. ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

             gcloud components update
      

  7. Fleet ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์—์„œ ํ•„์š”ํ•œ API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

      gcloud services enable mesh.googleapis.com \
          --project=FLEET_PROJECT_ID
    

mesh.googleapis.com์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด ๋‹ค์Œ API๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

์ผ๋ถ€ ํ•„์ˆ˜ API๋Š” ๋‹ค๋ฅธ API์— ์ž„์‹œ ์ข…์† ํ•ญ๋ชฉ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.
API ๋ชฉ์  ์‚ฌ์šฉ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
meshconfig.googleapis.com Cloud Service Mesh๋Š” Mesh Configuration API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์˜ ๊ตฌ์„ฑ ๋ฐ์ดํ„ฐ๋ฅผ Google Cloud๋กœ ๋ฆด๋ ˆ์ดํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Mesh Configuration API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด Google Cloud ์ฝ˜์†”์—์„œ Cloud Service Mesh ํŽ˜์ด์ง€์— ์•ก์„ธ์Šคํ•˜๊ณ  Cloud Service Mesh ์ธ์ฆ ๊ธฐ๊ด€์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”
meshca.googleapis.com ๊ด€๋ฆฌํ˜• Cloud Service Mesh์—์„œ ์‚ฌ์šฉํ•˜๋Š” Cloud Service Mesh ์ธ์ฆ ๊ธฐ๊ด€๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”
container.googleapis.com Google Kubernetes Engine(GKE) ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”
gkehub.googleapis.com ๋ฉ”์‹œ๋ฅผ Fleet์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”
monitoring.googleapis.com ๋ฉ”์‹œ ์›Œํฌ๋กœ๋“œ์— ๋Œ€ํ•œ ์›๊ฒฉ ๋ถ„์„์„ ์บก์ฒ˜ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”
stackdriver.googleapis.com ์„œ๋น„์Šค UI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”
opsconfigmonitoring.googleapis.com Google Cloud์™ธ๋ถ€ ํด๋Ÿฌ์Šคํ„ฐ์— ์„œ๋น„์Šค UI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”
connectgateway.googleapis.com ๊ด€๋ฆฌํ˜• Cloud Service Mesh ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์—์„œ ๋ฉ”์‹œ ์›Œํฌ๋กœ๋“œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ*
trafficdirector.googleapis.com ๊ฐ€์šฉ์„ฑ์ด ๋†’๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ด€๋ฆฌํ˜• ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ*
networkservices.googleapis.com ๊ฐ€์šฉ์„ฑ์ด ๋†’๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ด€๋ฆฌํ˜• ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ*
networksecurity.googleapis.com ๊ฐ€์šฉ์„ฑ์ด ๋†’๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ด€๋ฆฌํ˜• ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ*

๊ด€๋ฆฌํ˜• Cloud Service Mesh ๊ตฌ์„ฑ

Fleet API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌํ˜• Cloud Service Mesh๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋‹จ๊ณ„๋Š” ์ƒˆ Fleet ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ ์„ค์ •ํ• ์ง€ ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ณ„๋กœ ์‚ฌ์šฉ ์„ค์ •ํ• ์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

Fleet ๊ตฌ์„ฑ

Google Kubernetes Engine(GKE) Enterprise ๋ฒ„์ „์„ ์‚ฌ์šฉ ์„ค์ •ํ•œ ๊ฒฝ์šฐ ๊ด€๋ฆฌํ˜• Cloud Service Mesh๋ฅผ Fleet์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์œผ๋กœ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ ์ค‘์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ์ƒˆ Google Cloud ํด๋Ÿฌ์Šคํ„ฐ์šฉ GKE๋Š” ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๊ด€๋ฆฌํ˜• Cloud Service Mesh๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Fleet ๊ธฐ๋ณธ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Fleet ์ˆ˜์ค€ ๊ธฐ๋Šฅ ๊ด€๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ด€๋ฆฌํ˜• Cloud Service Mesh๋ฅผ Fleet์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์œผ๋กœ ์‚ฌ์šฉ ์„ค์ •ํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋™์•ˆ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ Fleet์— ๋“ฑ๋กํ•˜๋Š” ๊ฒฝ์šฐ Mesh CA๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค. Certificate Authority Service๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํด๋Ÿฌ์Šคํ„ฐ๋ณ„๋กœ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ด€๋ฆฌํ˜• Cloud Service Mesh์— Fleet ์ˆ˜์ค€ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ ๊ธฐ๋Šฅ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ๊ธฐ๋Šฅ ๊ด€๋ฆฌ์ž๋กœ ์ด๋™

  2. ์„œ๋น„์Šค ๋ฉ”์‹œ ์ฐฝ์—์„œ ๊ตฌ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. Google Cloud ์ฝ˜์†”์—์„œ ๋งŒ๋“  ๋ชจ๋“  ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ์— ์ƒ์†๋˜๋Š” ์„ค์ •์„ ๊ฒ€ํ† ํ•˜๊ณ  Fleet์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

  4. ์ด๋Ÿฌํ•œ ์„ค์ •์„ ์ ์šฉํ•˜๋ ค๋ฉด ๊ตฌ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  5. ํ™•์ธ ๋Œ€ํ™”์ƒ์ž์—์„œ ํ™•์ธ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  6. ์„ ํƒ์‚ฌํ•ญ: ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

    1. Fleet์˜ ํด๋Ÿฌ์Šคํ„ฐ ๋ชฉ๋ก์—์„œ ๋™๊ธฐํ™”ํ•  ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. Cloud Service Mesh๊ฐ€ ์„ค์น˜๋œ ํด๋Ÿฌ์Šคํ„ฐ๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    2. Fleet ์„ค์ •๊ณผ ๋™๊ธฐํ™”๋ฅผ ํด๋ฆญํ•˜๊ณ  ํ™•์ธ ๋Œ€ํ™”์ƒ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ํ™•์ธ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ๋ช‡ ๋ถ„ ์ •๋„ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud

Google Cloud CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Fleet ์ˆ˜์ค€ ๊ธฐ๋ณธ๊ฐ’์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ์„ค์ •์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Fleet ์ˆ˜์ค€ ์„ค์ •

    • ํ•œ ์ค„์˜ management: automatic๋งŒ ํฌํ•จ๋œ mesh.yaml ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

      echo "management: automatic" > mesh.yaml
      
    • Fleet์—์„œ Cloud Service Mesh๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

      gcloud container fleet mesh enable --project FLEET_PROJECT_ID \
          --fleet-default-member-config mesh.yaml
      

      ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด GKE Enterprise๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      ERROR: (gcloud.container.fleet.mesh.enable) FAILED_PRECONDITION: The
      [anthos.googleapis.com] service is required for this operation and is not
      enabled for the project [PROJECT_NUMBER]. Please use the Google Developers
      Console to enable it.: failed precondition
      
  • ๋„คํŠธ์›Œํฌ ์ˆ˜์ค€ ์„ค์ •

    • ๋„คํŠธ์›Œํฌ์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ Fleet ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์™€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ(์˜ˆ๋ฅผ ๋“ค์–ด ๊ณต์œ  VPC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ) Fleet ํ”„๋กœ์ ํŠธ์˜ Cloud Service Mesh ์„œ๋น„์Šค ๊ณ„์ •์ด ๋„คํŠธ์›Œํฌ ํ”„๋กœ์ ํŠธ์— ์•ก์„ธ์Šคํ•˜๋„๋ก ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๋„คํŠธ์›Œํฌ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

      Fleet ํ”„๋กœ์ ํŠธ์˜ ์„œ๋น„์Šค ๊ณ„์ •์— ๋„คํŠธ์›Œํฌ ํ”„๋กœ์ ํŠธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

      gcloud projects add-iam-policy-binding "NETWORK_PROJECT_ID"  \
          --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \
          --role roles/anthosservicemesh.serviceAgent
      
  • ํด๋Ÿฌ์Šคํ„ฐ ์ˆ˜์ค€ ์„ค์ •

    • Cloud Service Mesh์—์„œ ์‚ฌ์šฉํ•  ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ์ค€๋น„๊ฐ€ ๋˜๋ฉด Google Cloud CLI๋ฅผ ํ†ตํ•ด ํ•œ ๋ฒˆ์— ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ  ๋“ฑ๋กํ•˜์—ฌ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      gcloud container clusters create-auto CLUSTER_NAME \
          --fleet-project FLEET_PROJECT_ID \
          --location=LOCATION
      

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

      gcloud projects list --filter="FLEET_PROJECT_ID" --format="value(PROJECT_ID)"
      

      --location ํ”Œ๋ž˜๊ทธ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ปดํ“จํŒ… ์˜์—ญ์ด๋‚˜ ๋ฆฌ์ „(์˜ˆ: us-central1-a ๋˜๋Š” us-central1)์ž…๋‹ˆ๋‹ค.

    • ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ Fleet ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์™€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ, ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ์ ํŠธ์˜ Cloud Service Mesh ์„œ๋น„์Šค ๊ณ„์ •์ด ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ์ ํŠธ์— ์•ก์„ธ์Šคํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ์ ํŠธ์—์„œ ํ•„์š”ํ•œ API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

      Fleet ํ”„๋กœ์ ํŠธ์˜ ์„œ๋น„์Šค ๊ณ„์ •์— ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ์ ํŠธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

      gcloud projects add-iam-policy-binding "CLUSTER_PROJECT_ID"  \
          --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \
          --role roles/anthosservicemesh.serviceAgent
      

      ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ์ ํŠธ์—์„œ Mesh API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

      gcloud services enable mesh.googleapis.com \
        --project=CLUSTER_PROJECT_ID
      

      CLUSTER_PROJECT_ID๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ์ ํŠธ์˜ ๊ณ ์œ  ์‹๋ณ„์ž๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. Fleet๊ณผ ๋™์ผํ•œ ํ”„๋กœ์ ํŠธ์— ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“  ๊ฒฝ์šฐ CLUSTER_PROJECT_ID๋Š” FLEET_PROJECT_ID์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๊ณ„์†ํ•ด์„œ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ํ”„๋กœ๋น„์ €๋‹๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ๋ณ„ ๊ตฌ์„ฑ

๋ฉ”์‹œ์˜ ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์— ๊ด€๋ฆฌํ˜• Cloud Service Mesh๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Cloud Service Mesh Fleet ๊ธฐ๋Šฅ ์‚ฌ์šฉ ์„ค์ •

Fleet ํ”„๋กœ์ ํŠธ์—์„œ Cloud Service Mesh๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋“ฑ๋กํ•˜๋ ค๋Š” ๊ฒฝ์šฐ Cloud Service Mesh๋Š” Fleet ์ˆ˜์ค€์—์„œ ์‚ฌ์šฉ ์„ค์ •๋˜๋ฏ€๋กœ ์ด ๋ช…๋ น์–ด๋Š” ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

gcloud container fleet mesh enable --project FLEET_PROJECT_ID

Fleet์— ํด๋Ÿฌ์Šคํ„ฐ ๋“ฑ๋ก

  1. Fleet ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋กœ GKE ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. --location ํ”Œ๋ž˜๊ทธ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ปดํ“จํŒ… ์˜์—ญ์ด๋‚˜ ๋ฆฌ์ „(์˜ˆ: us-central1-a ๋˜๋Š” us-central1)์ž…๋‹ˆ๋‹ค.

    gcloud container clusters update CLUSTER_NAME \
      --location CLUSTER_LOCATION \
      --fleet-project FLEET_PROJECT_ID
    
  2. ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋“ฑ๋ก๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    gcloud container fleet memberships list --project FLEET_PROJECT_ID
    

    ์ถœ๋ ฅ ์˜ˆ์‹œ:

    NAME                 EXTERNAL_ID                           LOCATION
    cluster-1            1d8e255d-2b55-4df9-8793-0435461a2cbc  us-central1
    

    ์ž๋™ ๊ด€๋ฆฌ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ๋•Œ ํ•„์š”ํ•˜๋ฏ€๋กœ MEMBERSHIP_NAME์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

  3. ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋„คํŠธ์›Œํฌ ํ”„๋กœ์ ํŠธ๊ฐ€ Fleet ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์™€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ(์˜ˆ: ๊ณต์œ  VPC ์‚ฌ์šฉ) Fleet ํ”„๋กœ์ ํŠธ์˜ Cloud Service Mesh ์„œ๋น„์Šค ๊ณ„์ •์ด ๋„คํŠธ์›Œํฌ ํ”„๋กœ์ ํŠธ์— ์•ก์„ธ์Šคํ•˜๋„๋ก ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๋„คํŠธ์›Œํฌ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    Fleet ํ”„๋กœ์ ํŠธ์˜ ์„œ๋น„์Šค ๊ณ„์ •์— ๋„คํŠธ์›Œํฌ ํ”„๋กœ์ ํŠธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

     gcloud projects add-iam-policy-binding "NETWORK_PROJECT_ID"  \
          --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \
          --role roles/anthosservicemesh.serviceAgent
    
  4. ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ Fleet ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์™€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ, ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ์ ํŠธ์˜ Cloud Service Mesh ์„œ๋น„์Šค ๊ณ„์ •์ด ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ์ ํŠธ์— ์•ก์„ธ์Šคํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ์ ํŠธ์—์„œ ํ•„์š”ํ•œ API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ์ด ์ž‘์—…์€ ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด์ „์— ์ด ํด๋Ÿฌ์Šคํ„ฐ์™€ Fleet ํ”„๋กœ์ ํŠธ ์กฐํ•ฉ์— ๋Œ€ํ•ด ๊ด€๋ฆฌํ˜• Cloud Service Mesh๋ฅผ ๊ตฌ์„ฑํ–ˆ๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ด๋ฏธ ์ ์šฉ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

    Fleet ํ”„๋กœ์ ํŠธ์˜ ์„œ๋น„์Šค ๊ณ„์ •์— ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ์ ํŠธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

     gcloud projects add-iam-policy-binding "CLUSTER_PROJECT_ID" \
         --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \
         --role roles/anthosservicemesh.serviceAgent
    

    ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋กœ์ ํŠธ์—์„œ Mesh API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

     gcloud services enable mesh.googleapis.com \
         --project=CLUSTER_PROJECT_ID
    

Certificate Authority Service ๊ตฌ์„ฑ(์„ ํƒ์‚ฌํ•ญ)

์„œ๋น„์Šค ๋ฉ”์‹œ ๋ฐฐํฌ์— Certificate Authority Service(CA Service)๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ด€๋ฆฌํ˜• Cloud Service Mesh์šฉ Certificate Authority Service ๊ตฌ์„ฑ์— ๋”ฐ๋ผ Fleet์— ์‚ฌ์šฉ ์„ค์ •ํ•˜์„ธ์š”. ๋‹ค์Œ ์„น์…˜์œผ๋กœ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ ๊ด€๋ฆฌ ์‚ฌ์šฉ ์„ค์ •

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ž๋™ ๊ด€๋ฆฌ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  gcloud container fleet mesh update \
     --management automatic \
     --memberships MEMBERSHIP_NAME \
     --project FLEET_PROJECT_ID \
     --location MEMBERSHIP_LOCATION

๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • MEMBERSHIP_NAME์€ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ Fleet์— ๋“ฑ๋ก๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ๋•Œ ๋‚˜์—ด๋œ ๋ฉค๋ฒ„์‹ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • MEMBERSHIP_LOCATION์€ ๋ฉค๋ฒ„์‹ญ ์œ„์น˜์ž…๋‹ˆ๋‹ค(๋ฆฌ์ „ ๋˜๋Š” global).

    ์ตœ๊ทผ์— ์ด ๊ฐ€์ด๋“œ์˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉค๋ฒ„์‹ญ์„ ๋งŒ๋“  ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฆฌ์ „์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜์—ญ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์˜์—ญ์— ํ•ด๋‹นํ•˜๋Š” ๋ฆฌ์ „์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด us-central1-c์— ์˜์—ญ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’ us-central1์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    2023๋…„ 5์›” ์ด์ „์— ๋“ฑ๋กํ–ˆ๊ฑฐ๋‚˜ ๋ฉค๋ฒ„์‹ญ์„ ๋“ฑ๋กํ•  ๋•Œ global ์œ„์น˜๋ฅผ ์ง€์ •ํ•œ ๊ฒฝ์šฐ ์ด ๊ฐ’์€ global์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. gcloud container fleet memberships list --project FLEET_PROJECT_ID๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉค๋ฒ„์‹ญ์˜ ์œ„์น˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Terraform ์ง€์›

Cloud Service Mesh๋Š” GKEHub ๊ธฐ๋Šฅ ๋ฉค๋ฒ„์‹ญ ๋ชจ๋“ˆ์„ ํ†ตํ•ด Terraform์„ ํ†ตํ•œ ํ”„๋กœ๋น„์ €๋‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค ๋ฉ”์‹œ ํ”„๋กœ๋น„์ €๋‹ ํŠœํ† ๋ฆฌ์–ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ œ์–ด ์˜์—ญ์ด ํ”„๋กœ๋น„์ €๋‹๋˜์—ˆ๋Š”์ง€ ํ™•์ธ

๋ช‡ ๋ถ„ ํ›„ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์ƒํƒœ๊ฐ€ ACTIVE์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

gcloud container fleet mesh describe --project FLEET_PROJECT_ID

์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

...
membershipSpecs:
  projects/746296320118/locations/us-central1/memberships/demo-cluster-1:
    mesh:
      management: MANAGEMENT_AUTOMATIC
membershipStates:
  projects/746296320118/locations/us-central1/memberships/demo-cluster-1:
    servicemesh:
      controlPlaneManagement:
        details:
        - code: REVISION_READY
          details: 'Ready: asm-managed'
        state: ACTIVE
        implementation: ISTIOD | TRAFFIC_DIRECTOR
      dataPlaneManagement:
        details:
        - code: OK
          details: Service is running.
        state: ACTIVE
    state:
      code: OK
      description: 'Revision(s) ready for use: asm-managed.'
...

implementation ํ•„๋“œ์— ํ‘œ์‹œ๋œ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ(ISTIOD ๋˜๋Š” TRAFFIC_DIRECTOR)์„ ๊ธฐ๋กํ•ด ๋‘ก๋‹ˆ๋‹ค. ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์ฐจ์ด์ , ์ง€์›๋˜๋Š” ๊ตฌ์„ฑ, ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๊ตฌํ˜„ ์„ ํƒ ๋ฐฉ๋ฒ•์€ Cloud Service Mesh ์ง€์› ๊ธฐ๋Šฅ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

kubectl์—์„œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด kubectl ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์„น์…˜์„ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์— ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก kubectl์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

gcloud container clusters get-credentials CLUSTER_NAME \
      --location CLUSTER_LOCATION \
      --project CLUSTER_PROJECT_ID

์ธ๊ทธ๋ ˆ์Šค ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ๊ณผ ํ•จ๊ป˜ ์ž๋™์œผ๋กœ ๋ฐฐํฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ธ๊ทธ๋ ˆ์Šค ๊ฒŒ์ดํŠธ์›จ์ด์™€ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ๋ฐฐํฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Istio ์ธ๊ทธ๋ ˆ์Šค ๊ฒŒ์ดํŠธ์›จ์ด ๋˜๋Š” ์ด๊ทธ๋ ˆ์Šค ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ฒŒ์ดํŠธ์›จ์ด ๋ฐฐํฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. Kubernetes Gateway API๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฉ”์‹œ์šฉ ๊ฒŒ์ดํŠธ์›จ์ด ์ค€๋น„๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ๋‹ค๋ฅธ ์„ ํƒ์  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด Cloud Service Mesh์—์„œ ์„ ํƒ์  ๊ธฐ๋Šฅ ์‚ฌ์šฉ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ

๊ด€๋ฆฌํ˜• Cloud Service Mesh๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Google์—์„œ ํ”„๋ก์‹œ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์™„์ „ํžˆ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด ํ”„๋ก์‹œ์˜ ์ƒˆ ๋ฒ„์ „์„ ๋‹ค์‹œ ์‚ฝ์ž…ํ•˜๋„๋ก ์›Œํฌ๋กœ๋“œ๋ฅผ ์žฌ์‹œ์ž‘ํ•˜์—ฌ ์‚ฌ์ด๋“œ์นด ํ”„๋ก์‹œ ๋ฐ ์‚ฝ์ž…๋œ ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ๊ด€๋ฆฌํ˜• ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ๊ณผ ํ•จ๊ป˜ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ์—…๊ทธ๋ ˆ์ด๋“œ๋œ ํ›„ ์‹œ์ž‘๋˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์‹œ์ž‘ ํ›„ 2์ฃผ ์ด๋‚ด์— ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ์€ GKE ์ถœ์‹œ ์ฑ„๋„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ์ด ์‚ฌ์šฉ ์„ค์ •๋œ ์ƒํƒœ์—์„œ GKE ์ถœ์‹œ ์ฑ„๋„์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๊ด€๋ฆฌํ˜• Cloud Service Mesh๋Š” ๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ ์ถœ์‹œ์™€ ๊ฐ™์ด ๋ชจ๋“  ๊ธฐ์กด ์›Œํฌ๋กœ๋“œ์˜ ํ”„๋ก์‹œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

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

๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ์€ ์ด์ „ ๋ฒ„์ „์˜ ํ”„๋ก์‹œ๋ฅผ ์‹คํ–‰ ์ค‘์ธ ํฌ๋“œ๋ฅผ ์‚ญ์ œํ•˜์—ฌ ํ”„๋ก์‹œ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฑฐ๋Š” ์ ์ง„์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์–ด ํฌ๋“œ ์ค‘๋‹จ ์˜ˆ์‚ฐ์„ ๋”ฐ๋ฅด๊ณ  ๋ณ€๊ฒฝ ์†๋„๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ์—์„œ๋Š” ๋‹ค์Œ์„ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์‚ฝ์ž…๋˜์ง€ ์•Š์€ ํฌ๋“œ
  • ์ˆ˜๋™์œผ๋กœ ์‚ฝ์ž…๋œ ํฌ๋“œ
  • ์ž‘์—…
  • StatefulSets
  • DaemonSets

๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ ์‚ฌ์šฉ ์ค‘์ง€(์„ ํƒ์‚ฌํ•ญ)

์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๊ด€๋ฆฌํ˜• Cloud Service Mesh๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๊ฒฝ์šฐ ๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ์„ ์™„์ „ํžˆ ๋˜๋Š” ๊ฐœ๋ณ„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋˜๋Š” ํฌ๋“œ์— ๋Œ€ํ•ด ์‚ฌ์šฉ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋˜๋Š” ์ˆ˜๋™์œผ๋กœ ์ค‘์ง€๋œ ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด ๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ์ด ๊ณ„์† ์‚ฌ์šฉ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ์ˆ˜์ค€์—์„œ ๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ์„ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๊ณ  ์‚ฌ์ด๋“œ์นด ํ”„๋ก์‹œ๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋„๋ก ๋˜๋Œ๋ฆฌ๋ ค๋ฉด ์ฃผ์„์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

kubectl annotate --overwrite controlplanerevision -n istio-system \
  mesh.cloud.google.com/proxy='{"managed":"false"}'

๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ์„ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

kubectl annotate --overwrite namespace NAMESPACE \
  mesh.cloud.google.com/proxy='{"managed":"false"}'

ํฌ๋“œ์˜ ๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ์„ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

kubectl annotate --overwrite pod POD_NAME \
  mesh.cloud.google.com/proxy='{"managed":"false"}'

์œ ์ง€๋ณด์ˆ˜ ๊ธฐ๊ฐ„ ์‚ฌ์šฉ ์„ค์ •

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

Cloud Service Mesh๋Š” GKE ์œ ์ง€๋ณด์ˆ˜ ๊ธฐ๊ฐ„์„ ์‚ฌ์šฉํ•˜์—ฌ GKE์™€ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์œ ์ง€๋ณด์ˆ˜ ์•Œ๋ฆผ ์‚ฌ์šฉ ์„ค์ •

์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์˜ˆ์•ฝ๋˜๊ธฐ ์ตœ๋Œ€ 1์ฃผ์ผ ์ „์— ์˜ˆ์ •๋œ ๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ ์œ ์ง€๋ณด์ˆ˜์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ง€๋ณด์ˆ˜ ์•Œ๋ฆผ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•Œ๋ฆผ์„ ๋ฐ›์œผ๋ ค๋ฉด ๋จผ์ € GKE ์œ ์ง€๋ณด์ˆ˜ ๊ธฐ๊ฐ„๋„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด ์—…๊ทธ๋ ˆ์ด๋“œ ์ž‘์—… ์ตœ์†Œ 2์ผ ์ „์— ์•Œ๋ฆผ์ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ ์œ ์ง€๋ณด์ˆ˜ ์•Œ๋ฆผ์„ ๋ฐ›์œผ๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํŽ˜์ด์ง€๋กœ ์ด๋™

  2. Cloud Service Mesh ์—…๊ทธ๋ ˆ์ด๋“œ ํ–‰์˜ ์ด๋ฉ”์ผ ์—ด์—์„œ ๋ผ๋””์˜ค ๋ฒ„ํŠผ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜ ์•Œ๋ฆผ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜์„ธ์š”.

์•Œ๋ฆผ์„ ๋ฐ›์œผ๋ ค๋Š” ๊ฐ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐœ๋ณ„์ ์œผ๋กœ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์•Œ๋ฆผ์— ๋Œ€ํ•œ ์ด๋ฉ”์ผ ํ•„ํ„ฐ๋ฅผ ์„ค์ •ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ œ๋ชฉ ์ค„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Upcoming upgrade for your Cloud Service Mesh cluster "CLUSTER_LOCATION/CLUSTER_NAME".

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” ์ผ๋ฐ˜์ ์ธ ๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ ์œ ์ง€๋ณด์ˆ˜ ์•Œ๋ฆผ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ œ๋ชฉ ์ค„: Cloud Service Mesh ํด๋Ÿฌ์Šคํ„ฐ '<location/cluster-name>' ์—…๊ทธ๋ ˆ์ด๋“œ ์˜ˆ์ •

Cloud Service Mesh ์‚ฌ์šฉ์ž๋‹˜,

${instance_id}(https://console.cloud.google.com/kubernetes/clusters/details/${instance_id}/details?project=${project_id}) ํด๋Ÿฌ์Šคํ„ฐ์˜ Cloud Service Mesh ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ${scheduled_date_human_readable} ${scheduled_time_human_readable}์— ์—…๊ทธ๋ ˆ์ด๋“œ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์ถœ์‹œ ๋…ธํŠธ(https://cloud.google.com/service-mesh/v1.24/docs/release-notes)๋ฅผ ํ™•์ธํ•˜์—ฌ ์ƒˆ๋กœ์šด ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ทจ์†Œ๋˜๋ฉด ์ด๋ฉ”์ผ์„ ๋‹ค์‹œ ๋ณด๋‚ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Cloud Service MeshํŒ€

(c) 2023 Google LLC 1600 Amphithoter Parkway, Mountain View, CA 94043 Google Cloud Platform ๋˜๋Š” ๊ณ„์ •์˜ ์ค‘์š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ „์†ก๋˜๋Š” ๊ณต์ง€์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์„ค์ •(https://console.cloud.google.com/user-preferences/communication?project=${project_id})์„ ์ˆ˜์ •ํ•˜๋ฉด ์œ ์ง€๋ณด์ˆ˜ ๊ธฐ๊ฐ„ ์•Œ๋ฆผ ์ˆ˜์‹ ์„ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—”๋“œํฌ์ธํŠธ ๊ฒ€์ƒ‰ ๊ตฌ์„ฑ(๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ์„ค์น˜๋งŒ ํ•ด๋‹น)

๋ฉ”์‹œ์— ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฉด ์ด๋Ÿฌํ•œ ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ณ„์†ํ•˜๊ธฐ ์ „์— ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์— Cloud Service Mesh๊ฐ€ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Fleet API๋กœ Cloud Service Mesh๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด ์ด ํด๋Ÿฌ์Šคํ„ฐ์— ์—”๋“œํฌ์ธํŠธ ๊ฒ€์ƒ‰์ด ์‚ฌ์šฉ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐฉํ™”๋ฒฝ ํฌํŠธ๋ฅผ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜ ์ด์ƒ์˜ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด ์—”๋“œํฌ์ธํŠธ ๊ฒ€์ƒ‰์„ ์ค‘์ง€ํ•˜๋ ค๋ฉด ์„ ์–ธ์  API๋กœ ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„ ์—”๋“œํฌ์ธํŠธ ๊ฒ€์ƒ‰์—์„œ ์—”๋“œํฌ์ธํŠธ ๊ฒ€์ƒ‰์„ ์ค‘์ง€ํ•˜๋Š” ์•ˆ๋‚ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‘ ๊ฐœ์˜ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜ˆ์‹œ๋Š” HelloWorld ์„œ๋น„์Šค ์˜ˆ์‹œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ

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

๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์‚ฝ์ž…์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋Š” ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๊ตฌํ˜„์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๊ด€๋ฆฌํ˜•(TD)

  1. ๊ธฐ๋ณธ ์‚ฝ์ž… ๋ผ๋ฒจ์„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
kubectl label namespace NAMESPACE \
    istio.io/rev- istio-injection=enabled --overwrite

๊ด€๋ฆฌํ˜•(Istiod)

๊ถŒ์žฅ: ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๊ธฐ๋ณธ ์‚ฝ์ž… ๋ผ๋ฒจ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  kubectl label namespace NAMESPACE \
      istio.io/rev- istio-injection=enabled --overwrite

๊ด€๋ฆฌํ˜• Istiod ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ์žˆ๋Š” ๊ธฐ์กด ์‚ฌ์šฉ์ž: ๊ธฐ๋ณธ ์‚ฝ์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ ๋ฒ„์ „ ๊ธฐ๋ฐ˜ ์‚ฝ์ž…์€ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถœ์‹œ ์ฑ„๋„์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

    kubectl -n istio-system get controlplanerevision
    

    ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

    NAME                AGE
    asm-managed-rapid   6d7h
    

    ์ฐธ๊ณ : ์œ„ ๋ชฉ๋ก์— ๋‘ ๊ฐœ์˜ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋ฒ„์ „์ด ํ‘œ์‹œ๋˜๋ฉด ํ•˜๋‚˜๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฌ๋Ÿฌ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์ฑ„๋„์„ ๋‘๋Š” ๋ฐฉ์‹์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    ์ถœ๋ ฅ์—์„œ NAME ์—ด ์•„๋ž˜์˜ ๊ฐ’์€ Cloud Service Mesh ๋ฒ„์ „์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถœ์‹œ ์ฑ„๋„์— ํ•ด๋‹นํ•˜๋Š” ๋ฒ„์ „ ๋ผ๋ฒจ์ž…๋‹ˆ๋‹ค.

  2. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋ฒ„์ „ ๋ผ๋ฒจ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    kubectl label namespace NAMESPACE \
        istio-injection- istio.io/rev=REVISION_LABEL --overwrite
    

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ผ๋ฒจ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  kubectl get namespace -L istio-injection

์ถœ๋ ฅ ์˜ˆ์‹œ:

  NAME                 STATUS   AGE     ISTIO-INJECTION
  default              Active   5m9s    enabled

์ด์ œ ๊ด€๋ฆฌํ˜• Cloud Service Mesh๊ฐ€ ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ผ๋ฒจ์ด ์ง€์ •๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๊ธฐ์กด ์›Œํฌ๋กœ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ํ”„๋ก์‹œ๊ฐ€ ์‚ฝ์ž…๋˜๋„๋ก ์›Œํฌ๋กœ๋“œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ๊ฒฝ์šฐ ํŠน์ • ๊ตฌ์„ฑ์„ ํด๋Ÿฌ์Šคํ„ฐ ํ•˜์œ„ ์ง‘ํ•ฉ์œผ๋กœ ์ œํ•œํ•  ๊ณ„ํš์ด ์•„๋‹Œ ํ•œ ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ์—์„œ Kubernetes ๋ฐ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๊ตฌ์„ฑ์„ ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉ๋˜๋Š” ๊ตฌ์„ฑ์€ ํ•ด๋‹น ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ์ •๋ณด ์†Œ์Šค์ž…๋‹ˆ๋‹ค.

์‚ฝ์ž… ๋งž์ถค์„ค์ •(์„ ํƒ์‚ฌํ•ญ)

๊ธฐ๋ณธ๊ฐ’์„ ์žฌ์ •์˜ํ•˜๊ณ  ์‚ฝ์ž… ์„ค์ •์„ ๋งž์ถค์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด ๊ฒฝ์šฐ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๊ตฌ์„ฑ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฝ์ž…์„ ๋งž์ถค์„ค์ •ํ•˜๊ธฐ ์ „์— ์ƒ˜ํ”Œ ๋’ค์˜ ์ •๋ณด์—์„œ ํŠน์ • ์„ค์ • ๋ฐ ๊ถŒ์žฅ์‚ฌํ•ญ์— ๊ด€ํ•œ ๋…ธํŠธ๋ฅผ ์ฝ์–ด๋ณด์„ธ์š”.

๊ฐœ๋ณ„ ํฌ๋“œ์—์„œ ํฌ๋“œ๋ณ„ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์˜ต์…˜์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด istio-proxy ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌ๋“œ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ด๋“œ์นด ์‚ฝ์ž…์€ ์—ฌ๊ธฐ์— ์ •์˜๋œ ๋ชจ๋“  ๊ตฌ์„ฑ์„ ๊ธฐ๋ณธ ์‚ฝ์ž… ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•œ ์žฌ์ •์˜๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ๊ตฌ์„ฑ์€ CPU ์š”์ฒญ ๋‚ฎ์ถ”๊ธฐ, ๋ณผ๋ฅจ ๋งˆ์šดํŠธ ์ถ”๊ฐ€, preStop ํ›„ํฌ ์ถ”๊ฐ€๋ฅผ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ์„ค์ •์„ ๋งž์ถค์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: v1
kind: Pod
metadata:
  name: example
spec:
  containers:
  - name: hello
    image: alpine
  - name: istio-proxy
    image: auto
    resources:
      requests:
        cpu: "200m"
        memory: "256Mi"
      limits:
        cpu: "200m"
        memory: "256Mi"
    volumeMounts:
    - mountPath: /etc/certs
      name: certs
    lifecycle:
      preStop:
        exec:
          command: ["sleep", "10"]
  volumes:
  - name: certs
    secret:
      secretName: istio-certs

์ผ๋ฐ˜์ ์œผ๋กœ ํฌ๋“œ์— ์žˆ๋Š” ๋ชจ๋“  ํ•„๋“œ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ผ๋ถ€ ํ•„๋“œ์—๋Š” ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Kubernetes์—์„œ๋Š” ์‚ฝ์ž…์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— image ํ•„๋“œ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ด๋ฏธ์ง€๋ฅผ ์„ค์ •ํ•˜์—ฌ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, image๋ฅผ auto๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์‚ฌ์ด๋“œ์นด ์ธ์ ํ„ฐ๊ฐ€ ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • containers์˜ ์ผ๋ถ€ ํ•„๋“œ๋Š” ๊ด€๋ จ ์„ค์ •์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด CPU ํ•œ๋„๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ํ•„๋“œ๊ฐ€ ๋ชจ๋‘ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋˜์ง€ ์•Š์œผ๋ฉด ํฌ๋“œ ์‹œ์ž‘์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Kubernetes๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด spec ํฌ๋“œ์˜ ๋ฆฌ์†Œ์Šค์— requests ๋ฐ limits๋ฅผ ๋‘˜ ๋‹ค ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GKE Autopilot์—์„œ๋Š” requests๋งŒ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Autopilot์—์„œ ๋ฆฌ์†Œ์Šค ํ•œ๋„ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋˜ํ•œ ํฌ๋“œ์˜ ์ฃผ์„์œผ๋กœ ํŠน์ • ํ•„๋“œ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์œ„์˜ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •์„ ๋งž์ถค์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฃผ์„์—๋Š” ํŠนํžˆ ์ฃผ์˜ํ•˜์„ธ์š”.

  • GKE Standard์˜ ๊ฒฝ์šฐ sidecar.istio.io/proxyCPU๊ฐ€ ์„ค์ •๋˜๋ฉด sidecar.istio.io/proxyCPULimit์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‚ฌ์ด๋“œ์นด์˜ CPU ํ•œ๋„๊ฐ€ ๋ฌด์ œํ•œ์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  • GKE Standard์˜ ๊ฒฝ์šฐ sidecar.istio.io/proxyMemory๊ฐ€ ์„ค์ •๋˜๋ฉด sidecar.istio.io/proxyMemoryLimit์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‚ฌ์ด๋“œ์นด์˜ ๋ฉ”๋ชจ๋ฆฌ ํ•œ๋„๊ฐ€ ๋ฌด์ œํ•œ์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  • GKE Autopilot์˜ ๊ฒฝ์šฐ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ requests ๋ฐ limits ๋ฆฌ์†Œ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ๋ฆฌ์†Œ์Šค๊ฐ€ ์ดˆ๊ณผ ํ”„๋กœ๋น„์ €๋‹๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์ด๋ฏธ์ง€ ํ…œํ”Œ๋ฆฟ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์„ธ์š”. Autopilot์˜ ๋ฆฌ์†Œ์Šค ์ˆ˜์ • ์˜ˆ์‹œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜ ๋ฆฌ์†Œ์Šค ์ฃผ์„์„ ์ฐธ์กฐํ•˜์„ธ์š”.

spec:
  template:
    metadata:
      annotations:
        sidecar.istio.io/proxyCPU: "200m"
        sidecar.istio.io/proxyCPULimit: "200m"
        sidecar.istio.io/proxyMemory: "256Mi"
        sidecar.istio.io/proxyMemoryLimit: "256Mi"

๊ด€๋ฆฌํ˜• Cloud Service Mesh๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด Cloud Service Mesh์—์„œ ๊ด€๋ฆฌํ˜• Cloud Service Mesh๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ํ˜„์žฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ผ๋ฒจ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋Š” ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๊ตฌํ˜„์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๊ด€๋ฆฌํ˜•(TD)

  1. ๊ธฐ๋ณธ ์‚ฝ์ž… ๋ผ๋ฒจ์„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
kubectl label namespace NAMESPACE \
    istio.io/rev- istio-injection=enabled --overwrite

๊ด€๋ฆฌํ˜•(Istiod)

๊ถŒ์žฅ: ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๊ธฐ๋ณธ ์‚ฝ์ž… ๋ผ๋ฒจ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  kubectl label namespace NAMESPACE \
      istio.io/rev- istio-injection=enabled --overwrite

๊ด€๋ฆฌํ˜• Istiod ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ์žˆ๋Š” ๊ธฐ์กด ์‚ฌ์šฉ์ž: ๊ธฐ๋ณธ ์‚ฝ์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ ๋ฒ„์ „ ๊ธฐ๋ฐ˜ ์‚ฝ์ž…์€ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถœ์‹œ ์ฑ„๋„์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

    kubectl -n istio-system get controlplanerevision
    

    ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

    NAME                AGE
    asm-managed-rapid   6d7h
    

    ์ฐธ๊ณ : ์œ„ ๋ชฉ๋ก์— ๋‘ ๊ฐœ์˜ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋ฒ„์ „์ด ํ‘œ์‹œ๋˜๋ฉด ํ•˜๋‚˜๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฌ๋Ÿฌ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์ฑ„๋„์„ ๋‘๋Š” ๋ฐฉ์‹์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    ์ถœ๋ ฅ์—์„œ NAME ์—ด ์•„๋ž˜์˜ ๊ฐ’์€ Cloud Service Mesh ๋ฒ„์ „์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถœ์‹œ ์ฑ„๋„์— ํ•ด๋‹นํ•˜๋Š” ๋ฒ„์ „ ๋ผ๋ฒจ์ž…๋‹ˆ๋‹ค.

  2. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋ฒ„์ „ ๋ผ๋ฒจ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    kubectl label namespace NAMESPACE \
        istio-injection- istio.io/rev=REVISION_LABEL --overwrite
    
  1. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ๋ฐฐํฌ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.

    kubectl rollout restart deployment -n NAMESPACE
    
  2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ…Œ์ŠคํŠธํ•˜์—ฌ ์›Œํฌ๋กœ๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  3. ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์›Œํฌ๋กœ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ๊ฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ด์ „ ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

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

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์˜ˆ์ƒํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ฉด ๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ด€๋ฆฌํ˜• ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์œผ๋กœ ์ „ํ™˜ํ•œ ํ›„ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด istiod๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๋ฐฑ์—…์œผ๋กœ ๋ณด์กดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. istiod๋Š” ๋” ์ ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ž๋™์œผ๋กœ ์ถ•์†Œ๋ฉ๋‹ˆ๋‹ค. ์‚ญ์ œํ•˜๋ ค๋ฉด ์ด์ „ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์‚ญ์ œ๋กœ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ด€๋ฆฌํ˜• ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋ฌธ์ œ ํ•ด๊ฒฐ์˜ ์ •๋ณด์— ๋”ฐ๋ผ ์‹๋ณ„ํ•˜๊ณ  ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ „ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์‚ญ์ œ

์„ค์น˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— Google ๊ด€๋ฆฌํ˜• ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ์‚ฌ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•œ ํ›„ ์ด์ „ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true

์ž๋™ ์‚ฝ์ž… ๋Œ€์‹  istioctl kube-inject๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ๋˜๋Š” ์ถ”๊ฐ€์ ์ธ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ, ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์— ๋Œ€ํ•ด ์ธก์ •ํ•ญ๋ชฉ์„ ํ™•์ธํ•˜๊ณ  ์—ฐ๊ฒฐ๋œ ์—”๋“œํฌ์ธํŠธ ์ˆ˜๊ฐ€ 0์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋กค๋ฐฑ

์ด์ „ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ์ด์ „ ๋ฒ„์ „์— ์‚ฝ์ž…ํ•  ์›Œํฌ๋กœ๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์–ด์—์„œ ๋ฒ„์ „ ๊ฐ’ asm-191-1์€ ์˜ˆ์‹œ๋กœ๋งŒ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ ๊ฐ’์„ ์ด์ „ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ๋ฒ„์ „ ๋ผ๋ฒจ๋กœ ๋ฐ”๊พธ์„ธ์š”.

    kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-191-1 --overwrite
    
  2. ํ”„๋ก์‹œ์— ์ด์ „ ๋ฒ„์ „์ด ์ง€์ •๋˜๋„๋ก ์žฌ์‚ฝ์ž…์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ํฌ๋“œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

    kubectl rollout restart deployment -n NAMESPACE
    

๊ด€๋ฆฌํ˜• ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ์ž๋™์œผ๋กœ 0์œผ๋กœ ์ถ•์†Œ๋˜๊ณ  ์‚ฌ์šฉ ์ค‘์ด ์•„๋‹ ๋•Œ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณ€ํ˜• ์›นํ›… ๋ฐ ํ”„๋กœ๋น„์ €๋‹์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ๋™์ž‘์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด์ œ ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ asm-managed ๋ฒ„์ „์œผ๋กœ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋กค๋ฐฑํ•˜๋ ค๋ฉด Cloud Service Mesh install ๋ช…๋ น์–ด๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์„ ๋‹ค์‹œ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ๋‹ค์‹œ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

kubectl -n istio-system rollout undo deploy istio-ingressgateway

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

deployment.apps/istio-ingressgateway rolled back

Cloud Service Mesh ์ œ๊ฑฐ

๊ด€๋ฆฌํ˜• ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์€ ์‚ฌ์šฉํ•˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์—†์œผ๋ฉด 0์œผ๋กœ ์ž๋™ ์ถ•์†Œ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‹จ๊ณ„๋Š” Cloud Service Mesh ์ œ๊ฑฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.