쿠버네티스 클러스터 내부에서 모든 pod는 다른 pod에 접근이 가능합니다.
pod network라는게 존재하기 때문에 가능한 일이며
pod network는 internel virtual network로 클러스터 내 모든 노드의 모든 pod가 연결되어 있습니다.
pod 와 pod가 통신하는 간단한 예제를 고려해보겠습니다.
web application을 담고있는 pod가 db를 담고있는 pod에 직접 접근하는 경우입니다.
이 경우 pod의 ip를 통해 통신할 텐데 각 pod의 ip가 항상 고정적이기 않기 때문에 ip가 바뀐다면
통신에 문제가 생길 수 있습니다. 때문에 k8s에서는 service라는게 존재하고 다른 pod에 접근할때는
이 service를 이용하는게 좋습니다.
service는 web pod로부터 신호를 전달받을때마다 db pod로 전달합니다.
근데 이 service란건 뭐고 어떻게 ip를 얻을까요?
먼저 service가 pod network에 연결될 수 있을까요?
service는 pod나 container 처럼 실존하는 객체가 아니기 때문에 pod network에 연결할 수 없습니다.
interface나 적극적으로 돕는 process도 없습니다. k8s memory에만 존재하는 가상구성 요소입니다.
그러나 service는 cluster를 벗어난 다른 서로다른 노드에도 접근이 가능하게 만들어 줍니다.
어떻게 이게 가능할까요? kube proxy가 바로 이를 가능하게 해주는 도구입니다.
kube-proxy는 k8s의 각 노드에서실행되는 프로세스입니다.
kube proxy가 하는일은 새로운 service를 찾는것이며 매번 새로운 service가 생성될 때마다 service를 통해 트래픽을 보낼 수 있는 방법을 새롭게 생성합니다.
자주쓰이는 방법 중 하나는 iptables 규칙을 이용하는 것 입니다.
service ip와 back end pod의 ip를 담는 iptable을 생성합니다.
이것이 kube-proxy의 대략적인 기능입니다. 기능을 너무 간략하게 설명한 것 같지만 일단 kube-proxy란 pod networking에 필요한 툴이고 service를 이용한 통신에 관여를 한다! 라고 이해한 뒤 나중에 네트워킹을 다룰때 더 자세히 공부하는게 좋을 것 같습니다.
kube-proxy 설치 방법 2가지 입니다.
1.k8s release 페이지에서 binary 파일을 다운받아서 service로 실행하면 됩니다.
2.kubeadm tool은 각 노드의 pod에 kube-proxy를 배포합니다. 이때 daemonset의 형태로 배포됩니다.
출처 : Udemy - Certified kubernetes Administrator (CKA) with Practice Tests