Kube-Proxy

2024. 12. 12. 12:48쿠버네티스/쿠버네티스

728x90
반응형

 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 [이쿠의 슬기로운 개발생활:티스토리]

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

https://h-susu.tistory.com/14

 

[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