[Kubernetes] kube-proxy

INYEONG KIM·2024년 8월 23일
post-thumbnail

kube-proxy

Kubernetes 클러스터 내의 네트워크 프록시 역할 담당

  • 모든 노드에서 실행되며, 클러스터 내 service 트래픽이 올바르게 라우팅되도록 보장

주요 기능

  1. 서비스 디스커버리 및 로드 밸런싱: kube-proxy는 클러스터 내의 서비스에 대해 IP 주소와 포트를 할당하고, 클러스터 내의 모든 노드에서 이를 이용해 서비스 디스커버리와 로드 밸런싱을 수행

  2. IP 테이블 기반 구현: kube-proxy는 일반적으로 IP 테이블 규칙을 설정하여, 서비스의 가상 IP 주소(Cluster IP)를 실제 백엔드 파드로 라우팅합니다. 이를 통해 들어오는 요청이 적절한 파드로 전달

  3. 세션 어피니티: kube-proxy는 특정 클라이언트의 요청을 동일한 파드로 유지하는 "세션 어피니티"를 지원

kube-proxy 관련 예제

pod 에 대한 service 생성 (expose) 및 삭제 시 kube-proxy pod 내부에는 iptables 가 작성/삭제된다 (동작모드를 iptables 모드로 설정 시, 가장 일반적인 설정)

## 신규 pod 에 대한 service expose
➜ kubectl expose pod test-pod --n name test-service --port 80 -- target-port 80


## 실제 kube-proxy pod shell 에 접근 후 iptables-save 시 test-service 관련 로그 확인 가능
➜ crictl exec -it kube-proxy /bin/bash
➜ iptables-save | grep test-service
-A KUBE-SEP-UXLKP78BLQ6U499I -s 10.44.0.20/32 -m comment --comment "default/test-service:" -j KUBE-MARK-MASQ
-A KUBE-SEP-UXLKP78BLQ6U499I -p tcp -m comment --comment "default/test-service:" -m tcp -j DNAT --to-destination 10.44.0.20:80
-A KUBE-SERVICES ! -s 10.244.0.0/16 -d 10.97.45.18/32 -p tcp -m comment --comment "default/test-service:: cluster IP" -m tcp --dport 80 -j KUBE-MARK-MASQ

## service 삭제 이후 동일한 커맨드 수행 시 관련 내용이 사라졌음을 확인 가능
➜ kubectl delete svc test-pod
➜ crictl exec -it kube-proxy /bin/bash
➜ iptables-save | grep test-service
(none)

...

참고

https://kubernetes.io/ko/docs/concepts/overview/components/

profile
미래의 저를 위해 작성하는 중입니다 🙆‍♂️

0개의 댓글