Istio λ
Istio λ Service Mesh μ ν μ’ λ₯λ‘ CNCF μμ κ΄λ¦¬νλ Open Source μ΄λ€. Service Mesh λ MSA νκ²½μμ μ ν리μΌμ΄μ μ½λμ λ³κ²½ μμ΄ κ° μλΉμ€μ λν Observability(κ°μμ±, log/metrics/trace), νΈλν½ κ΄λ¦¬, 보μ κΈ°λ₯μ λ΄λΉνλ μΈνλΌ κ³μΈ΅μ΄λ€. μ ν리μΌμ΄μ μμ μΌμΌμ΄ ꡬννλ κΈ°λ₯μ μΈνλΌ κ³μΈ΅μΌλ‘ λ컀νλ§νκΈ° μν΄ λ§λ€μ΄μ§ κ²μ΄λ€.
Istio λ₯Ό μ°λ μ΄μ
Kubernetes νκ²½μμ DNS μ λ‘λλ°Έλ°μμ μ‘°ν©μΌλ‘λ νΈλν½ κ΄λ¦¬κ° μΆ©λΆν κ°λ₯νμ§λ§ Istio λ₯Ό νμ©νλ©΄ λ λ§μ κΈ°λ₯μ μ½κ² μ μ©ν μ μλ€. λνμ μΌλ‘ Observability, νΈλν½ κ΄λ¦¬, 보μ, ν볡μ±, κ³μΈ΅ μ΄μ λ±μ΄ μλ€.
Observability, κ°μμ±
μ ν리μΌμ΄μ λ‘κ·Έλ Datadog κ³Ό κ°μ μ루μ μΌλ‘ μ·¨ν©ν μ μμ§λ§ λ§μ΄ν¬λ‘μλΉμ€κ° μ£Όκ³ λ°λ νΈλν½μ λν λ‘κ·Έλ λ°λ‘ ν보νκΈ° μ½μ§ μλ€. Istio λ Envoy Proxy λ₯Ό Sidecar ννλ‘ μ ν리μΌμ΄μ κ³Ό ν¨κ» λ°°ν¬νμ¬ νΈλν½μ μλ¨μμ λ¨Όμ λ°μ μ΄μ λν Log, Metrics, Trace λ₯Ό ν보ν μ μλ€.
νΈλν½ κ΄λ¦¬
HTTP, gRPC, WebSocket λ° TCP νΈλν½μ λν λ‘λ λ°Έλ°μ±μ΄ κ°λ₯νλ©° Retry, λΌμ°ν κ·μΉ, Fault Injection λ± νΈλν½ μ μ΄ μμ κ°λ₯νλ€. Istio κ° μ 곡νλ CustomResource μΈ VirtualService μ DestinationRule μ ν΅ν΄μ μνλ μλΉμ€λ‘ νΈλν½μ 보λ΄μ€ μ μλ€. VirtualService μ weight, subset μ ν΅ν΄ Canary λ°°ν¬λ₯Ό μνν μ μμ λΏ μλλΌ Header / Path κΈ°λ°μ L7 λΌμ°ν λ μ½κ² μ€μ ν μ μλ€.
νΈλν½μ λμμ±μ λ΄ λ§μλλ‘ ν μ μκΈ° λλ¬Έμ νΉμ νΈλν½λ§ μΉ΄λ리 λ²μ μ νλ €λ³΄λ΄λ μν©μ Application μμ μμ΄ Configuration μμ λ§μΌλ‘ κ°λ₯νκ² ν΄μ€λ€.
L4 λΏ μλλΌ L7 κΉμ§ μ μ΄νκΈ° λλ¬Έμ λ€νΈμν¬λ₯Ό κΉμ HTTP Header λ₯Ό λ³Ό μ μλ€. ν€λλ₯Ό νμΈν΄μ μμ²μ΄ μμ΄ν°μμ λ€μ΄μ¨ μμ²μΌ λ μμ΄ν°μ© μλΉμ€λ‘ λΌμ°ν ν΄μ£Όλ λ±μ νΈλν½ μ€ν°μ΄λ§μ΄ κ°λ₯νλ€. μλ₯Ό λ€μ΄ gif λ³΄λ€ μμΆλ₯ μ΄ μ’μ webp κ°μ κ²½μ° chrome κ³Ό android λ μ§μνμ§λ§ μμ΄ν°μ μ§μνμ§ μλ μν©μ μ¬μ©ν μ μλ€.
보μ
Kubernetes νκ²½μμ μλΉμ€ κ° ν΅μ μ΄ μ΄λ£¨μ΄μ§κΈ° λλ¬Έμ μ€κ°μ νΈλν½μ λμμ±μ λ―μ΄λ³Ό μ μλ€. μ΄λ₯Ό λ°©μ§νκΈ° μν mTLS λ₯Ό Istio λ₯Ό ν΅ν΄ μ½κ² μ€μ ν μ μλ€. Istio Control Plane μ΄ λͺ¨λ₯΄λ μλΉμ€μλ μμ ν΅μ μ ν μ μκ² ν μ μκ³ , Policy λ₯Ό ν΅ν΄ μ΄λ€ μλΉμ€κ° μ΄λ€ μλΉμ€μ ν΅μ ν μ μλμ§ μ½λννμ¬ κ΄λ¦¬ν μ μλ€.
Istio μν€ν μ²λ Envoy Proxy λ₯Ό ν΅ν΄ ν΅μ μ λ€ κ°λ‘μ±κ³ λͺ¨λ ꡬκ°μ΄ μνΈνλκΈ° λλ¬Έμ μ λ λͺ» μ΄μ΄λ³΄λ ν΅μ 보μμ μ 곡νλ€ (Zero Trust)
Kubernetes ν΄λ¬μ€ν°λ λ΄λΆλ§ ν΅μ μΌν λ° μ μνΈνν΄μΌν κΉ? μ΅κ·Ό 보μ μ κ³ νΈλ λλ Zero Trust μν€ν μ²λ€. λ΄λΆλ§μ΄μ΄λ μ λ μ λ’°νμ§ λ§κ³ νμ κ²μ¦ν΄μΌ λλ€λ κ°λ μ΄λ€. μ ν΄λ¬μ€ν° λ΄λΆλ§μ΄ μνν μ μμκΉ? λ΄λΆμμ κ²½μ° λ€νΈμν¬λ₯Ό λ―μ΄λ³Ό μ μκΈ°λ νκ³ , Pod νλκ° μ·¨μ½μ μ κ°μ§κ³ ν΄μ»€μκ² μ₯μ λ κ²½μ° λ΄λΆ λ€νΈμν¬μ μ κ·Όμ΄ κ°λ₯νκΈ°μ μΈλΆμκ° νΈλν½μ κ°λ‘μ± μ μκΈ°λ νκ³ , Compliance and Regulation μΌλ‘ μ μ‘ μ€ μνΈνλ₯Ό λ²μ μΌλ‘ μꡬνλ κ²½μ°κ° λ§κΈ°λ νλ€.
ν볡μ±, Fault Tolerance
Timeout, Retry, Circuit Breaker κ°μ κ³ κΈ νλ³΅μ± κΈ°λ₯μ ꡬμ±νμ¬ μλΉμ€ μ₯μ μ λν νλ ₯μ±μ λμΌ μ μλ€.
Service λΌλ¦¬ μλ‘ ν΅μ νλ MSA νκ²½μμ νΈμΆλλ Service μ μ₯μ κ° λ°μνλ©΄ νΈμΆνλ Service μ μ€λ λλ μλ΅μ κΈ°λ€λ¦¬κ² λλ€. κ·Έλ κ² λͺ¨λ μ€λ λκ° μλ΅λκΈ° μνκ° λλ©΄ λ¬Έμ κ° μλ νΈμΆνλ Service μμ μ₯μ κ° λ°μνλ€. μ¦, μ₯μ κ° μ νλλ μν©μ΄ λ°μνλ€. μ΄λ₯Ό Noisy Neighborhood λΌκ³ λ νλ€.
μ΄λ° μν©μ λ§κΈ° μν΄μ νΈμΆλλ Service κ° μλ΅μ΄ μμΌλ©΄ 컀λ₯μ μ λμ΄μ€μΌ νλ€. κ³Όμ λ₯ μ ν¨μ¦κ° λ΄λ €κ°λ κ²μ²λΌ μ΄λ₯Ό Circuit Breaker λΌκ³ νλ€.
μ΄ μΈμλ λͺ¨λν°λ§, μλΉμ€ κ° μμ‘΄μ± λ± MSA νκ²½μμ λ§μ£Όνλ λ€μν λ¬Έμ λ€μ ν΄κ²°νκΈ° μν΄ Envoy λΌλ νλ‘μλ₯Ό μ΄μ©νκ² λλ€. Envoy λ HAProxy λ Nginx κ°μ΄ WAS μμ λλ μΌλ°μ μΈ νλ‘μλ€. λ¨μνκ² L4 λ λ²¨μ΄ μλλΌ L7 λ 벨μμλ μν μ μννλ€. λ€μ΄μ€λ νΈλν½μμ μ‘°μ νλ€λμ§, μΈμ¦λ νΈλν½λ§ λ°λλ€λμ§, HTTP/1.0 λΏλ§ μλλΌ HTTP/2, gRPC, WebSocket μ μ§μνλ€λμ§, Circuit Breaker λ₯Ό μ§μνλ€λμ§
κ³μΈ΅ μ΄μ
μ ν리μΌμ΄μ μ½λμ λ³κ²½ μμ΄ μΈνλΌ κ³μΈ΅μμ μ λͺ¨λ κΈ°λ₯μ μ 곡ν μ μλ€λ κ²μ΄ κ°μ₯ ν° μ₯μ μ΄λ€. λΉμ¦λμ€ λ‘μ§κ³Ό Service Mesh κ° μ ν리μΌμ΄μ κ³μΈ΅, μΈνλΌ κ³μΈ΅μΌλ‘ λ컀νλ§ λμ΄ μκΈ° λλ¬Έμ istio κ° μλ Consul, Linkerd λ± κ³Ό κ°μ λ€λ₯Έ ServiceMesh λ₯Ό μ μ©νλλΌλ μ ν리μΌμ΄μ μ½λμ λ³κ²½μ΄ νμ μμ΄μ§λ€.
Istio λ μ΄λ»κ² μλνλ?
Istio λ λ΄λΆμ μΌλ‘ Envoy Proxy λ₯Ό κ° μ ν리μΌμ΄μ Container μμ Sidecar ννλ‘ ν¨κ» λ°°ν¬ν΄μ€λ€. Google μμ Istio νλ‘μ νΈλ₯Ό μ€λΉ μ€μΌ λ Nginx λ₯Ό Sidecar Proxy λ‘ μ¬μ©νλ €λ€ Envoy μ μ‘΄μ¬λ₯Ό μκ²λκ³ Envoy λ₯Ό μ¬μ©νκΈ°λ‘ κ²°μ νλ€κ³ νλ€.
Envoy Proxy
- L4/L7 νλ‘μ
- κ²½λ
- HTTP2, gRPC λ± μ§μ
- Resilience μ Scale μ§μ
- Health Check, Circuit Breaker, Timeout, Retry μ§μ
- API λ₯Ό ν΅ν μ€μ λ³κ²½, Nginx μ κ°μ₯ ν° μ°¨μ΄μ μΌλ‘ Nginx μ κ²½μ° μ€μ μ λ³κ²½ν λ conf νμΌμ μμ νκ³ reload λ₯Ό μνν΄μΌνμ§λ§ Envoy λ API λ₯Ό ν΅ν΄ λμ μΌλ‘ μ€μ μ λ³κ²½ν μ μλ€. VirtualService, DestinationRule κ³Ό κ°μ CustomResource κ° μμ±λλ©΄ Istio κ° μ΄λ₯Ό μΈμ§νκ³ Envoy Proxy μ μ€μ μ μ νν΄μ£Όλ λ°©μμΌλ‘ μλνλ€.
Envoy λ₯Ό μ°λ©΄ μΈνλΌλ 벨μμ μ΄λ° MSA ν¨ν΄λ€μ νμ΄λκ° μ μλ€. λ¬Έμ λ Envoy κ° λ§μ΄ νμνλ€λ μ μ΄λ€. MSA λ λ³΄ν΅ μ»΄ν¬λνΈκ° μ²λ¨μ μ΄μμΌλ‘ ꡬμ±λκΈ° λλ¬Έμ λͺ¨λ μ»΄ν¬λνΈ μλ¨μ μΌμΌμ΄ Envoy λ₯Ό λΆμ¬μ£Όλ €λ©΄.. μ½μ§ μλ€. κ·Έλμ μ€μ 컨νΈλ‘€ μ루μ μΈ Istio λ₯Ό μ¬μ©ν μ μλ€.
Istio λ WAS Container μμ νμ Envoy Container κ° κ°μ΄ λ°°ν¬λ μ μλλ‘ λμμ€λ€. μΌλ°μ μΌλ‘ Kubernetes μμ Pod λ νλμ Container λ₯Ό ν¬ν¨νλ€. Envoy Proxy λ λ€μ€ Container ν¨ν΄ μ€ νλμΈ Sidecar Pattern μΌλ‘ μ ν리μΌμ΄μ Container μ ν¨κ» λ°°ν¬λλ€. Sidecar Pattern μ κΈ°μ‘΄ Container μ κΈ°λ₯μ λ³κ²½νμ§ μκ³ νμ₯νλ€. μ¦, μ ν리μΌμ΄μ μ½λ μμ μμ΄ λ‘κΉ μ΄λ νλ‘μλ₯Ό λΆμ΄λ λ± κΈ°λ₯μ νμ₯νκΈ° μν΄ μ¬μ©λλ€.
Pod λ μ¬λ¬ Container λ€μ μ΄λ»κ² λ¬Άμ΄μ€κΉ?
Kubernetes μμ Pod λ₯Ό μμ±νλ©΄ pause λΌλ Container λ ν¨κ» μμ±λλ€. μ΄λ Pod λ΄λΆμ Container λ€μ΄ 리λ μ€ namespace(PID, network, volume mount, UTS, IPC cgroup λ±) λ₯Ό 곡μ ν μ μλλ‘ λμμ€λ€. λν PID 1 (init process)λ‘μμ μν μνκ³ μ’λΉ νλ‘μΈμ€λ₯Ό κ±°λ¬λ€μ΄κΈ°λ νλ€. pause Container λλΆμ Pod λ΄ Container λ€μ λμΌν λ€νΈμν¬ μ€μ μ 곡μ νκ² λκ³ localhost λ‘ Container κ° ν΅μ λ κ°λ₯νκ² νλ€.
Istio λ Kubernetes namespace μ€ istio-enabled μ€μ μ΄ μ μ©λ namespace μ μμ±λλ λͺ¨λ Pod μ Envoy Proxy λ₯Ό Sidecar λ‘ λΆμΈλ€. Istio μ Webhook μ ν΅ν΄ istiod μ API λ₯Ό νΈμΆνκ³ ν΄λΉλλ Pod μ init-container μ istio-proxy Container λ₯Ό μ£Όμ νλ€. init-container λ λ€λ₯Έ Container λ€μ΄ μμ±λκΈ° μ μ λ¨Όμ μ€νλλ©° νΈλν½ μ μ΄λ₯Ό μν iptable μμ μ μννλ€. μ΄λ₯Ό ν΅ν΄ ν΄λΉ Pod λ‘ λ€μ΄μ€λ νΈλν½μ λͺ¨λ Envoy Proxy λ‘ μ λ¬νλλ‘ μ€μ νλ€.
Istio Architecture
Istio λ 컨νΈλ‘€ νλ μΈκ³Ό λ°μ΄ν° νλ μΈμΌλ‘ μ΄λ£¨μ΄μ§λ€. λ°μ΄ν° νλ μΈμ Envoy λ€μ μ§ν©μ΄λ€. 컨νΈλ‘€ νλ μΈμ Envoy νλ‘μλ€μ 컨νΈλ‘€ν΄μ£Όλ μν μ νλ€.
Control Plane, istiod
컨νΈλ‘€ νλ μΈμ pilot, mixer, citadel μΌλ‘ ꡬμ±λλ©° istiod λΌλ μ±κΈ λ°μ΄λλ¦¬λ‘ λ¬Άμ¬ λ°°ν¬λλ€. istiod λ μλΉμ€ λμ€μ»€λ²λ¦¬, νλ‘μ κ΅¬μ± λ° κ΄λ¦¬, μΈμ¦μ κ΄λ¦¬ λ±μ μννλ€. mTLS ν΅μ μ μν μΈμ¦μλ₯Ό μμ±νλ CA μν μμ μννλ€.
Pilot
컨νΈλ‘€ νλ μΈμ Pilot μ΄λΌλ μ»΄ν¬λνΈλ configuration μ 보λ₯Ό κ°κ³ μλ€. μλ₯Ό λ€λ©΄ Service A μ IP Address λ 무μμΈκ°, λ°μ μ μλ νΈλν½μ μ΄λ»κ² λλμ§ λ±.
Mixer
Mixer λ Service κ° νΈλν½μ λ°μ λ 1μ΄λΉ μΌλ§ λ°μ μ μλμ§, λλ₯Ό νΈμΆν μ μλ Service μ μ’ λ₯λ 무μμΈμ§, λλ Request μ μ°μ μμ λ±μ μ μ± μ νμΈνκ³ , λ‘κ·Έλ μμ§νλ€.
Citadel
Citadel μ΄λΌλ μ»΄ν¬λνΈλ 보μμ λ΄λΉνλ€. Istio λ₯Ό μ μ©ν μν€ν μ²μμ 무쑰건 Envoy Proxy λ₯Ό ν΅ν΄ ν΅μ μ΄ μ΄λ£¨μ΄μ§λ€. μ΄ ν΅μ ꡬκ°μ΄ mTLS(Mutual TLS λλ μλ°©ν₯ SSL) λ‘ μνΈνλλ€. μλ²λ₯Ό λκ°λ μκ°λΆν° λͺ¨λ μνΈνκ° λλ€. mTLS λ₯Ό μ¬μ©νλ €λ©΄ μΈμ¦μλ₯Ό λ°μμΌλλλ° Citadel μ΄ μ΄λ₯Ό κ΄λ¦¬νκ³ λΏλ €μ£Όλ μν μ νλ€.