반응형
1. CNI, kube-proxy, Service의 역할
CNI (Container Network Interface): Pod 네트워킹 담당
- Pod 간의 네트워크 연결을 설정하고 관리.
- 각 Pod에 고유 IP를 할당하고, Overlay 네트워크(예: VXLAN) 또는 라우팅 기반 네트워크를 통해 노드 간 트래픽을 지원.
- 주요 책임:
- Pod 간 네트워크 트래픽 처리.
- IP 주소 관리.
- 네트워크 플러그인 제공(예: Calico, Flannel, Cilium).
Service: 트래픽의 추상화된 접근 경로 제공
- Pod이 동적으로 생성/삭제되어도 Service를 통해 안정적인 통신 가능.
- ClusterIP, NodePort, LoadBalancer 등으로 트래픽 라우팅 경로를 제공.
- 주요 책임:
- 로드 밸런싱을 통해 여러 Pod으로 트래픽 분배.
- 클라이언트와 Pod 간 통신 추상화.
kube-proxy: 서비스 트래픽 라우팅
- Service와 Pod 간의 트래픽을 처리.
- iptables 또는 IPVS를 통해 네트워크 규칙을 설정하여 트래픽을 적절한 Pod으로 라우팅.
- 주요 책임:
- Service의 엔드포인트 관리.
- 클러스터 내/외부 트래픽 처리.
2. 통신 과정
A. Pod 간 통신 (CNI)
- Pod 생성:
- Kubernetes 스케줄러가 Pod을 특정 노드에 할당합니다.
- CNI 플러그인이 호출되어 해당 Pod에 고유 IP를 할당하고, 네트워크 인터페이스를 설정합니다.
- Pod 간 데이터 전송:
- 동일 노드:
- Pod들은 동일한 브릿지 네트워크(예: cbr0)를 공유하며, 직접 통신합니다.
- 다른 노드:
- CNI 플러그인이 Overlay 네트워크 또는 라우팅 기반 네트워크를 사용해 노드 간 통신을 설정합니다.
- 예: VXLAN(Flannel), BGP(Calico).
- 동일 노드:
B. Pod과 Service 간 통신 (kube-proxy + Service)
- 클라이언트가 Service IP로 요청:
- 클라이언트(내부 또는 외부)는 Service의 ClusterIP 또는 NodePort로 요청을 보냅니다.
- kube-proxy가 요청 처리:
- kube-proxy는 요청을 받아, Service와 연결된 Endpoints(Back-end Pod)를 참조합니다.
- iptables 또는 IPVS를 통해 트래픽을 특정 Pod으로 라우팅합니다.
- 트래픽 전달:
- kube-proxy는 CNI를 통해 Pod 간 네트워크를 설정하여 트래픽을 전달합니다.
- 다른 노드에 있는 Pod으로 트래픽을 전달할 경우, CNI 플러그인이 노드 간 통신을 지원합니다.
C. 노드 외부와 Pod 간 통신
- 클라이언트가 외부에서 NodePort로 요청:
- 클라이언트는 Service의 NodePort를 통해 클러스터 외부에서 접근합니다.
- 노드에서 kube-proxy가 요청 처리:
- kube-proxy는 NodePort를 ClusterIP로 변환하고, Endpoints를 참조하여 요청을 Pod으로 전달합니다.
- 트래픽 전달 과정:
- 동일 노드의 Pod이면 CNI를 통해 직접 전달.
- 다른 노드의 Pod이면, CNI가 노드 간 Overlay 네트워크 또는 라우팅을 통해 트래픽을 전달.
3. 세부 통신 흐름 예제
Pod 간 통신 (내부 네트워크)
- 클라이언트 Pod → 대상 Pod 요청:
- 클라이언트 Pod는 대상 Pod의 IP로 직접 요청합니다.
- 동일 노드:
- Pod들이 동일한 브릿지 네트워크를 공유하며, 직접 통신.
- 다른 노드:
- CNI 플러그인이 노드 간 네트워크를 설정하여 트래픽 전달.
Service를 통한 통신 (로드 밸런싱)
- 클라이언트 Pod → Service 요청:
- 클라이언트는 Service의 ClusterIP로 요청.
- kube-proxy가 요청을 받아, Service와 연결된 Endpoints(Back-end Pod)로 전달.
- Service → Pod:
- kube-proxy는 iptables/IPVS 규칙에 따라 트래픽을 라우팅.
- 라우팅 대상 Pod이 다른 노드에 있으면, CNI 플러그인이 트래픽 전달을 지원.
클러스터 외부에서 통신
- 클라이언트 → NodePort 요청:
- 외부 클라이언트가 특정 노드의 NodePort로 요청.
- kube-proxy가 요청을 처리하여 ClusterIP로 변환.
- NodePort → Service → Pod:
- kube-proxy가 Endpoints를 참조하여 적절한 Pod으로 트래픽을 전달.
- Pod 응답 → 클라이언트:
- Pod에서 응답이 클라이언트로 반환.
- SNAT(Source NAT)가 설정되어, 응답이 클라이언트로 올바르게 전달.
4. 요약
- CNI는 Pod 간 네트워크를 설정하고 관리하며, 노드 간 통신을 지원합니다.
- kube-proxy는 Service를 통해 Pod으로 트래픽을 라우팅합니다. 이를 위해 iptables 또는 IPVS를 사용하여 트래픽 규칙을 설정합니다.
- Service는 ClusterIP, NodePort, LoadBalancer 등을 통해 클라이언트와 Pod 간의 추상화된 통신 경로를 제공합니다.
- CNI, Service, kube-proxy는 상호 보완적으로 작동하여 Kubernetes 클러스터의 네트워킹을 원활하게 유지합니다.
반응형
'K8S' 카테고리의 다른 글
service와 clusterIP의 관계에 대해 알아보자 (0) | 2024.12.21 |
---|---|
Service와 kube-proxy의 차이 (0) | 2024.12.21 |
kube-proxy와 cni의 비교 (0) | 2024.12.21 |
[kubernetes] IPVS에 대해 알아보자! (0) | 2024.12.21 |
[kubenetes] Probe 에 대해 알아보자 (0) | 2024.12.20 |
댓글