Kube-proxy
Pod 간 통신
- Kubernetes에서 모든
Pod는 다른 모든Pod에 도달할 수 있다. - 이는 클러스터에 배포된 Pod Networking Solution에 의해 가능하다.
- Pod Network는 내부 가상 네트워크로, 모든 노드에 퍼져있어 모든 Pod를 연결한다.
예시
노드 A에 웹 애플리케이션 Pod, 노드 B에 데이터베이스 Pod가 실행 중일 경우:
- 웹 애플리케이션 Pod는 DB Pod의 IP를 통해 직접 접근 가능하다.
- 하지만 Pod의 IP는 변동될 수 있어,
Service를 통해 접근하는 것이 안정적이다.
Service와 Kube-Proxy의 역할
Service
Service는Pod와 달리 네트워크 인터페이스나 리슨 프로세스가 없는, Kubernetes 메모리에 존재하는 가상의 개념이다.Service는 고정된ClusterIP를 제공해Pod들의 IP 변경에도 안정적으로 접근 가능하게 한다.
Kube-Proxy
kube-proxy는 각 노드에서 실행되는 프로세스이다.- 새로운
Service가 생성되면 이를 감지하고, 각 노드에 해당Service로 트래픽을 전달할 규칙을 자동으로 생성한다. - 규칙 생성 방식 중 하나가 iptables 규칙이다.
- 예:
ServiceIP가10.96.0.12,PodIP가10.32.0.15일 때
→ “목적지가10.96.0.12라면10.32.0.15로 포워딩” 규칙을 iptables에 추가.
- 예:
- 따라서
kube-proxy는Pod가 아닌Service에 대한 실제 네트워크 트래픽 처리자 역할을 한다.
설치
Kubeadm Setup
설치
kubeadm으로 클러스터 설치 시kube-proxy는DaemonSet(Pod)형태로 자동으로 설치된다.
설정 조회
kubectl get configmap kube-proxy -n kube-system -o yaml
kube-system네임스페이스에ConfigMap객체로 설정이 저장되어 있다.- 설정을 바꾸고 싶다면 위
ConfigMap을 변경하고,kubectl rollout restart daemonset kube-proxy -n kube-system으로DaemonSet을 다시 실행해주어야 한다.
Manual Setup (Kubernetes The Hard Way)
설치
wget https://dl.k8s.io/v1.31.14/bin/linux/amd64/kube-proxy
sudo mv kube-scheduler /usr/local/bin/
sudo chmod +x /usr/local/bin/kube-proxy
sudo nano /etc/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Network Proxy
Documentation=https://kubernetes.io/docs/concepts/services-networking/service/
After=network.target
[Service]
ExecStart=/usr/local/bin/kube-proxy \
--config=/var/lib/kube-proxy/kube-proxy-config.yaml \
--v=2
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start kube-proxy
sudo systemctl enable kube-proxy
- 위 명령어는
kube-proxy를 바이너리를 직접 다운로드하여 설치하는 명령어이다. /usr/local/bin/으로 이동시켜 PATH에 등록한다.- 이에 시스템 전역 실행 파일로 사용가능한 것이다.
설정 조회
cat /etc/systemd/system/kube-proxy.service
systemd에 설치했기 때문에 위 경로에서 설정을 조회하고 수정할 수 있다.- 해당 파일을 수정한 뒤 아래 명령어 수행해야 적용된다.
sudo systemctl daemon-reloadsudo systemctl restart kube-proxy
레퍼런스
- kube-proxy command-line reference
- Kubernetes Components Overview
- Udemy - Certified Kubernetes Administrator (CKA) with Practice Tests (Mumshad)