- 특징
파드가 사용하는 네트워크와 호스트(노드)가 사용하는 네트워크는 다름, 노드 내의 파드들은 가상의 네트워크를 이용하지만 호스트는 물리 네트워크를 이용하기에 같은 노드에 떠 있는 파드끼리만 통신이 가능 다른 노드의 파드와 통신하려면 CNI 플러그 인이 필요: 쿠버네티스 설치할 때 자동으로 구성되지 않기 때문에 별도로 설치해야 합니다.- 같은 파드에 포함된 컨테이너 간 통신: 모두 동일한 IP를 가지므로 포트번호를 이용해서 통신
- 단일 노드에서 파드 간 통신: 같은 대역을 사용하므로 IP를 가지고 통신
- 다른 노드에서 파드 간 통신: 오버레이 네트워크를 이용하는데 물리적인 네트워크 위에 가상의 네트워크를 구성, CNI 규약을 따르는 플러그인을 설치해서 사용
- 파드 와 다른 서비스 간의 통신: 리눅스 커널에서 제공하는 netfilter(서비스 IP를 특정 IP로 변경할 수 있는 규칙을 저장하고 변환하는 역할을 수행) 와 iptables를 이용
- 외부 와 서비스간 통신 NodePort, LoadBalancer, Ignress를 이용해서 통신
가상의 Docekr0의 네트워크 인터페이스를 통해서 통신이 가능하다.
하지만 첫번째 그림은 container 마다 ip가 같은 것을 확인 할 수 있다. 근데 이러면 우리는 외부에서 서로 다른 컨테이너인 것을 어떻게 확인 할 수 있을까??? 그래서 Kubernetes는 veth0안에서 구별할 수 있는 기능을 위해 추가해놓은 특별한 컨테이너들을 넣어놓습니다.
위 그림에서 볼 수 있는 네트워크를 담당하는 컨테이너들의 리스트는 아래와 같다.
단일 노드에서 파드간의 통신
각 파드 각자의 고유의 IP를 가지게 된다. 따라서 CNI를 준수한 네트워크 인터페이스나 Kubernetes에서 기본적으로 제공하는 kubenet을 이용해 통신을 한다. 아래의 그림을 보며 직관적으로 이해해보자.
멀티 노드에서 파드간의 통신
멀티 노드에서는 위의 단일 노드의 CNI를 준수하는 네트워크 인터페이스를 거치고 한번 더 거쳐야하므로, 라우터를 거쳐서 통신을 주고 받는다.
파드와 서비스 간의 통신
리눅스 커널에서 제공하는 netfilter(서비스 IP를 특정 IP로 변경할 수 있는 규칙을 저장하고 변환하는 역할을 수행) 와 iptables를 이용
5.외부와 서비스 간의 통신
그런데 중요한 것은 Pod는 외부와도 통신을 해야한다.
위의 세 가지는 중요하므로 다음 장에서 하나 씩 다뤄 볼 것이다.