ByeongHunKim / Cloudclub-istio-skyline

☁️ Cloud Club's collaborative journey exploring Istio and service mesh technologies 🚀
https://www.cloudclub.kr/
2 stars 0 forks source link

[Question] Envoy Proxy가 어떻게 트래픽을 가로채는가? #9

Closed ByeongHunKim closed 4 weeks ago

ByeongHunKim commented 1 month ago

Question / 질문 내용

sidecar로 주입된 proxy container가 어떻게 트래픽을 가로채는 지 정확한 동작원리가 궁금합니다

Context / 상황 설명

강의에서 envoy를 소개할 때 질문에 대한 답변은 없었고 그냥 구조만 설명하네요

현재 이해하고 있는 부분

  1. Sidecar 주입 istio-sidecar-injector에 의해 istio-proxy(Envoy) 컨테이너를 sidecar로 주입

  2. iptables 규칙 설정 Pod 생성 시 istio-init이라는 init 컨테이너가 실행되어 iptables 규칙을 설정. 이 규칙들은 Pod로 들어오고 나가는 모든 네트워크 트래픽을 istio-proxy로 리다이렉트 됨

  3. 트래픽 가로채기 설정된 iptables 규칙에 의해 Pod로 들어오는 인바운드 트래픽은 15006 포트로, 아웃바운드 트래픽은 15001 포트로 리다이렉트

  4. 트래픽 처리 istio-proxy는 가로챈 트래픽을 검사하고 Istio의 라우팅 규칙 등을 적용하여 적절히 처리. 인바운드 트래픽은 애플리케이션 컨테이너로 전달하고, 아웃바운드 트래픽은 대상 서비스로 라우팅

  5. 라우팅 규칙을 받아 트래픽이 어떻게 제어되는가(?)

What I've Tried / 시도한 방법 질문에 대한 답을 찾기 위해 시도해본 방법이 있다면 설명해주세요

자료를 찾고 있습니다

Resources / 관련 자료 질문과 관련된 문서, 링크, 코드 등이 있다면 여기에 첨부해주세요

image

출처: https://jimmysong.io/en/blog/beyond-istio-oss/

Additional context / 추가 사항 기타 추가적인 정보나 생각이 있다면 여기에 작성해주세요

ByeongHunKim commented 1 month ago

netFilter :

Netfilter is a framework that allows to configure packet filtering, create NAT or port translation rules, and manage the traffic flow in the network.

iptables :

Iptables, on the other hand, is a user-space utility program that allows you to configure the IP packet filter rules of the Linux kernel firewall.

출처 : https://learnk8s.io/kubernetes-network-packets#:~:text=do%20they%20work%3F-,Intercepting%20and%20rewriting%20traffic%20with%20Netfilter%20and%20Iptables,-The%20service%20in

ByeongHunKim commented 1 month ago
image
ByeongHunKim commented 1 month ago

References

https://andrewpage.tistory.com/83

https://github.com/istio/istio/wiki/Understanding-IPTables-snapshot

https://brunch.co.kr/@growthminder/84#comments

https://linjing.io/post/istio-traffic-control-deepdive/

ByeongHunKim commented 1 month ago

@opp-13 @esc-beep

직접 조회한 명령어

nsenter명령어-설명

# istio-injection=enabled 상태 이후 proxy container 주입된 상태. 즉 istio-init container가 iptables 규칙 설정 완료
# pod/production-xxxxx  2/2     Running   0          5d15h

NODENAME=$(kubectl get pods production-xxxxx -o jsonpath="{.spec.nodeName}")

echo $NODENAME

# 해당 노드로 ssh 접속

CONTAINER_ID=$(kubectl get pod production-xxxxx -o jsonpath='{.status.containerStatuses[0].containerID}' | cut -d'/' -f3)

echo $CONTAINER_ID 

sudo crictl inspect $CONTAINER_ID

sudo nsenter -t $(sudo crictl inspect $CONTAINER_ID | jq -r .info.pid) -n iptables -L -t nat -v

해당 어플리케이션의 iptables 규칙

image

체인에 명시된 부분 확인

PREROUTING 체인:

OUTPUT 체인:

ISTIO_INBOUND 체인:

ISTIO_IN_REDIRECT 체인:

ISTIO_OUTPUT 체인:

ISTIO_REDIRECT 체인:

ByeongHunKim commented 1 month ago

Istio-init container가 실행하는 iptables 규칙 적용 shell file

https://github.com/istio/cni/blob/master/tools/packaging/common/istio-iptables.sh

읽어보면 좋은 istio 레퍼런스

https://velog.io/@kimsehwan96/Istio-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%A0-%EC%88%98-%EC%9E%88%EC%9D%84%EA%B9%8C

Iptables 블로그

https://nyyang.tistory.com/133

ByeongHunKim commented 1 month ago

image

ByeongHunKim commented 1 month ago

image

ByeongHunKim commented 1 month ago

image