아키텍처

지원 버전: Istio 1.28+ API 버전: networking.istio.io/v1, security.istio.io/v1 마지막 업데이트: 2026년 2월 19일

Istio의 내부 아키텍처와 네트워킹 메커니즘을 심층적으로 다룹니다.

배경 및 역사기본 개념 문서를 참고하세요.

중요 변경사항 (Istio 1.5+):

  • Pilot, Citadel, Galley, Mixer는 별도 컴포넌트가 아닙니다

  • Istiod라는 단일 바이너리(pilot-discovery)로 통합되었습니다

  • Pilot/Citadel/Galley 용어는 기능을 설명하기 위한 역사적 명칭입니다

목차

Istio 아키텍처 개요

전체 구조

istio-overview

Control Plane vs Data Plane

구분
Control Plane (Istiod)
Data Plane (Envoy)

역할

정책 관리, 구성 배포

실제 트래픽 처리

위치

별도 파드 (일반적으로 1-3개)

모든 애플리케이션 파드

언어

Go

C++

부하

낮음

높음 (모든 트래픽)

확장성

수평 확장 (HA)

자동 (파드당 1개)

Control Plane: Istiod

Istiod 내부 구조

중요: Istio 1.5 이후 Pilot, Citadel, Galley는 별도 컴포넌트가 아닌 Istiod 내부 기능입니다.

spinner

Istiod의 주요 기능

참고: 아래 기능들은 Istio 1.28에서 Istiod 내부에 통합되어 있습니다. 역사적 명칭(Pilot, Citadel, Galley)은 기능을 설명하기 위해 사용됩니다.

1. Service Discovery (Pilot 기능)

Istiod는 다음을 추적합니다:

  • Kubernetes Service

  • Endpoints (파드 IP)

  • Pod 상태 변화

  • 외부 서비스 (ServiceEntry)

2. Traffic Management (Pilot 기능)

Istio CRD를 Envoy 구성으로 변환:

↓ Istiod가 Envoy 구성으로 변환 ↓

3. Certificate Management (Citadel 기능)

spinner

SPIFFE ID 형식:

4. Configuration Validation (Galley 기능)

Istiod는 적용 전에 검증:

Istiod 프로세스 구조

Istio 1.28의 실제 구현:

주요 포인트:

  • Istiod는 pilot-discovery라는 단일 Go 바이너리로 실행됩니다

  • Pilot, Citadel, Galley는 코드 레벨의 패키지/모듈로 존재하지만, 별도 프로세스가 아닙니다

  • 모든 기능이 하나의 프로세스 내에서 goroutine으로 실행됩니다

Istiod가 제공하는 주요 포트:

포트
프로토콜
용도
기능

15010

gRPC

xDS (legacy)

이전 버전 호환성

15012

gRPC

xDS over TLS

주요 xDS API 엔드포인트

15014

HTTP

Control plane monitoring

메트릭 및 헬스 체크

15017

HTTPS

Webhook

Sidecar injection

8080

HTTP

Debug

디버깅 인터페이스

Istiod 배포

고가용성 구성:

리소스 사용량 (일반적):

  • CPU: 0.5 - 2 cores

  • Memory: 2 - 4 GB

  • 수천 개의 서비스와 파드 처리 가능

Data Plane: Envoy Proxy

Envoy 아키텍처

spinner

Envoy의 주요 구성 요소

1. Listeners

포트를 수신하고 연결을 받아들입니다:

Istio의 기본 Listeners:

  • 0.0.0.0:15001: 모든 아웃바운드 TCP 트래픽

  • 0.0.0.0:15006: 모든 인바운드 TCP 트래픽

  • 0.0.0.0:15021: Health check

  • 0.0.0.0:15090: Prometheus 메트릭

2. Filters

요청/응답을 처리하는 플러그인:

spinner

3. Clusters

업스트림 서비스의 논리적 그룹:

4. Endpoints

실제 파드 IP 목록:

Envoy 성능

벤치마크 (일반적인 환경):

  • 처리량: 10,000+ RPS per core

  • 지연 시간 추가: < 1ms (P99)

  • 메모리: 50-100 MB (기본 구성)

  • CPU: 0.1-0.5 cores (일반적인 부하)

Sidecar Injection 메커니즘

Injection 방식

spinner

원본 vs Injection 후

원본 Deployment:

Injection 후:

Sidecar Injection 활성화

자동 주입 (권장)

Namespace 레벨:

Pod 레벨 (Annotation):

수동 주입

istioctl kube-inject 명령어를 사용하여 YAML 파일에 직접 사이드카를 주입합니다.

수동 주입 사용 시나리오:

  • 자동 주입을 사용할 수 없는 환경

  • CI/CD 파이프라인에서 명시적으로 제어하고 싶을 때

  • 디버깅 목적으로 주입된 YAML을 확인하고 싶을 때

iptables와 트래픽 가로채기

istio-init 컨테이너

역할: 파드의 네트워크 트래픽을 Envoy Proxy로 리다이렉트하는 iptables 규칙 설정

spinner

iptables 규칙 상세

istio-init가 실행하는 명령:

트래픽 흐름 (iptables 적용 후)

spinner

iptables 규칙 확인

파드 내부에서 확인:

iptables vs eBPF (CNI Plugin)

Istio는 두 가지 트래픽 가로채기 방식을 지원합니다:

방식
장점
단점
사용 시나리오

iptables

간단, 범용적

Init Container 필요

기본 설정

eBPF (CNI)

Init 불필요, 빠름

최신 커널 필요

고성능, Ambient Mode

DNS 처리 메커니즘

Kubernetes DNS 기본 동작

spinner

/etc/resolv.conf (파드 내부):

Envoy의 DNS 처리

Istio에서는 Envoy가 DNS를 처리합니다:

spinner

장점:

  • CoreDNS 호출 불필요 (성능 향상)

  • 동적 Endpoint 업데이트

  • 고급 라우팅 (버전, 가중치 등)

DNS Proxy (선택 사항)

Istio 1.8+부터 DNS Proxy 기능 추가:

동작 방식:

spinner

DNS Proxy iptables 규칙:

xDS API 통신

xDS Protocol 개요

xDS: Discovery Service의 약자로, Envoy의 동적 구성 프로토콜입니다.

spinner

xDS API 종류

API
이름
역할
예시

LDS

Listener Discovery

수신 포트 구성

15001, 15006

RDS

Route Discovery

HTTP 라우팅 규칙

VirtualService

CDS

Cluster Discovery

업스트림 서비스

DestinationRule

EDS

Endpoint Discovery

파드 IP 목록

Service Endpoints

SDS

Secret Discovery

TLS 인증서

mTLS 인증서

xDS 통신 흐름

spinner

xDS 통신 확인

Envoy Admin API로 확인:

istioctl로 확인:

Sidecar 리소스를 통한 최적화

문제: 모든 서비스 정보 수신

기본적으로 각 Envoy는 메시 전체의 모든 서비스 정보를 받습니다:

spinner

문제점:

  • 메모리 사용량 증가

  • CPU 사용량 증가 (구성 처리)

  • 네트워크 대역폭 낭비

  • Istiod 부하 증가

해결책: Sidecar 리소스

Sidecar 리소스로 필요한 서비스만 수신하도록 제한:

Sidecar 리소스 예제

1. 네임스페이스 격리

2. 특정 서비스만 접근

3. 외부 서비스만 접근

Sidecar 리소스 효과

Before (Sidecar 없음):

  • 1000개 서비스 → 1000개 Cluster 구성

  • Envoy 메모리: ~500 MB

  • 구성 푸시 시간: 5-10초

After (Sidecar 적용):

  • 10개 서비스 → 10개 Cluster 구성

  • Envoy 메모리: ~80 MB

  • 구성 푸시 시간: < 1초

DNS와 Sidecar 통합

결과:

  • Envoy는 reviews, ratings만 해석

  • google.com 등 외부 도메인은 CoreDNS로 전달

  • 메모리 및 CPU 절약

참고 자료

공식 문서

역사 및 배경

심화 학습

마지막 업데이트