📌 Kube-proxy란?
- Pod Networking solution을 클러스터에 배포함으로써 서로
Pod끼리 서로 통신 가능하게 함
- Pod Network는 내부 가상 네트워크로 모든
Pod가 연결되는 클러스터 내 모든 Node에 연결되어 있음
- 이 네트워크를 통해 서로 통신 할 수 있음
- 이 경우 사용가능한 솔루션이 많음
- 예를 들어 node01에 애플리케이션이 배포되고 node02에 데이터베이스 응용 프로그램이 배포될 경우
- 웹 앱은 단순히
Pod의 IP를 이용해 DB에 도달할 수 있음
- 하지만 DB Pod의 IP가 늘 같을거라는 보장이 없음
- 웹앱이 DB에 엑세스하는 더 나은 방법은
Service를 이용
Service는 Pod의 단일 진입점을 생성하는것으로 알고 있음
- 클러스터에 걸쳐 DB를 노출할 서비스를 생성
- 웹앱은 이제 DB의 서비스 이름을 이용해 데이터베이스에 액세스 가능
- 서비스는 거기에 할당된 IP 주소도 받음
Pod가 IP나 이름을 이용해 서비스에 도달하려 할 때마다 트래픽을 백엔드 포드로 전달
❓what is service
- 서비스는 무엇이고 IP는 어떻게 얻는가?
- 서비스가 같은 Pod Network에 연결되는것인가?
- 서비스는 Pod Network에 Join 될 수 없다 서비스는 actual thing(실제)이 아니다.
- Pod 같은 컨테이너가 아니라 인터페이스도 없고 실제로 리스닝을 하는 프로세스도 없다
- 쿠버네티스 메모리에만 존재하는 가상 구성 요소
❗️큐브 프록시가 필요한 이유
- 서비스를 가로질러 클러스터 내의 Pod에 도달하기 위해서
- kube-proxy는 쿠버네티스 클러스터의 각 노드에서 실행되는 프로세스!
- 서비스를 찾아준다
- 서비스가 생성될 때마다 각 노드에 적절한 규칙을 만들어 그 서비스로 트래픽을 전달(백엔드 포드로)
❓kube-proxy 통신하는 방법
- iptables rule을 사용한다.
- 이 규칙을 이용하여 서비스의 IP로 트래픽을 향하게 함
- 단일 진입점 IP(서비스)로 접근하려는 트래픽을 실제 Pod의 IP로 연결하는 역할
⚙️ Installing kube-proxy
# 바이너리 파일 다운로드 및 서비스
$ wget https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kube-proxy
# kubeadm
$ kubectl get pods -n kube-system
- kubeadm로 클러스터 구성시 각 노드에 kube-proxy를
Pod 형태로 배포
$ kubectl get daemonset -n kube-system
- Daemonset으로 배포됨
- 단일 포드는 항상 클러스터 내 각 노드에 배포