카테고리 없음
[8주차] Istio Traffic Flow : 사이드카 주입, iptables 및 트래픽 라우팅
구구달스
2025. 5. 28. 10:09
CloudNet@ 가시다님이 진행하는 Istio Hands-on Study [1기]
https://jimmysong.io/en/blog/sidecar-injection-iptables-and-traffic-routing/#iptables-manipulation-analysis
의 내용을 정리
🚀 Sidecar Injection, iptables, and Traffic Routing 쉽게 이해하기
- 클라우드 네이티브 환경에서 애플리케이션의 네트워크 트래픽을 관리하는 방법은 매우 중요합니다.
- 특히 Kubernetes 환경에서는 Sidecar 패턴과 iptables를 활용해 트래픽을 효과적으로 라우팅할 수 있습니다.
🛠️ Sidecar 패턴이란?
- Sidecar 패턴은 애플리케이션의 주요 기능과 별개로, 추가적인 기능을 제공하는 컴포넌트를 컨테이너 형태로 함께 배포하는 방식입니다. 마치 오토바이에 붙은 사이드카처럼, 메인 애플리케이션 컨테이너 옆에 보조 컨테이너가 붙어 동작합니다. 이 패턴은 특히 Istio 같은 서비스 메쉬에서 자주 사용됩니다.
- Sidecar는 주로 네트워크 프록시 역할을 하며, 애플리케이션의 트래픽을 관리하거나 모니터링, 로깅, 보안 등의 기능을 추가합니다. 예를 들어, Istio는 Envoy 프록시를 Sidecar로 배포해 트래픽 라우팅, 로드 밸런싱, 보안 정책 적용 등을 수행합니다.
Sidecar 패턴은 메인 애플리케이션과 별도로 보조 컨테이너를 배포해
네트워크 관리나 부가 기능을 처리합니다.
🔧 Sidecar Injection의 개념
- Sidecar Injection은 Kubernetes 환경에서 Sidecar 컨테이너를 Pod에 자동으로 추가하는 과정입니다. 수동으로 Pod에 Sidecar를 추가할 수도 있지만, Istio 같은 도구는 이를 자동화합니다. 이 과정을 통해 애플리케이션 코드나 설정을 변경하지 않고도 Sidecar를 배포할 수 있습니다.
- Sidecar Injection은 주로 Admission Controller를 통해 이루어집니다. Pod가 생성될 때, Kubernetes API 서버는 Istio의 Mutating Webhook을 호출하고, 이 Webhook이 Pod 스펙에 Sidecar 컨테이너(예: Envoy)를 추가합니다.
apiVersion: v1
kind: Pod
metadata:
name: example-pod
namespace: default
spec:
containers:
- name: main-app
image: my-app:latest
- name: istio-proxy
image: istio/proxyv2:latest
- 위 예시는 Sidecar Injection 후 Pod에 메인 애플리케이션과 Istio 프록시 컨테이너가 함께 포함된 모습입니다.
Sidecar Injection은
Kubernetes에서 Sidecar 컨테이너를 자동으로 Pod에 추가해
애플리케이션 변경 없이 네트워크 기능을 확장합니다.
🌐 iptables란?
- iptables는 Linux 커널의 Netfilter 프레임워크를 사용해 네트워크 트래픽을 제어하는 도구입니다. 이를 통해 패킷 필터링, NAT(Network Address Translation), 트래픽 라우팅 등을 수행할 수 있습니다. Kubernetes와 Istio 환경에서는 Sidecar가 트래픽을 관리하기 위해 iptables를 자주 활용합니다.
- iptables는 패킷이 시스템을 통과할 때 특정 규칙에 따라 처리합니다. 예를 들어, 특정 포트로 들어오는 트래픽을 다른 포트로 리다이렉트하거나, 특정 IP로의 접근을 차단할 수 있습니다.
iptables는 Linux에서 네트워크 트래픽을 제어하는 도구로,
패킷 필터링과 라우팅을 가능하게 합니다.
🔄 Sidecar와 iptables로 트래픽 라우팅하기
- Sidecar 패턴에서 트래픽 라우팅은 Sidecar 컨테이너(예: Envoy)가 애플리케이션의 모든 인바운드와 아웃바운드 트래픽을 가로채는 방식으로 이루어집니다. 이를 위해 iptables가 사용됩니다.
- Istio는 Pod의 네트워크 네임스페이스에 iptables 규칙을 설정해 트래픽을 Envoy 프록시로 리다이렉트합니다. 예를 들어, 애플리케이션이 외부 서비스로 요청을 보내면, iptables 규칙이 이를 Envoy로 보내고, Envoy가 트래픽을 처리한 후 목적지로 전달합니다.
- 다음은 Istio가 설정하는 iptables 규칙의 예입니다:
iptables -t nat -A PREROUTING -p tcp -j ISTIO_REDIRECT
iptables -t nat -A ISTIO_REDIRECT -p tcp --dport 80 -j REDIRECT --to-ports 15001
- 이 규칙은 TCP 80번 포트로 들어오는 트래픽을 Envoy가 수신하는 15001번 포트로 리다이렉트합니다.
Sidecar는 iptables를 사용해 애플리케이션 트래픽을 가로채고,
Envoy 프록시를 통해 라우팅 및 관리를 수행합니다.
🛡️ 트래픽 라우팅의 이점
- Sidecar와 iptables를 활용한 트래픽 라우팅은 여러 이점을 제공합니다:
- 투명성: 애플리케이션 코드를 변경하지 않고 트래픽 관리 가능.
- 보안: mTLS(Mutual TLS)를 통해 트래픽 암호화.
- 관찰 가능성: 트래픽 모니터링 및 로깅으로 디버깅 용이.
- 유연성: 트래픽 분할, 카나리 배포, A/B 테스트 등을 쉽게 구현.
Sidecar와 iptables를 사용하면
투명하고 안전하며 유연한 트래픽 관리가 가능합니다.
- 간단히 말해, Sidecar는 애플리케이션 옆에서 네트워크 트래픽을 대신 관리해주는 도우미입니다. iptables는 이 도우미가 트래픽을 올바른 방향으로 보내도록 도와주는 교통 표지판 같은 역할을 합니다. Istio 같은 서비스 메쉬는 이 과정을 자동화해 개발자가 네트워크 관리에 신경 쓰지 않도록 돕습니다.
Sidecar와 iptables는
복잡한 네트워크 관리를 자동화하고 단순화하는 도구입니다.
📌 핵심 요약
- Sidecar 패턴: 메인 애플리케이션과 별도로 보조 컨테이너를 배포해 네트워크 관리, 로깅, 보안 등의 기능을 추가.
- Sidecar Injection: Kubernetes에서 Sidecar 컨테이너를 자동으로 Pod에 추가하는 과정.
- iptables: Linux에서 네트워크 트래픽을 제어하는 도구로, 패킷 필터링과 리다이렉션을 수행.
- 트래픽 라우팅: Sidecar가 iptables를 사용해 트래픽을 가로채고 Envoy 프록시로 라우팅.
- 이점: 투명성, 보안, 관찰 가능성, 유연성을 제공해 애플리케이션 관리 효율성 증대.