좋은 포인트예요 👍 제가 간단히 ClusterIP / NodePort / LoadBalancer 각각이 kube-proxy 입장에서 어떻게 iptables (혹은 IPVS) 규칙으로 표현되는지 정리해드릴게요.


1. ClusterIP

서비스에 클러스터 내부 전용 가상 IP 부여.

iptables NAT 테이블에 아래와 같은 규칙이 생김:

-A KUBE-SERVICES -d 10.96.0.1/32 -p tcp --dport 80 -j KUBE-SVC-XXXXX
-A KUBE-SVC-XXXXX -m statistic --mode random --probability 0.5 -j KUBE-SEP-AAAAA
-A KUBE-SVC-XXXXX -j KUBE-SEP-BBBBB
-A KUBE-SEP-AAAAA -s 10.244.0.5/32 -j DNAT --to-destination 10.244.0.5:8080
-A KUBE-SEP-BBBBB -s 10.244.0.6/32 -j DNAT --to-destination 10.244.0.6:8080

👉 즉, 10.96.0.1:80(ClusterIP:Port) → Pod IP:Port 로 DNAT 변환.


2. NodePort

모든 노드에 외부 접근 가능한 포트(예: 30080) 을 열어줌.

iptables 규칙:

-A KUBE-NODEPORTS -p tcp --dport 30080 -j KUBE-SVC-XXXXX

👉 클러스터 외부에서 NodeIP:30080 으로 접근 시, 위와 동일한 Pod 로드밸런싱 규칙(KUBE-SVC-XXXXX)을 타게 됨.


3. LoadBalancer

클라우드 환경일 경우 외부 L4 LB 가 붙음.
외부 LB IP → 내부적으로는 결국 NodePort 규칙을 사용.

즉, 클라우드 LB → NodeIP:30080 → iptables → Pod


4. ExternalName

kube-proxy iptables 규칙 없음 ❌
그냥 ClusterDNS에서 CNAME 레코드 리턴해서 외부 DNS 이름으로 직접 연결.


5. IPVS 모드

iptables 대신 Linux 커널 레벨의 IPVS 테이블 사용.
예시 (ipvsadm -Ln):

TCP  10.96.0.1:80 rr
  -> 10.244.0.5:8080 Masq  1  0  0
  -> 10.244.0.6:8080 Masq  1  0  0

👉 ClusterIP 10.96.0.1:80 로 들어오면 Round Robin(rr) 방식으로 Pod로 전달.


📌 정리하자면:

  • ClusterIP → iptables/IPVS에서 Pod 로드밸런싱 규칙 생성
  • NodePort → NodeIP 특정 포트(30000~32767)를 열어줌 → 내부는 ClusterIP와 동일 처리
  • LoadBalancer → 클라우드 L4 LB가 NodePort를 타도록 설정
  • ExternalName → kube-proxy 관여 X, DNS 레벨에서 처리

 

 

====

 

중간에 이런저런 것들이 너무 많다

728x90

'낙서' 카테고리의 다른 글

back 12  (0) 2025.09.01
ㅋㅅㅁㅅ ㅋㅅㄱㅎ  (0) 2025.09.01
ㅂㅇㅍㅆㅂㅇㄴ  (0) 2025.09.01
리눅스 시스템 파일 디렉토리 권한 및 특이포인트(gpt)  (0) 2025.08.30
c코o멘mm커a맨n_D  (0) 2025.08.29

+ Recent posts