kube proxy
pod network
- 모든 포드는 다른 모든 포드에 도달 가능
- 클러스터에 포드 네트워킹 솔루션을 배포하여 수행됨
- pod network는 모든 파드가 연결되는 클러스터의 모든 노드에 걸쳐 있는 내부 가상 네트워크
- 이러한 네트워크 배포하는데에 사용 가능한 많은 솔루션 존재
ex: pode network
- 예시: node1는 웹 애플리케이션 배포, node2는 데이터베이스 애플리케이션 배포
- 웹 앱은 파드의 IP를 사용하여 데이터베이스에 연결 가능, 데이터 베이스 파드의 IP가 항상 동일하게 유지된다는 보장 없음
- 데이터베이스에 액세스하려면 서비스를 사용하는 것이 좋음
- 클러스터 전체에 데이터베이스 앱을 노출하는 서비스 생성
- service: db 이름을 통하여 데이터베이스에 액세스 가능
- 해당 서비스는 파드가 IP 또는 이름을 사용하여 접속하려고 할 떄마다 할당된 IP 주소를 가져와 트래픽을 백엔드 파드로 전달
kube proxy 필요성
- 이 서비스는 무엇이고 IP를 얻는 방법은 무엇일까?
- 파드와 같은 컨테이너가 아니므로 인터페이스나 능동적 수신 프로세스 없음
- 쿠버네티스 메모리에만 존재하는 가상 구성 요소
- 하지만 클러스터 전체 모든 노드에서 서비스에 액세스할 수 있어야 함
- 어떻게 해야하나? -> kube proxy
kube proxy 정의
- 쿠버네티스 클러스터의 각 노드에서 실행되는 프로세스, 새로운 서비스를 찾는 것이 임무
- 새 서비스가 생성될 때마다 각 노드에 적절한 규칙을 생성하여 해당 서비스로의 트래픽을 백엔드 포드로 전달
- iptables 규칙을 사용하여 수행 가능
- 클러스터의 각 노드에서 서비스의 IP로 향하는 트래픽을 포워딩하는 iptables 규칙을 생성
- 이후로는 네트워킹, 서비스, kube proxy, pod network 등 배워야함
Installing kube proxy
wget https://storage.googleapis.com/kubernetes-release/release/v1.xx.0/linux/amd64/kube-proxy
kubectl get pod -n kube-system
kubectl get daemonset -n kube-system
- 각 노드에 kube 프록시를 파드로 배포함을 알 수 있음
- 실제로 데몬셋으로 배포되므로 클러스터의 각 노드에는 항상 단일 파드가 배포됨