๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”Ž Service Mesh

[Service Mesh] 3. Istio?

by Seongpyo Hong 2020. 12. 22.

Service Mesh ์•Œ์•„๋ณด๊ธฐ

  1. [Service Mesh] 1. Service Mesh๋ž€?
  2. [Service Mehs] 2. Envoy Proxy
  3. [Service Mesh] 3. Istio?
  4. [Service Mesh] 4. Istio Traffic Management (1) - Virtual Service & Destination Rule
  5. [Service Mesh] 5. Istio Traffic Managerment (2) - Gateway & Service Entry
  6. [Service Mesh] 6. Service Monitoring in Istio
  7. [Service Mesh] 7. Logging

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Istio์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Istio?

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

Istio๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • Traffic Management
    Istio๋Š” ๊ฐ„๋‹จํ•œ ์„ค์ •์„ ํ†ตํ•ด ์„œ๋น„์Šค ๊ฐ„ ๋ฐœ์ƒํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Circuit Breaker, Timeout๊ณผ ๊ฐ™์€ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, A/B Test ๋ฐ ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ์™€ ๊ฐ™์€ ๋ฐฐํฌ ์ „๋žต์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Security
    Istio๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธํ”„๋ผ ๋ ˆ์ด์–ด์—์„œ ๋ณด์•ˆ ์ •์ฑ…์„ ์ผ๊ด€๋˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Observability
    ๋„คํŠธ์›Œํฌ ๊ฐ„์— ๋ฐœ์ƒํ•˜๋Š” ํ˜ธ์ถœ์„ ์ถ”์ ํ•˜๊ฑฐ๋‚˜ ๋ชจ๋‹ˆํ„ฐ๋ง, ๋กœ๊น…์„ ํ†ตํ•ด Service Mesh ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ ์ƒํƒœ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Istio Architecture

Istio Architecture

์ถœ์ฒ˜ : Istio Document - Architecture

Istio๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ Data Plane๊ณผ Control Plane์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง‘๋‹ˆ๋‹ค.

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

Control Plane์€ 1.5 ๋ฒ„์ „ ์ด์ „๊นŒ์ง€๋Š” Mixer, Pilot, Citadel, Galley์ด๋ผ๋Š” ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์—ˆ์ง€๋งŒ, 1.5 ๋ฒ„์ „ ์ดํ›„์—๋Š” Istiod๋ผ๋Š” ๋ชจ๋“ˆ๋กœ ํ†ตํ•ฉ๋˜์–ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋จผ์ € 1.5 ๋ฒ„์ „ ์ด์ „๊นŒ์ง€ ์กด์žฌํ–ˆ๋˜ ๋ชจ๋“ˆ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • Mixer
    Mixer๋Š” ์„œ๋น„์Šค์˜ Telemetry๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•˜๋ฉฐ ๊ถŒํ•œ ๋ถ€์—ฌ ์ •์ฑ…์„ ์‹œํ–‰ํ•ฉ๋‹ˆ๋‹ค. 
  • Pilot
    Proxy์— ๋Œ€ํ•ด ๋ผ์šฐํŒ…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  Service Discovery,Timeout, Circuit Breaker ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 
  • Citadel
    Istio ๋‚ด์— ์š”์ฒญ์„ ์•”ํ˜ธํ™”ํ•˜๋ฉฐ, ์„œ๋น„์Šค์— ๊ด€ํ•œ RBAC๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • Galley
    ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ Istio์— ๋Œ€ํ•œ ์„ค์ •์„ ์ €์žฅ ๋ฐ ๊ฒ€์ฆํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

Mixer

๋ฌผ๋ก  1.5 ๋ฒ„์ „ ์ดํ›„์— Mixer๊ฐ€ Deprecated ๋˜์—ˆ์ง€๋งŒ, Istio์—์„œ Mixer๋ฅผ ํ†ตํ•ด Telemetry์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ์ธํ”„๋ผ ๋ฐฑ์—”๋“œ์— ์ข…์†์ ์ด์ง€ ์•Š๊ฒŒ ๋˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์•„ ์ด ๋ถ€๋ถ„์„ ์ข€ ๋” ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

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

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

Adapter

ํ•˜์ง€๋งŒ, Mixer๊ฐ€ ํŠน์ • ์ธํ”„๋ผ ๋ฐฑ์—”๋“œ์— ์ข…์†์ ์ด๊ฒŒ ๋œ๋‹ค๋ฉด ํ™•์žฅ์„ฑ ์ธก๋ฉด์—์„œ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ตฌ์„ฑ์ด ๋ฉ๋‹ˆ๋‹ค. ์ธํ”„๋ผ ๋ฐฑ์—”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค istio๋„ ์˜ํ–ฅ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค๋ฉด ์œ ์ง€ ๋ณด์ˆ˜ ๋ฐ ํ™•์žฅ์— ์šฉ์ดํ•˜์ง€ ์•Š์€ ๊ตฌ์กฐ๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Mixer๋Š” Adapter๋ผ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Adapter๋Š” Mixer๊ฐ€ ์ธํ”„๋ผ ๋ฐฑ์—”๋“œ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ ์ธํ”„๋ผ ์ œ๊ณต์ž๋กœ๋ถ€ํ„ฐ ์ถ”์ƒํ™”๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค. Adapter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Mixer๋Š” ์‚ฌ์šฉ ์ค‘์ธ ์ธํ”„๋ผ ๋ฐฑ์—”๋“œ์™€ ์ƒ๊ด€์—†์ด ์ผ๊ด€๋œ API๋ฅผ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ๋ฉ๋‹ˆ๋‹ค. Adpater๋ฅผ ํ†ตํ•ด ์ถ”์ƒํ™” ๋œ Mixer์˜ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Mixer & Adapter API

Attribute

Mixer๋Š” ๋‹ค์–‘ํ•œ ์ธํ”„๋ผ ๋ฐฑ์—”๋“œ๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ Attribute์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

Attribute๋Š” ์š”์ฒญ์˜ ํŠน์„ฑ์„ ์ •์˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋กœ ์š”์ฒญ ๊ฒฝ๋กœ, IP ์ฃผ๋กœ, ์‘๋‹ต ์ฝ”๋“œ์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Mixer๋Š” ์ด๋Ÿฐ Attribute๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์ธํ”„๋ผ ๋ฐฑ์—”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๊ถ๊ธˆํ•œ ์ ์€ ์–ด๋–ค ์ธํ”„๋ผ ๋ฐฑ์—”๋“œ๊ฐ€ ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ๊ณ , ์ˆ˜์‹ ํ•œ ์†์„ฑ์„ Adapter ์†์„ฑ์— ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ฐ™์€ ๋ถ€๋ถ„๋“ค์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ถ€๋ถ„๋“ค์€ Mixer์˜ Configuration Model์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

Configuration Model

Configuration Model์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3๊ฐ€์ง€ ์ข…๋ฅ˜์— ๋Œ€ํ•œ ๊ตฌ์„ฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • Instance
    Mixer๊ฐ€ ์ˆ˜์‹ ํ•œ Attribute๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ ํ…œํ”Œ๋ฆฟ์„ Handler์—๊ฒŒ ๋„˜๊ฒจ์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • Handler
    Instance์˜ ๋ฐ์ดํ„ฐ๋ฅผ Adapter ์ž…๋ ฅ์— ์–ด๋–ป๊ฒŒ ๋งคํ•‘ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด CloudWatch Adapter์— ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด Json Payload๋ฅผ ์ •์˜ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋ฉ๋‹ˆ๋‹ค.
  • Rule
    Instance์™€ Handler๋ฅผ ๋งคํ•‘ํ•ด Adapter์— ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋ฉฐ, ๋งคํ•‘ํ•˜๊ธฐ ์›ํ•˜๋Š” ์กฐ๊ฑด(ex. TCP์ธ ๊ฒฝ์šฐ)์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Istio 1.5 ๋ฒ„์ „ ์ด์ƒ๋ถ€ํ„ฐ๋Š” ํ†ตํ•ฉ๋œ Control Plane์ธ Istiod๋ฅผ ํ†ตํ•ด Pilot, Galley, Citadel์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Mixer๊ฐ€ ์ˆ˜ํ–‰ํ–ˆ๋˜ ์—ญํ• ์€ ์„ฑ๋Šฅ์ƒ์˜ ์ด์Šˆ๋กœ Istiod๊ฐ€ ์•„๋‹Œ Envoy Proxy ์ชฝ์— WebAssembly Extension์„ ์‚ฌ์šฉํ•ด์„œ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Istio ๋ฌธ์„œ์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (Istio 1.7๊นŒ์ง€๋Š” Mixer๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์žˆ์—ˆ์ง€๋งŒ, 1.8 ๋ถ€ํ„ฐ๋Š” ์™„์ „ํžˆ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.)


Install

Istio ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด Istio์™€ ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋Š” Sample Application์„ ๋ฐฐํฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ๋ชจ๋“  ๊ณผ์ •์€ Minikube Cluster๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋จผ์ € kubectl๊ณผ ๊ฐ™์ด Istio์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ž์ฒด CLI์ธ istioctl์„ ์„ค์น˜ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

โ–ถ curl -L https://istio.io/downloadIstio | sh -
โ–ถ cd istio-1.8.1 && export PATH=$PWD/bin:$PATH

 

์„ค์น˜ํ•œ istioctl์„ ํ†ตํ•ด Istio ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ค์น˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Istio์˜ ์„ค์น˜ Profile์€ ์ด ๊ธ€์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ €๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ค์น˜ํ•˜๋Š” demo Profile์„ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ ์ดํ›„ ๋ฐฐํฌํ•  Sample Application์€ default namespace์— ๋ฐฐํฌ๋˜๋ฉฐ, ๋ฐฐํฌ ์‹œ ์ž๋™์œผ๋กœ Envoy Proxy๋ฅผ Sidecar๋กœ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด namespace์— label์„ ์ถ”๊ฐ€ํ•ด์คฌ์Šต๋‹ˆ๋‹ค.

โ–ถ istioctl install --set profile=demo -y
Detected that your cluster does not support third party JWT authentication. Falling back to less secure first party JWT. See https://istio.io/v1.8/docs/ops/best-practices/security/#configure-third-party-service-account-tokens for details.
โœ” Istio core installed
โœ” Istiod installed
โœ” Ingress gateways installed
โœ” Egress gateways installed
โœ” Installation complete

โ–ถ kcl label namespace default istio-injection=enabled
namespace/default labeled

 

Sample Application์„ ์„ค์น˜ํ•˜๊ธฐ ์ด์ „์— ์œ„์˜ ๋ช…๋ น์–ด๋กœ ์„ค์น˜๋œ Istio CRD๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

Istio CustomResoureDefinition

  • Virtual Service
    ์„œ๋น„์Šค๊ฐ€ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํŠธ๋ž˜ํ”ฝ ๊ทœ์น™์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 
  • Destination Rule
    Load Balancing, Connection Pool Size์™€ ๊ฐ™์€ ๊ตฌ์„ฑ์„ ๋‹ค๋ฃจ๋ฉฐ, ๋ผ์šฐํŒ…์ด ๋๋‚ฌ์„ ๋•Œ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • Service Entry
    Istio์˜ Service Registry ์ˆ˜๋™์œผ๋กœ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค์˜ ์ฃผ์†Œ, ํ”„๋กœํ† ์ฝœ, ํฌํŠธ๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ๊ตฌ์„ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • Gateway
    Service Mesh ์ž…๊ตฌ์—์„œ ํŠน์ • ํฌํŠธ๋กœ ์™ธ๋ถ€ ์—ฐ๊ฒฐ์„ ์ˆ˜์‹ ํ•˜๊ณ  ๋‚ด๋ถ€์— ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • Envoy FIlter
    Envoy Proxy ๊ด€๋ จ ํ•„ํ„ฐ๋ฅผ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Policy
    ๋ณด์•ˆ, ์š”์ฒญ ๋“ฑ๊ณผ ๊ฐ™์€ ์„œ๋น„์Šค์— ๊ด€ํ•œ ๊ทœ์น™์„ ์ •์˜ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ Sample Application์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.


โ–ถ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml 
service/details created 
serviceaccount/bookinfo-details created 
deployment.apps/details-v1 created 
service/ratings created 
serviceaccount/bookinfo-ratings created 
deployment.apps/ratings-v1 created 
service/reviews created 
serviceaccount/bookinfo-reviews created 
deployment.apps/reviews-v1 created 
deployment.apps/reviews-v2 created 
deployment.apps/reviews-v3 created 
service/productpage created 
serviceaccount/bookinfo-productpage created 
deployment.apps/productpage-v1 created

 

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด Cluster ์™ธ๋ถ€์—์„œ Sample Application์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด Istio Ingress Gateway๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. 

โ–ถ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml 
gateway.networking.istio.io/bookinfo-gateway created 
virtualservice.networking.istio.io/bookinfo created

 

Ingress Gateway๊ฐ€ ์„ค์น˜๋˜๋ฉด ์™ธ๋ถ€ ์ ‘์†์„ ์œ„ํ•œ ์ฃผ์†Œ๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ƒ์„ฑํ•˜์—ฌ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ–ถ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')

โ–ถ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')

โ–ถ export INGRESS_HOST=$(minikube ip)

โ–ถ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

 

Minikube Cluster์— ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด์ค๋‹ˆ๋‹ค. (์ด ๋•Œ ์ƒˆ๋กœ์šด ํ„ฐ๋ฏธ๋„์—์„œ ์‹คํ–‰์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

โ–ถ minikube tunnel

 

Istio ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ ์ด์™ธ์—๋„ ๋ช‡๊ฐ€์ง€์˜ telemetry ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Prometheus, Grafana, Kiali ๋“ฑ์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” addon์„ ์„ค์น˜ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

โ–ถ kubectl apply -f samples/addons
serviceaccount/grafana created
configmap/grafana created
service/grafana created
deployment.apps/grafana created
configmap/istio-grafana-dashboards created
configmap/istio-services-grafana-dashboards created
deployment.apps/jaeger created
service/tracing created
service/zipkin created
service/jaeger-collector created
customresourcedefinition.apiextensions.k8s.io/monitoringdashboards.monitoring.kiali.io created
serviceaccount/kiali created
configmap/kiali created
clusterrole.rbac.authorization.k8s.io/kiali-viewer created
clusterrole.rbac.authorization.k8s.io/kiali created
clusterrolebinding.rbac.authorization.k8s.io/kiali created
service/kiali created
deployment.apps/kiali created
serviceaccount/prometheus created
configmap/prometheus created
clusterrole.rbac.authorization.k8s.io/prometheus created
clusterrolebinding.rbac.authorization.k8s.io/prometheus created
service/prometheus created
deployment.apps/prometheus created

 

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด istioctl์„ ํ†ตํ•ด addon ์ปดํฌ๋„ŒํŠธ์˜ ๋Œ€์‹œ๋ณด๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ–ถ istioctl dashboard prometheus
http://localhost:9090

โ–ถ istioctl dashboard grafana
http://localhost:3000

โ–ถ istioctl dashboard kiali
http://localhost:20001/kiali

 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Istio์— ๋Œ€ํ•œ ๊ตฌ์„ฑ๊ณผ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ Istio ์œ„์—์„œ ์‹คํ–‰๋˜๋Š” Sample Application์— ๋Œ€ํ•ด ์‹คํ–‰ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ธ€์—์„œ๋Š” Istio CRD์ธ Virtual Service์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

  1. Istio๋กœ ์‹œ์ž‘ํ•˜๋Š” ์„œ๋น„์Šค ๋ฉ”์‹œ - ์—์ด์ฝ˜ ์ถœํŒ์‚ฌ
  2. Istio Document

๋Œ“๊ธ€