• Aiden's Lab แ„‚แ…ฒแ„‰แ…ณแ„…แ…ฆแ„แ…ฅ
  • Posts
  • ๐Ÿ”ญLinkerd แ„ƒแ…ฉแ„‹แ…ตแ†ธแ„‹แ…ต แ„€แ…ฉแ„†แ…ตแ†ซแ„ƒแ…ฌแ†ซแ„ƒแ…กแ„†แ…งแ†ซ แ„Œแ…ตแ†จแ„Œแ…ฅแ†ธ แ„‰แ…กแ„‹แ…ญแ†ผแ„’แ…ขแ„‡แ…ฉแ„Œแ…ก! Linkerd แ„’แ…ขแ†จแ„‰แ…ตแ†ท แ„€แ…ตแ„‚แ…ณแ†ผ แ„‰แ…ตแ†ฏแ„‰แ…ณแ†ธ แ„€แ…กแ„‹แ…ตแ„ƒแ…ณ

๐Ÿ”ญLinkerd แ„ƒแ…ฉแ„‹แ…ตแ†ธแ„‹แ…ต แ„€แ…ฉแ„†แ…ตแ†ซแ„ƒแ…ฌแ†ซแ„ƒแ…กแ„†แ…งแ†ซ แ„Œแ…ตแ†จแ„Œแ…ฅแ†ธ แ„‰แ…กแ„‹แ…ญแ†ผแ„’แ…ขแ„‡แ…ฉแ„Œแ…ก! Linkerd แ„’แ…ขแ†จแ„‰แ…ตแ†ท แ„€แ…ตแ„‚แ…ณแ†ผ แ„‰แ…ตแ†ฏแ„‰แ…ณแ†ธ แ„€แ…กแ„‹แ…ตแ„ƒแ…ณ

Linkerdแ„…แ…ณแ†ฏ minikube แ„แ…ณแ†ฏแ„…แ…ฅแ„‰แ…ณแ„แ…ฅแ„‹แ…ฆ แ„Œแ…ตแ†จแ„Œแ…ฅแ†ธ แ„‰แ…ฅแ†ฏแ„Žแ…ตแ„’แ…กแ„€แ…ฉ แ„‹แ…งแ„…แ…ฅ แ„’แ…ขแ†จแ„‰แ…ตแ†ท แ„€แ…ตแ„‚แ…ณแ†ผแ„‹แ…ณแ†ฏ แ„‰แ…กแ„‹แ…ญแ†ผแ„’แ…ขแ„‡แ…ฉแ„†แ…ง Service Meshแ„‹แ…ฆ แ„ƒแ…ขแ„’แ…ข แ„‹แ…กแ†ฏแ„‹แ…กแ„‡แ…ฉแ†ธแ„‚แ…ตแ„ƒแ…ก.

์•ˆ๋…•ํ•˜์„ธ์š”, Aidenโ€™s Lab ๋‰ด์Šค๋ ˆํ„ฐ์ž…๋‹ˆ๋‹ค.

Linkerd์˜ ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋‹ค๋ค˜๋˜ ์ง€๋‚œ ์‹œ๊ฐ„์— ์ด์–ด์„œ, ์ด๋ฒˆ์—” Linkerd๋ฅผ ์ง์ ‘ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•ด๋ณด๋Š” ์‹ค์Šต์„ ์ง„ํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ปดํŒฉํŠธํ•œ ์‹ค์Šต์„ ์œ„ํ•ด, Linkerd๋ฅผ ์‚ฌ์šฉํ•  Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋Š” minikube๋กœ ๊ตฌ์„ฑํ•ด์„œ ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. minikube๋Š” ์ด๋ฏธ ์ง€๋‚œ ๊ธ€์—์„œ ๊ณ„์† ๋‹ค๋ค˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€๋กœ ์„ค๋ช…ํ•˜์ง„ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.

Linkerd๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ ์ „์—, ํšจ๊ณผ์ ์ธ ์‹ค์Šต์„ ์œ„ํ•ด Linkerd์˜ ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์ข€ ๋” ์‚ดํŽด๋ณผ๊ฒŒ์š”.

Linkerd์˜ ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ ์ข€ ๋” ์‚ดํŽด๋ณด๊ธฐ

Linkerd์˜ Control Plane์€ Service Mesh์˜ ๋‘๋‡Œ ์—ญํ• ์„ ํ•˜๋ฉฐ ์•„๋ž˜์™€ ๊ฐ™์€ ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • controller : ๊ณต์šฉ API ์ œ๊ณต

  • destination : ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ์™€ ๋ผ์šฐํŒ… ์ •๋ณด ๊ด€๋ฆฌ

  • identity : mTLS๋ฅผ ์œ„ํ•œ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ๋ฐ ๊ด€๋ฆฌ

  • proxy-injector : Pod ์ƒ์„ฑ ์‹œ ์‚ฌ์ด๋“œ์นด ํ”„๋ก์‹œ๋ฅผ ์ž๋™์œผ๋กœ ์ฃผ์ž…

๊ทธ๋ฆฌ๊ณ  Linkerd์˜ Data Plane์€ ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ Pod์— ํ•จ๊ป˜ ๋ฐฐํฌ๋˜๋Š” ์ดˆ๊ฒฝ๋Ÿ‰ ์‚ฌ์ด๋“œ์นด ํ”„๋ก์‹œ์ธ linkerd-proxy๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

Linkerd ํ”„๋ก์‹œ๋Š” ํ•ด๋‹น Pod๋กœ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๋Š” ๋ชจ๋“  TCP ํŠธ๋ž˜ํ”ฝ(์ฃผ๋กœ HTTP, gRPC ๋“ฑ)์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ๊ฐ€๋กœ์ฑ„๋Š”๋ฐ์š”. ์ด๋ ‡๊ฒŒ ๊ฐ€๋กœ์ฑˆ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€์ง€๊ณ  mTLS ์•”ํ˜ธํ™”, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ์žฌ์‹œ๋„, ํƒ€์ž„์•„์›ƒ, ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Linkerd CLI๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ์ปฌ ๋จธ์‹ ์—์„œ Linkerd Control Plane๊ณผ ํ†ต์‹ ํ•˜๊ณ  Service Mesh๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํˆด์ž…๋‹ˆ๋‹ค.

CLI ํ™˜๊ฒฝ์—์„œ Linkerd ์„ค์น˜, ์ƒํƒœ ํ™•์ธ, ๋ฆฌ์†Œ์Šค ํ†ต๊ณ„ ์กฐํšŒ, ์‹ค์‹œ๊ฐ„ ํŠธ๋ž˜ํ”ฝ ํ™•์ธ, ํ”„๋ก์‹œ ์ฃผ์ž… ๋“ฑ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. Linkerd ์šด์˜ ๋ฐ ๋””๋ฒ„๊น…์— ํ•„์ˆ˜์ ์ธ ํˆด์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ Linkerd Viz๋Š” Linkerd Service Mesh์˜ ์ƒํƒœ์™€ ์„ฑ๋Šฅ์„ ์‹œ์ž‘์ ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋Š” ์ต์Šคํ…์…˜(ํ™•์žฅ ๊ธฐ๋Šฅ ๋ชจ์Œ)์ž…๋‹ˆ๋‹ค.

์›น ๊ธฐ๋ฐ˜ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ํŠธ๋ž˜ํ”ฝ, ์„ฑ๊ณต๋ฅ , ์ง€์—ฐ ์‹œ๊ฐ„ ๋“ฑ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. Prometheus ํ˜ธํ™˜ ๋ฉ”ํŠธ๋ฆญ API๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์™ธ๋ถ€ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ๊ณผ์˜ ์—ฐ๋™๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์‹ค์Šต ํ™˜๊ฒฝ ์ค€๋น„: Linkerd CLI ์„ค์น˜

์ €๋Š” WSL ํ™˜๊ฒฝ์—์„œ ๋ณธ ์‹ค์Šต์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์—์„œ k8s-test๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ minikube ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋จผ์ € ์‹คํ–‰ํ• ๊ฒŒ์š”.

๊ทธ ๋‹ค์Œ, ์•„๋ž˜ Linkerd CLI ์„ค์น˜ ๋ช…๋ น์–ด ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/install-edge | sh

๊ทธ๋Ÿผ ์•„๋ž˜์™€ ๊ฐ™์ด Linkerd ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹ค์šด๋กœ๋“œ๋˜๊ณ  ์„ค์น˜๊ฐ€ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

export PATH=$HOME/.linkerd2/bin:$PATH

์—ฌ๊ธฐ๊นŒ์ง€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด linkerd version ๋ช…๋ น์–ด๋กœ Linkerd CLI๊ฐ€ ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์•„์ง minikue ํด๋Ÿฌ์Šคํ„ฐ์— Linkerd์˜ Control Plane์ด ๋ฐฐํฌ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Server version์€ unavailable ์ƒํƒœ์ธ๋ฐ์š”. ๋ฐ‘์—์„œ Control Plane๊นŒ์ง€ ๋ฐฐํฌ๋œ ๋‹ค์Œ ๋‹ค์‹œ ํ™•์ธํ•ด๋ณด๋ฉด Server version๋„ ์—…๋ฐ์ดํŠธ๋  ๊ฒ๋‹ˆ๋‹ค.

Linkerd๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— Gateway API๋ผ๋Š” CRD๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. CRD(Custom Resource Definition)๋ž€ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ธฐ๋ณธ ๋ฆฌ์†Œ์Šค ํƒ€์ž…(Deployment, StatefulSet ๋“ฑ) ์™ธ๋กœ ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•ด ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ๊ฑธ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Gateway API๋Š” ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ๊ณผ ๊ด€๋ จ๋œ ๋ฆฌ์†Œ์Šค๋“ค์„ ์ •์˜ํ•˜๋Š” CRD์ธ๋ฐ์š”. ๋งŒ์•ฝ ๊ธฐ์กด์— ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์— Gateway API๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.1/standard-install.yaml

๊ทธ๋Ÿผ ์•„๋ž˜์™€ ๊ฐ™์ด Gateway API๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” CRD๋“ค์ด ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ, ํ„ฐ๋ฏธ๋„์— linkerd check --pre ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ•ด๋‹น ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ Linkerd๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์— ํ•„์š”ํ•œ ์‚ฌ์ „ ์กฐ๊ฑด๋“ค์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes API ์ƒํƒœ์™€ ๋ฒ„์ „๋ถ€ํ„ฐ Linkerd CLI ๋ฒ„์ „๊นŒ์ง€ ์ž ์žฌ์ ์ธ ํ™˜๊ฒฝ ์ด์Šˆ๋ฅผ ๋ฏธ๋ฆฌ ํŒŒ์•… ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ์‚ฌ์ „ ์กฐ๊ฑด์ด ๋ชจ๋‘ ์ถฉ์กฑ๋˜์—ˆ๋‹ค๊ณ  ํ•˜๋‹ˆ, ์ด์ œ ํด๋Ÿฌ์Šคํ„ฐ์— Linkerd์˜ Control Plane์„ ๋ฐฐํฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

minikube์— Linkerd Control Plane ๋ฐฐํฌํ•˜๊ธฐ

Linkerd์˜ Control Plane์„ ๋ฐฐํฌํ•˜๋ ค๋ฉด, ๋จผ์ € ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ Control Plane ๋™์ž‘์— ํ•„์š”ํ•œ CRD๋“ค์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

linkerd install --crds | kubectl apply -f -

๊ทธ ๋‹ค์Œ, ๋ณธ๊ฒฉ์ ์œผ๋กœ Linkerd์˜ Control Plane์„ ์„ค์น˜ํ•ด๋ด…์‹œ๋‹ค. ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ž๋™์œผ๋กœ Linkerd Control Plane์„ ๊ตฌ์„ฑํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

linkerd install | kubectl apply -f -

๋งŒ์•ฝ minikube๊ฐ€ Docker๋กœ ๋™์ž‘ ์ค‘์ด๋ผ๋ฉด...

Linkerd Control Plane ์„ค์น˜๋ฅผ ์‹œ๋„ํ•  ๋•Œ proxy-init ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฐ˜๋“œ์‹œ root ์œ ์ €๋กœ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ Linkerd ์„ค์น˜๊ฐ€ ์•ˆ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿด ๋• linkerd install --set proxyInit.runAsRoot=true | kubectl apply -f - ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ Linkerd๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ € ์—ญ์‹œ minikube๊ฐ€ Docker๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋กœ Linkerd Control Plane์„ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ Linkerd ๋™์ž‘์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๊ฐ€ linkerd Namespace์— ๋ฐฐํฌ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (kubectl -n linkerd get all)

๋‹ค์Œ์œผ๋กœ linkerd check ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Linkerd Control Plane ๋™์ž‘์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๊ฐ€ ์„ค์น˜๋˜์—ˆ๊ณ  ์ •์ƒ ๋™์ž‘ ์ค‘์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ, Linkerd์˜ Observability ๊ธฐ๋Šฅ์„ ๊ฐ•ํ™”ํ•˜๋Š” viz ์ต์Šคํ…์…˜์„ ์„ค์น˜ํ•ด๋ด…์‹œ๋‹ค.

Linkerd viz๊ฐ€ ์„ค์น˜๋˜๋ฉด ์›น ๋Œ€์‹œ๋ณด๋“œ, ์˜จ๋””๋งจ๋“œ ํƒญ ๊ธฐ๋Šฅ, Prometheus ํ˜ธํ™˜ ๋ฉ”ํŠธ๋ฆญ API ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ์š”. Service Mesh์˜ ์ƒํƒœ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํŒŒ์•…ํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ๋ฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„์—์„œ ์•„๋ž˜ Linkerd viz ์ต์Šคํ…์…˜ ์„ค์น˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด...

linkerd viz install | kubectl apply -f -

์•„๋ž˜์™€ ๊ฐ™์ด Linkerd viz ์ต์Šคํ…์…˜ ์ž‘๋™์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

Linkerd viz ์ต์Šคํ…์…˜์€ linkerd-viz Namespace์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„์—์„œ linkerd viz dashboard ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด Linkerd viz ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์—ด๋ ธ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜์˜ฌ ํ…๋ฐ์š”. ์‹ค์Šต ์ค‘์ธ ๋กœ์ปฌ ๋จธ์‹ ๊ณผ Linkerd ๋Œ€์‹œ๋ณด๋“œ Service ๊ฐ„์˜ ํฌํŠธ ํฌ์›Œ๋”ฉ์ด ์„ค์ •๋˜์–ด Linkerd ๋Œ€์‹œ๋ณด๋“œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ ์ƒํƒœ๊ฐ€ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€์—์„œ ์•Œ๋ ค์ฃผ๋Š” URL์„ ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๋ฉด...

์ด๋ ‡๊ฒŒ Linkerd viz ์›น ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ Namespace ๋ณ„๋กœ ํ‘œ์‹œ๋˜๋Š” ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•œ ์„ฑ๊ณต๋ฅ , RPS, P99 ๋“ฑ์˜ ์ง€ํ‘œ๋กœ ์ง€๊ธˆ Linkerd๊ฐ€ ์ •์ƒ ๋™์ž‘ํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ, linkerd viz dashboard ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ ํ„ฐ๋ฏธ๋„์„ ๊ณ„์† ์ผœ๋‘ฌ์•ผ Linkerd viz ๋Œ€์‹œ๋ณด๋“œ์— ๊ณ„์† ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์  ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

์ด์ œ ์šฐ๋ฆฌ์˜ minikube ํด๋Ÿฌ์Šคํ„ฐ์—์„œ Linkerd ๊ตฌ์„ฑ์„ ๋ชจ๋‘ ๋งˆ์ณค์Šต๋‹ˆ๋‹ค.๐ŸŽ‰

๋‹ค์Œ์œผ๋กœ Linkerd ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ ์œ„ํ•ด ๋ฐ๋ชจ์šฉ Deployment 2๊ฐœ๋ฅผ ๋ฐฐํฌํ•  ๊ฑด๋ฐ์š”. Linkerd Service mesh์— Deployment๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์•„์ฃผ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค!

์‹ค์Šต์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ๋ฐ Service Mesh์— ์ถ”๊ฐ€ํ•˜๊ธฐ

์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ ๊ตฌ์„ฑํ•œ Linkerd Service mesh๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŠธ๋ž˜ํ”ฝ์„ ๊ด€์ฐฐํ•˜๋ ค๋ฉด ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์ด ๋ฐœ์ƒํ•˜๋Š” Service๊ฐ€ Linkerd Service mesh ์•ˆ์— ํฌํ•จ๋˜์–ด์•ผ๊ฒ ์ฃ ? Linkerd๋Š” ์ด๋ฅผ ์œ„ํ•ด ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  1. linkerd inject ๋ช…๋ น์–ด๋กœ ์ด๋ฏธ ๋ฐฐํฌ๋œ Kubernetes ๋ฆฌ์†Œ์Šค์— Linkerd proxy ์ฃผ์ž…

  2. Linkerd์—์„œ ์ธ์‹ ๊ฐ€๋Šฅํ•œ ์–ด๋…ธํ…Œ์ด์…˜์„ ํŠน์ • Namespace์— ์ถ”๊ฐ€

์šฐ๋ฆฌ๊ฐ€ ์ตœ๊ทผ๊นŒ์ง€ ์‚ฌ์šฉํ•œ ํ„ฐ๋ฏธ๋„์€ linkerd viz dashboard ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณ„์† ์‹คํ–‰ ์ค‘์ด๋‹ˆ, ๋ณ„๋„์˜ ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด์„œ ์‹ค์Šต์„ ์ด์–ด๊ฐ€์ฃผ์„ธ์š”.

๊ทธ๋ฆฌ๊ณ  Linkerd ์‹ค์Šต์— ์‚ฌ์šฉ๋  Kubernetes ๋ฆฌ์†Œ์Šค๋ฅผ ๋”ฐ๋กœ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด linkerd-demo๋ž€ ์ด๋ฆ„์˜ Namespace๋ฅผ ๋จผ์ € ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.

1. linkerd inject ๋ช…๋ น์–ด ์‚ฌ์šฉ

linkerd inject ๋ช…๋ น์–ด๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ ์œ„ํ•ด, ๋จผ์ € Linkerd ํ”„๋ก์‹œ๊ฐ€ ์—†๋Š” Nginx Deployment๋ฅผ ๋ฐฐํฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ Deployment์™€ Service ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ YAMLํŒŒ์ผ๋กœ ์ €์žฅํ•œ ๋‹ค์Œ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉ(apply)ํ•ด์ฃผ์„ธ์š”.

# 1. Linkerd๋กœ ๊ด€์ฐฐํ•  '์„œ๋ฒ„' ์—ญํ•  Nginx Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-world-server
  namespace: linkerd-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hello-world-server
  template:
    metadata:
      labels:
        app: hello-world-server
    spec:
      containers:
      - name: hello-world
        image: nginx:alpine
        ports:
        - containerPort: 80

---
# 2. '์„œ๋ฒ„' Nginx Deployment๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” Service
apiVersion: v1
kind: Service
metadata:
  name: hello-world-server
  namespace: linkerd-demo
spec:
  selector:
    app: hello-world-server
  ports:
  - name: http
    port: 80
    targetPort: 80

๊ทธ ๋‹ค์Œ Linkerd viz ๋Œ€์‹œ๋ณด๋“œ๋กœ ๋Œ์•„์™€์„œ ์•„๊นŒ ์ƒ์„ฑํ•œ linkerd-demo Namespace๋ฅผ ํด๋ฆญํ•ด๋ณด๋ฉด...

๋ฐฉ๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐํฌํ•œ hello-world-server Deployment ๋“ฑ์ด ํ‘œ์‹œ๋˜๊ณ ๋Š” ์žˆ์ง€๋งŒ, ์•„์ง ๋ฉ”ํŠธ๋ฆญ์ด ์•„๋ฌด๊ฒƒ๋„ ํ‘œ์‹œ๋˜๊ณ  ์žˆ์ง€ ์•Š์ฃ ? Linkerd ํ”„๋ก์‹œ๊ฐ€ ํ•ด๋‹น Deployment์— ์ฃผ์ž…๋˜์ง€ ์•Š์•„์„œ Linkerd๊ฐ€ ์ด Deployment์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ ๋ฉ”ํŠธ๋ฆญ์„ ๋ฐ›์•„์˜ค์ง€ ๋ชปํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋ฏธ์ง€์—์„œ ๋ณด์ด๋Š” Meshed(๋ฉ”์‹œํ™”)๋Š” ํ˜„์žฌ Service mesh์— ํฌํ•จ๋œ ๋ฆฌ์†Œ์Šค์˜ ๊ฐœ์ˆ˜๋ฅผ ํ‘œ์‹œํ•œ ์ˆ˜์น˜์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๋ฉ”์‹œํ™”๋œ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•˜๋‚˜๋„ ์—†์–ด์„œ ๊ฐ๊ฐ '0/1'๋กœ ํ‘œ์‹œ๋œ ๊ฑฐ์ฃ .

์ด๋ ‡๊ฒŒ Linkerd ์‚ฌ์šฉ ์ „๋ถ€ํ„ฐ ๋ฐฐํฌ๋œ Kubernetes์˜ ๋ฆฌ์†Œ์Šค, ์ •ํ™•ํžˆ๋Š” Pod ์„ค์ •์— Linkerd ํ”„๋ก์‹œ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ง์ ‘ ์ถ”๊ฐ€ํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ ๋ฐ”๋กœ linkerd inject์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์ง€๊ธˆ ๋ฐฐํฌ๋˜์–ด์žˆ๋Š” Deployment์— Linkerd ํ”„๋ก์‹œ๋ฅผ ์ฃผ์ž…ํ•ด์„œ ๋‹ค์‹œ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

kubectl -n linkerd-demo get deploy -o yaml | linkerd inject - | kubectl apply -f -

์œ„ ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ๋ฆ„์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

  1. linkerd-demo Namespace์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  Deployment์˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ YAML ์–‘์‹์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.

  2. ๊ฐ€์ ธ์˜จ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์˜ Pod ์„ค์ •์— Linkerd ํ”„๋ก์‹œ ๊ด€๋ จ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ฃผ์ž…ํ•œ๋‹ค.

  3. ์ฃผ์ž…๋œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌํ•œ๋‹ค.

ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ฃผ์ž… ๋ฐ ์„ค์ •์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋œจ๊ณ ,

ํ•ด๋‹น Deployment์˜ ์„ค์ •์„ describe ๋ช…๋ น์–ด๋กœ ๋ณด๋ฉด...

๋นจ๊ฐ„ ๋„ค๋ชจ๋กœ ํ‘œ์‹œํ•œ ๊ฒƒ์ฒ˜๋Ÿผ Pod ์„ค์ • ๋‚ด์— Linkerd์˜ inject๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ๋‹ค๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ Linkerd ์›น ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ด๋ณผ๊นŒ์š”?

Meshed๋„ 1/1๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ๊ณ  ๊ฐ ๋ฉ”ํŠธ๋ฆญ๋„ ์ •์ƒ์ ์œผ๋กœ ํ‘œ์‹œ๋˜๊ณ  ์žˆ๋„ค์š”!

์ด๋ ‡๊ฒŒ linkerd inject ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด์— ๋ฐฐํฌ๋˜์–ด์žˆ๋˜ Kubernetes ๋ฆฌ์†Œ์Šค์˜ Pod๋„ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ Linkerd์˜ Service mesh์— ํŽธ์ž…์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. Linkerd๊ฐ€ ์ธ์‹ ๊ฐ€๋Šฅํ•œ ์–ด๋…ธํ…Œ์ด์…˜์„ Namespace์— ์ถ”๊ฐ€

๋งŒ์•ฝ ํŠน์ • Namespace์— ๋ฐฐํฌ๋˜๋Š” Pod๋Š” ์ƒ์„ฑ๋˜์ž๋งˆ์ž Linkerd Service mesh์— ํฌํ•จ์‹œํ‚ค๊ณ  ์‹ถ์€ ๋• ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์ถฉ๋ถ„ํžˆ ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์ธ๋ฐ์š”.

์ด๋Ÿด ๋• Linkerd์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์›ํ•˜๋Š” Namespace์— ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ๋‚ด์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ์‹ค์Šตํ•ด๋ณผ๊ฒŒ์š”.

๋จผ์ € ๊ธฐ์กด Namespace(linkerd-demo)์˜ ์„ค์ •์„ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ด Namespace๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋‹ค๋ฅธ ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ๊ฐ’๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ์š”. kubectl์—๋Š” ๋ฆฌ์†Œ์Šค์— ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ช…๋ น์–ด(annotate)๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ Linkerd์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

kubectl annotate namespace linkerd-demo linkerd.io/inject=enabled

๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ Namespace ์„ค์ •์„ ํ™•์ธํ•ด๋ณด๋ฉด ์•„๊นŒ ์ฒซ ๋ฒˆ์งธ Inject ๋ฐฉ์‹์—์„œ ์ถ”๊ฐ€๋œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์–ด๋…ธํ…Œ์ด์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”๋ฐ์š”. ์ด์ œ linkerd-demo Namespace์— ์ถ”๊ฐ€๋˜๋Š” ๋ชจ๋“  Pod๋Š” Linkerd ํ”„๋ก์‹œ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ™์ด ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธˆ๋ฐฉ ๋๋‚ฌ์ฃ ?

์ด์ œ ์•„๋ž˜ ์ƒˆ๋กœ์šด Deployment๋ฅผ ํ•ด๋‹น Namespace์— ๋ฐฐํฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด traffic-generator๋ž€ ์ด๋ฆ„์˜ Deployment๋Š” ์•„๊นŒ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐํฌํ–ˆ๋˜ hello-world-server์— 2์ดˆ๋งˆ๋‹ค HTTP ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‚ด๋Š”๋ฐ์š”. ์ด๊ฑด ์ด๋”ฐ Linkerd์˜ ํŠธ๋ž˜ํ”ฝ ๊ด€์ฐฐ ๊ธฐ๋Šฅ์—์„œ๋„ ์‚ดํŽด๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

# '์„œ๋ฒ„'๋กœ ๊พธ์ค€ํžˆ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐœ์ƒ์‹œํ‚ฌ 'ํด๋ผ์ด์–ธํŠธ' Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: traffic-generator
  namespace: linkerd-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: traffic-generator
  template:
    metadata:
      labels:
        app: traffic-generator
    spec:
      containers:
      - name: traffic-curl
        image: curlimages/curl:latest
        # 2์ดˆ๋งˆ๋‹ค hello-world-server ์„œ๋น„์Šค๋กœ HTTP ์š”์ฒญ ๋ณด๋ƒ„
        command: ["sh", "-c", "while true; do echo '--> Sending request to hello-world-server'; curl -s http://hello-world-server > /dev/null; echo 'Request sent.'; sleep 2; done"]

์ €๋Š” ์œ„ YAML ํŒŒ์ผ์„ client.yaml์ด๋ž€ ์ด๋ฆ„์œผ๋กœ ์ €์žฅ ํ›„ kubectl apply ๋ช…๋ น์–ด๋กœ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ Linkerd ์›น ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด...

๋ฐฉ๊ธˆ ๋ฐฐํฌํ•œ Deployment์˜ Pod๋„ Meshed ์ƒํƒœ๊ฐ€ ๋˜๊ณ  ํŠธ๋ž˜ํ”ฝ ๋ฉ”ํŠธ๋ฆญ๋„ ์ œ๋Œ€๋กœ ํ‘œ์‹œ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ์ด๋ ‡๊ฒŒ linkerd-demo Namespace์— ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋Š” Pod๋Š” ์ด์ œ ์ž๋™์œผ๋กœ Linkerd์˜ Service mesh์— ํŽธ์ž…๋ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ Linkerd์˜ Service mesh์— Pod๋ฅผ ํŽธ์ž…์‹œํ‚ค๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ดค๋Š”๋ฐ์š”. Linkerd์˜ ์„ค๊ณ„ ์ฒ ํ•™์ธ 'Keep it simple'๊ณผ 'Just work'์ด ๋…น์•„๋“ , ์•„์ฃผ ๊ฐ„๋‹จํ•œ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ด์ œ ์šฐ๋ฆฌ์˜ Deployment๋„ Linkerd Service mesh์— ์ž˜ ํŽธ์ž…๋˜์—ˆ์œผ๋‹ˆ, Linkerd์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋“ค์„ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Linkerd ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

Linkerd์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋“ค์€ ๋Œ€๋ถ€๋ถ„ Linkerd ์›น ๋Œ€์‹œ๋ณด๋“œ์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ„ฐ๋ฏธ๋„์—์„œ ํŠน์ • ๋ช…๋ น์–ด๋กœ ์›ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ๋ฐ”๋กœ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ณธ ์‹ค์Šต์˜ ๋งˆ๋ฌด๋ฆฌ๋กœ Linkerd์˜ ํ•„์ˆ˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ช…๋ น์–ด 3๊ฐ€์ง€๋ฅผ ๊ฐ™์ด ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1. linkerd viz stat ๋ช…๋ น์–ด๋กœ ํ˜„์žฌ ํŠธ๋ž˜ํ”ฝ ํ†ต๊ณ„ ํ™•์ธํ•˜๊ธฐ

linkerd viz stat Linkerd Service Mesh ๋‚ด ๋ฆฌ์†Œ์Šค๋“ค์˜ ์‹ค์‹œ๊ฐ„ ํŠธ๋ž˜ํ”ฝ ํ†ต๊ณ„๋ฅผ ์š”์•ฝํ•˜์—ฌ ๋ณด์—ฌ์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด linkerd-demo Namespace ๋‚ด ๋ชจ๋“  Deployment์˜ ํ˜„์žฌ ์ดˆ๋‹น ์š”์ฒญ ์ˆ˜(RPS), ์„ฑ๊ณต๋ฅ (SR), ์ง€์—ฐ ์‹œ๊ฐ„(P99) ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ฃ .

linkerd viz stat deploy -n linkerd-demo

2. linkerd viz tap ๋ช…๋ น์–ด๋กœ ์‹ค์‹œ๊ฐ„ ์š”์ฒญ ๋ฐ ์‘๋‹ต ์ŠคํŠธ๋ฆผ ๊ด€์ฐฐํ•˜๊ธฐ

linkerd viz tap ๋ช…๋ น์–ด๋Š” ํŠน์ • k8s ๋ฆฌ์†Œ์Šค(Deployment, Pod, Service ๋“ฑ)๋ฅผ ํ†ต๊ณผํ•˜๋Š” ์‹ค์ œ ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ์ŠคํŠธ๋ฆผ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์บก์ฒ˜ํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋‚˜ ์šด์˜์ž๋Š” ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ณ„ ์š”์ฒญ์˜ ํ—ค๋”, ๋ณธ๋ฌธ, ์ƒํƒœ ์ฝ”๋“œ, ์ง€์—ฐ ์‹œ๊ฐ„ ๋“ฑ์„ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ ํ•ด๊ฒฐ์ด๋‚˜ ํŠธ๋ž˜ํ”ฝ ๋ถ„์„์— ์œ ์šฉํ•œ๋ฐ์š”.

์•„๋ž˜์™€ ๊ฐ™์ด linkerd-demo Namespace ๋‚ด ๋ชจ๋“  Deployment์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต ์ŠคํŠธ๋ฆผ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

linkerd viz tap deploy -n linkerd-demo

3. linkerd viz edges ๋ช…๋ น์–ด๋กœ ์„œ๋น„์Šค ๊ฐ„ mTLS ์•”ํ˜ธํ™” ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธํ•˜๊ธฐ

Linkerd๋Š” Service Mesh์— ํฌํ•จ๋œ ์„œ๋น„์Šค ๊ฐ„์˜ ๋ชจ๋“  TCP ํ†ต์‹ ์„ ์ž๋™์œผ๋กœ mTLS๋กœ ์•”ํ˜ธํ™”ํ•œ๋‹ค๊ณ  ํ–ˆ์ฃ . ์ด๋Ÿฌํ•œ mTLS ์—ฐ๊ฒฐ ์ƒํƒœ๋Š” Linkerd ๋Œ€์‹œ๋ณด๋“œ์˜ ํ† ํด๋กœ์ง€ ๋ทฐ๋‚˜ ๊ฐ ์„œ๋น„์Šค ์ƒ์„ธ ํ™”๋ฉด์—์„œ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”.

ํ„ฐ๋ฏธ๋„์—์„œ linkerd viz edges deploy -n {Namespace ์ด๋ฆ„}์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ๋„ ์–ด๋–ค ์„œ๋น„์Šค๋“ค์ด mTLS๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ํ†ต์‹ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ฐ”๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด linkerd-demo Namespace ๋‚ด ๋ชจ๋“  Deployment์˜ mTLS ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒ๋‹ˆ๋‹ค.

linkerd viz edges deploy -n linkerd-demo

๋งˆ๋ฌด๋ฆฌ

์ง€๊ธˆ๊นŒ์ง€ Linkerd ์„ค์น˜๋ถ€ํ„ฐ Service mesh์— Deployment ํŽธ์ž…, Linkerd์˜ ํ•ต์‹ฌ ๋ช…๋ น์–ด 3๊ฐ€์ง€๊นŒ์ง€ ์‚ดํŽด๋ดค๋Š”๋ฐ์š”. Linkerd๋ž€ ๋ฌด์—‡์ธ์ง€ ์กฐ๊ธˆ ๋” ๊ฐ์ด ์žกํžˆ์…จ๋‚˜์š”?

๋ฌผ๋ก  ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์— Linkerd๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๋„์ž…ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Control Plane๊ณผ Data Plane์˜ ๋ฆฌ์†Œ์Šค ์š”๊ตฌ ์‚ฌํ•ญ ๊ณ„ํš๋ถ€ํ„ฐ ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์œ„ํ•œ Control Plane ๋ณต์ œ ๊ตฌ์„ฑ ๋“ฑ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ด ๋” ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Linkerd์™€ ๊ฐ™์€ Service Mesh๋ฅผ ์ง์ ‘ ์„ค์น˜ํ•˜๊ณ  ์šด์˜ํ•ด๋ณด๋Š” ๊ฒฝํ—˜์€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์˜ ๋ณต์žกํ•œ ํ†ต์‹  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ์„œ๋น„์Šค์˜ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ, ์‹ ๋ขฐ์„ฑ, ๋ณด์•ˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ์— ํ•„์š”ํ•œ ์‹ค์งˆ์ ์ธ ์—ญ๋Ÿ‰์„ ํ‚ค์›Œ์ค๋‹ˆ๋‹ค.

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

๋ถ€๋”” ์ด๋ฒˆ ์‹œ๋ฆฌ์ฆˆ๋ฅผ ํ†ตํ•ด Service mesh๋‚˜ Linkerd์— ๋Œ€ํ•ด ๋” ์•Œ๊ณ  ์‹ถ์œผ์…จ๋˜ ๋ถ„๋“ค์—๊ฒŒ ์ข‹์€ ์ฒซ ๊ฑธ์Œ์ด ๋˜์—ˆ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ๋‹ค์Œ ์•„ํ‹ฐํด์—์„œ ๋” ํฅ๋ฏธ๋กœ์šด ์ฃผ์ œ๋กœ ์ฐพ์•„๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

References

โœจ์ด๋ฒˆ ๋‰ด์Šค๋ ˆํ„ฐ๋Š” ์–ด๋– ์…จ๋‚˜์š”?

์ด๋ฒˆ ๊ธ€์—์„œ ๋‹ค๋ฃฌ ์ฃผ์ œ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”! ๋‰ด์Šค๋ ˆํ„ฐ๋ฅผ ๋” ๋‚˜์€ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ํผ์—์„œ ์งง์€ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ์žˆ์–ด์š”.

๐Ÿ‘‰ ํ”ผ๋“œ๋ฐฑ ๋ณด๋‚ด๊ธฐ (1~2๋ถ„ ์†Œ์š”)

์—ฌ๋Ÿฌ๋ถ„๋“ค์˜ ์†Œ์ค‘ํ•œ ์˜๊ฒฌ์€ Aidenโ€™s Lab ๋‰ด์Šค๋ ˆํ„ฐ์—๊ฒŒ ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค!

๐Ÿ”ญAidenโ€™s Lab์—์„œ ๋” ๋งŽ์€ ์•„ํ‹ฐํด์„ ๋งŒ๋‚˜๋ณด์„ธ์š”

๋ฐœํ–‰๋œ ๋‰ด์Šค๋ ˆํ„ฐ๋ฅผ ์•„์นด์ด๋น™ํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ์šด์˜ ์ค‘์ž…๋‹ˆ๋‹ค.