Istio Sidecar Injectio이란
Istio에서 사이드카(sidecar) 인젝션은 워크로드(주로 Kubernetes 환경에서 Pod)가 생성될 때 Envoy 프록시를 Pod 내부에 자동 또는 수동으로 주입하여, Istio 서비스 메시에 참여할 수 있도록 만드는 핵심 메커니즘입니다. 이를 통해 트래픽을 중앙 집중적으로 제어하고 보안/정책/관찰성 등을 일관되게 적용할 수 있습니다.
Istio 사이드카 인젝션의 원리
Mutating Admission Webhook을 통한 자동 주입
- Mutating Admission Webhook: Kubernetes에는 Pod이 생성되거나 업데이트될 때, API 서버로 들어오는 요청을 **수정(mutating)**할 수 있는 웹훅(Admission Controller) 구조가 있습니다.
- Istio의 Webhook: Istio는 이를 활용해 새로운 Pod 생성 요청이 들어오면, Pod 사양(Spec)에 Envoy 사이드카(Container)와 필요한 볼륨, 환경 변수 등을 추가합니다.
- 동작 방식
- 사용자가 kubectl apply -f <Pod/Deployment YAML> 과 같은 명령으로 리소스를 생성
- API 서버가 Admission Controller 체인을 거치면서 Istio의 mutating webhook에게 요청 전달
- Istio 사이드카 인젝션 로직이 Pod Spec을 수정하여 Envoy 사이드카와 Init Container 등을 추가
- 수정된 Pod Spec이 최종적으로 etcd에 저장되고 스케줄링되어 실제로 Pod가 생성됨
Envoy 사이드카의 역할
- 트래픽 제어: Pod 내에서 Envoy 프록시는 애플리케이션 컨테이너가 송수신하는 트래픽을 가로채(Istio CNI나 iptables 등) Istio 컨트롤 플레인(Pilot, Mixer, etc.)에서 정의한 정책을 일괄 적용합니다.
- 관찰 및 모니터링: 각각의 Envoy 사이드카는 요청에 대한 메트릭(지연 시간, 성공/실패 횟수 등)을 수집하고 전달해, 서비스 전체에 대한 관측(Observability)을 향상시킵니다.
- 보안(SSL/TLS Termination, Mutual TLS): 사이드카 간 mTLS가 활성화되어 있으면, 서비스 간 통신 시 자동으로 인증·암호화 과정을 수행합니다.
Istio 사이드카 인젝션 방법
자동 사이드카 인젝션(Auto Injection)
- 네임스페이스에 라벨 추가
특정 네임스페이스의 모든 Pod에 사이드카가 자동으로 주입되도록 설정하려면, 해당 네임스페이스에 istio-injection=enabled 라벨을 추가합니다.