2024. 12. 12. 12:48ㆍ쿠버네티스/쿠버네티스
K8S 클러스터 내의 주된 호출 케이스가 pod - Service 간의 통신이라고 말씀드렸는데요. 그 이유는 쿠버네티스의 pod는 IP가 가변하는 특성을 가지고 있기 때문입니다. Service 객체를 사용해, 가변하는 여러 Pod의 트래픽을 앞단에서 받아낼 수 있습니다.
결국 실제 Service로 오는 요청을 로드 밸런싱하는 작업은 kube-proxy 컴포넌트가 수행
1. Kube-Proxy 개요
- 역할: Kubernetes 클러스터 내 네트워크 프록시로, 서비스의 일부를 구현.
- 각 노드에서 실행되며, 네트워크 규칙을 유지하여 클러스터 내외부의 네트워크 세션에서 파드로의 통신을 허용
- 서비스가 가상 IP를 통해 일관된 인터페이스를 제공하도록 지원
2. Kube-Proxy의 기능
- 서비스와 엔드포인트 관리:
- 새로운 서비스가 생성되면 각 노드에 적절한 네트워크 규칙을 생성하여 트래픽을 백엔드 파드로 전달
- iptables나 IPVS를 사용하여 패킷을 제어하고 로드 밸런싱 수행
- 네트워크 규칙 설정:
- iptables 모드: 리눅스 커널의 iptables를 사용하여 트래픽을 제어하며, 안정적이고 빠른 성능 제공
- IPVS 모드: 리눅스 커널의 IPVS 기능을 사용하여 더 높은 성능과 확장성을 제공
3. Kube-Proxy 설치 및 배포
- 설치 방법:
- Kubernetes 릴리스 페이지에서 kube-proxy 바이너리를 다운로드하고, 압축을 풀어 서비스로 실행.
- kubeadm 도구를 사용하면 DaemonSet 형태로 각 노드에 kube-proxy가 배포됨
DaemonSet
- 모든 워커 노드에 하나씩 위치하여, 각 노드에서 서비스 기반으로 통신 가능하도록 함
4. 주요 개념
- Pod 네트워킹: 모든 파드가 서로 통신할 수 있도록 내부 가상 네트워크를 구성.
- 서비스: 파드를 외부에 노출시키기 위한 가상 컴포넌트로, 실제 인터페이스나 프로세스가 아닌 메모리 상의 존재.
- 네트워크 처리: kube-proxy는 서비스의 트래픽을 적절한 파드로 라우팅하며, 이를 통해 안정적인 네트워크 환경을 유지.
iptables mode의 Networking 준비 단계
[ 1 ]
iptables Mode의 kube-proxy는
kube-apiserver와 통신하여 Cluster의 Pod와 Service object의
생성/삭제 상태를 Monitoring 하고있음
[ 2 ]
Serivce Object가 생성되면
kube-proxy는 iptables 설정으로 해당 Service Object와
Service Object에 매칭되는 Pod정보를 기록한
Netfilter Chain을 생성함.
iptables mode의 Networking 과정
[ 1 ]
Client는 Service Obejct의 Cluster IP로 request 패킷을 보냄.
[ 2 ]
해당 request는 Node(Host)의 iptables 설정에 따라 Linux Kernel Netfiler로 들어옴.
[ 3 ]
Netfilter로 들어온 패킷은 Netfilter Chain 설정에 따라
정해진 Pod로 전송됨.
[ 4 ]
만약 적절한 pod가 다수인 경우는 임의로 선택함
지원되는 로드밸런싱 알고리즘
랜덤 선택
IPVS mode의 Networking 준비 단계
[ 1 ]
IPVS Mode의 kube-proxy는
kube-apiserver와 통신하여 Cluster의 Pod와 Service object의
생성/삭제 상태를 Monitoring 하고있음.
[ 2 ]
Serivce Object가 생성되면
kube-proxy는 IPVS Hash Tables에 해당 Service Object와
Service Object에 매칭되는 Pod정보를 기록함.
[ 3 ]
IPVS Mode의 kube-proxy는
Service Object 과 관련있는 트래픽을 IPVS로 전달하기 위해
iptables ipsec을 설정함.
clusterIP, NodePort, LoadBalancer Type의 패킷을 IPVS로 전달하는
Chain을 생성함.
IPVS mode의 Networking 과정
[ 1 ]
Client는 Service Obejct의 Cluster IP로 request 패킷을 보냄.
[ 2 ]
해당 request는 Node(Host)의 iptables 설정에 따라 Linux Kernel Netfiler로 들어옴.
[ 3 ]
Netfilter로 들어온 패킷은 Netfilter Chain 설정에 따라
IPVS로 전달됨
[ 4 ]
IPVS는 해쉬 테이블을 확인하고 매칭되는 Pod로 패킷을 전달함.
만약 매칭되는 Pod가 다수인 경우 설정된 Load Balancing을 통해 선정함.
default LoadBalancer는 Round-Robin임.
출처: https://ikcoo.tistory.com/130 [이쿠의 슬기로운 개발생활:티스토리]
Kubernetes kube-proxy Mode 분석
Kubernetes kube-proxy Mode 분석[kubernetes kube-proxy 관련 글 목록]Kubernetes kube-proxy Mode 분석Kubernetes kube-proxy IPVS Mode 설정Kubernetes NodePort Networking 분석 (kube-proxy : iptable mode)Kubernetes NodePort Networking 분석 (kube-pr
ikcoo.tistory.com
https://kubernetes.io/ko/docs/reference/networking/virtual-ips/
가상 IP 및 서비스 프록시
쿠버네티스 클러스터의 모든 노드는 kube-proxy를 실행한다(kube-proxy를 대체하는 구성요소를 직접 배포한 경우가 아니라면). kube-proxy는 ExternalName 외의 type의 서비스를 위한 가상 IP 메커니즘의 구현
kubernetes.io
[k8s network] kube-proxy 란? kube-proxy 역할
Intro K8S cluster 내부에서는 컨테이너를 포함한 여러 객체들 간 여러 네트워킹이 이루어집니다. 그 중 주된 케이스는 pod 와 Service 객체 간의 통신이 아닐까 생각됩니다. 수많은 마이크로 서비스가
h-susu.tistory.com
https://nyeongnyeong.tistory.com/357
[kubernetes] kube-proxy
kube-proxy는 클러스터의 각 노드에서 실행되는 네트워크 프록시로 쿠버네티스 서비스 개념의 일부를 구현한다. kube-proxy는 노드에서 네트워크 규칙을 유지한다. 이러한 네트워크 규칙은 클러스터
nyeongnyeong.tistory.com
'쿠버네티스 > 쿠버네티스' 카테고리의 다른 글
Kubernetes Pods 요약 (0) | 2024.12.30 |
---|---|
쿠버네티스 파드 (0) | 2024.12.14 |
Kubelet (1) | 2024.12.12 |
Kube-Scheduler (0) | 2024.12.12 |
Kube Controller Manager (0) | 2024.12.12 |