카테고리 없음

[8주차] Istio Traffic Flow : Istio에서 트래픽 가로채기와 라우팅

구구달스 2025. 5. 28. 10:35
CloudNet@ 가시다님이 진행하는 Istio Hands-on Study [1기]
https://jimmysong.io/en/blog/sidecar-injection-iptables-and-traffic-routing/#iptables-manipulation-analysis 
의 내용을 정리

🚀 Istio에서 트래픽 가로채기와 라우팅 쉽게 이해하기.

https://jimmysong.io/en/blog/sidecar-injection-iptables-and-traffic-routing/#iptables-manipulation-analysis

🌟 전체 구조 이해하기

  • 다이어그램은 Productpage라는 서비스가 포함된 Pod를 중심으로 트래픽 흐름을 보여줍니다. Pod는 Kubernetes에서 애플리케이션이 실행되는 기본 단위로, 두 가지 컨테이너를 포함합니다:
    • App Container: Productpage 서비스가 실행되는 메인 애플리케이션 컨테이너입니다.
    • Sidecar Proxy: Istio가 추가한 Envoy 프록시로, 네트워크 트래픽을 관리합니다.
  • 이 Pod는 Reviews 서비스와 통신하며, 트래픽은 두 가지 유형으로 나뉩니다:
    • Inbound TCP Traffic: 외부에서 Pod로 들어오는 트래픽 (예: 사용자가 Productpage에 접속).
    • Outbound Traffic: Pod에서 외부(예: Reviews 서비스)로 나가는 트래픽.
  • 이 트래픽은 Linux 커널의 Netfilter 프레임워크와 iptables를 통해 관리됩니다. Netfilter는 네트워크 패킷을 처리하는 시스템이고, iptables는 트래픽의 경로를 설정하는 규칙을 정의합니다.
Pod에는 App Container와 Sidecar Proxy가 있으며,
Netfilter와 iptables로 트래픽을 관리합니다.

🚦 트래픽 흐름 단계별로 살펴보기

📥 Inbound TCP Traffic 처리

1️⃣ Inbound TCP Traffic 시작

  • 외부에서 Productpage Pod로 TCP 트래픽이 들어옵니다. 예를 들어, 사용자가 Productpage 웹사이트에 접속하려고 요청을 보내면 이 트래픽이 발생합니다. 이 트래픽은 먼저 Linux 커널의 Netfilter 프레임워크를 거칩니다.

2️⃣ PREROUTING 단계

  • 트래픽은 Netfilter의 PREROUTING 단계에 도착합니다. PREROUTING은 패킷이 시스템에 들어오자마자 처리되는 첫 번째 단계입니다. 여기서 iptables 규칙을 확인하고, Istio가 설정한 규칙에 따라 트래픽을 ISTIO_REDIRECT로 보냅니다.

3️⃣ ISTIO_REDIRECT로 리다이렉트

  • ISTIO_REDIRECT 규칙은 트래픽을 Sidecar Proxy(Envoy)가 리스닝하는 포트로 리다이렉트합니다. 예를 들어, 원래 80번 포트로 들어오던 트래픽이 Envoy의 15001번 포트로 리다이렉트됩니다.

4️⃣ Sidecar Proxy에서 처리

  • 트래픽이 Sidecar Proxy(Envoy)에 도착하면, Envoy는 Istio의 라우팅 규칙(xDS 설정)에 따라 트래픽을 처리합니다. 예를 들어, 트래픽을 암호화하거나 로깅할 수 있습니다.

5️⃣ App Container로 전달

  • Envoy가 트래픽을 처리한 후, App Container로 보냅니다. App Container는 9080번 포트에서 트래픽을 수신하며, Productpage 서비스가 요청을 처리합니다.
Inbound 트래픽은 iptables 규칙에 따라
Sidecar Proxy로 리다이렉트된 후 App Container로 전달됩니다.

📤 Outbound Traffic 처리

6️⃣ Outbound Traffic 시작

  • Productpage 서비스가 Reviews 서비스에 요청을 보내려고 합니다. 이 요청은 Outbound Traffic으로, App Container에서 시작됩니다. 이 트래픽은 다시 Netfilter 프레임워크를 거칩니다.

7️⃣ ISTIO_OUTPUT으로 라우팅

  • Outbound 트래픽은 Netfilter의 OUTPUT 단계에서 처리됩니다. iptables 규칙에 따라 트래픽이 ISTIO_OUTPUT으로 보내집니다.

8️⃣ ISTIO_REDIRECT로 리다이렉트

  • ISTIO_OUTPUT에서 트래픽은 ISTIO_REDIRECT로 리다이렉트됩니다. 이 과정에서 트래픽은 Envoy가 리스닝하는 포트(예: 15001)로 보내집니다.

9️⃣ Sidecar Proxy에서 처리

  • 트래픽이 Sidecar Proxy(Envoy)에 도착하면, Envoy는 xDS 설정에 따라 트래픽을 처리합니다. 예를 들어, Reviews 서비스로 요청을 보낼 때 트래픽을 암호화(mTLS)하거나 특정 버전의 Reviews 서비스로 라우팅할 수 있습니다.

1️⃣0️⃣ 최종 목적지로 전달

  • Envoy가 트래픽을 처리한 후, Reviews 서비스로 요청을 보냅니다. 이 트래픽은 POSTROUTING 단계를 거쳐 외부로 나갑니다.
Outbound 트래픽도 iptables 규칙에 따라
Sidecar Proxy를 거친 후 목적지로 전달됩니다.

🧩 추가적인 Netfilter 경로

다이어그램에는 트래픽이 다른 상황에서 처리되는 경로도 표시되어 있습니다:

  • 11~12: Sidecar Proxy에서 처리된 Outbound Traffic이 외부로 나가는 경로입니다.
  • 13~14: 일부 트래픽은 ISTIO_INBOUND를 거치지 않고 INPUT이나 OUTPUT 단계로 갈 수 있습니다.
  • 15~16: 내부 트래픽(Internal Traffic)이나 호스트가 아닌(non-host) 트래픽은 다른 경로로 처리됩니다.
트래픽은 상황에 따라 다양한 Netfilter 경로를 거치지만,
대부분 Sidecar Proxy를 통해 관리됩니다.
  • Sidecar Proxy는 네트워크 트래픽을 관리하는 도우미이고, iptables는 트래픽이 올바른 경로로 가도록 안내하는 교통 표지판입니다. Istio는 이 과정을 자동화해 개발자가 복잡한 네트워크 설정을 직접 하지 않아도 됩니다. 예를 들어, 우리가 편지를 보낼 때 우체국이 편지를 분류하고 배달하는 것처럼, Sidecar Proxy는 트래픽을 받아서 필요한 처리를 한 후 목적지로 보냅니다. iptables는 우체국 직원이 편지를 어디로 보낼지 결정하는 규칙과 같습니다.

📌 핵심 요약

  • Pod와 Sidecar: Productpage Pod에는 App Container와 Sidecar Proxy(Envoy)가 포함됩니다.
  • Inbound Traffic: 외부에서 들어오는 트래픽은 iptables 규칙에 따라 Sidecar Proxy로 리다이렉트된 후 App Container로 전달됩니다.
  • Outbound Traffic: Pod에서 나가는 트래픽도 Sidecar Proxy를 거쳐 Reviews 서비스 같은 목적지로 전달됩니다.
  • iptables와 Netfilter: iptables는 Netfilter 프레임워크를 사용해 트래픽을 리다이렉트하고 관리합니다.