서론
쿠버네티스 클러스터 내에서는 Pod Network를 통해 모든 파드가 서로 통신할 수 있다.
Pod Network는 모든 노드를 어우르는 내부 가상 네트워크이며, 모든 파드가 이 네트워크에 연결되어 이를 통해 서로 통신할 수 있다.

예를 들어, 첫 번째 노드에는(위 그림에서의 왼쪽) Web Application을, 두 번째 모드에는 DB Application을 배포했다고 가정하자.
Web Application은 파드의 IP(10.32.0.14)를 사용하여 DB에 접근할 수 있다.
하지만 데이터베이스 파드의 IP(10.32.0.15)가 항상 동일할 것이라는 보장할 수 없다.
왜냐하면 파드에 문제가 생겨 파드가 재배포된 경우 파드의 아이피 주소가 변경될 것이기 때문이다.
웹 애플리케이션이 데이터베이스에 접근하는 더 나은 방법은 서비스를 이용하는 것이다.
그래서 클러스터 전체에 데이터베이스 애플리케이션을 노출시키기 위해 서비스를 생성하게 된다.
서비스를 생성하게 되면 자동으로 DNS 엔트리가 생성되며, 덕분에 파드들은 해당 서비스를 도메인 이름으로 접근할 수 있다.(ex. servicename.namespace.svc.local.cluster)
또한 서비스에도 IP 주소가 할당된다. 그리고 이 지점에서 kube-proxy가 사용된다.
이제 kube-proxy에 대해서 알아보자.
Kube Proxy
- kube-proxy는 쿠버네티스 클러스터 내의 각 노드에서 실행되는 프로세스이다.
- kube-proxy의 역할은 새로 생성된 서비스를 감지하고, 새로운 서비스가 생성될 때마다 각 노드에 트래픽을 파드로 전달할 수 있도록 적절한 iptables 규칙을 사용한다.
- 이 경우, 각 노드에 iptables 규칙을 만들어 서비스의 IP(10.96.0.12)로 향하는 트래픽을 실제 파드의 IP(10.32.0.15)로 전달한다.

- Kube-proxy는 데몬셋으로 배포되며 클러스터의 각 노드에 하나씩 파드가 생성된다.
Comment