개요
2024.05.18-[K8s] 네트워크 유형 - 컨테이너 간 통신에서는 도커, 쿠버네티스 환경에서의 컨테이너 간 통신에 대해서 정리했다.
이번 글에서는 Pod 간 통신에 대한 내용을 적어두려고 한다. Pod 간 통신은 단일 노드에서의 통신 그리고 멀티 노드에서의 통신으로 구분할 수 있다.
단일 노드에서의 Pod
쿠버네티스의 Pod는 고유한 IP 주소(veth)를 가지므로, IP 주소로 서로 통신할 수 있다.
쿠버네티스는 kubenet이라는 기본적이고 간단한 네트워크 플러그인을 제공한다. 다만 kubenet에는 노드 간 네트워킹, 네트워크 정책 설정과 같은 고급 기능은 구현되어 있지 않기 때문에 Calico, Flannel 등과 같은 CNI 기반 네트워크 플러그인 사용을 권장하고 있다. 일례로 kudeadm은 CNI 기반 네트워크 플러그인만 사용하도록 되어 있다.
즉, Pod는 kubenet 또는 CNI로 구성된 네트워크 인터페이스를 통해 고유한 Pod IP 주소를 사용해 서로 통신한다.
멀티 노드에서의 Pod
워커 노드가 여러 대인 쿠버네티스 환경에서 서로 다른 노드에 존재하는 Pod는 Router를 거쳐 통신한다.
CNI는 iptables, 커널 라우팅, 터널링, 브릿지 등과 같은 호스트의 네트워크 인터페이스의 기능을 사용하게 한다. CNI의 도움을 받으면 라우터의 라우팅 테이블에 노드 간 규칙이 추가되고, 해당 규칙에 의해 Pod 간 통신이 가능하게 된다.
쿠버네티스에서는 각 노드의 네트워크 인터페이스(Bridge)의 IP가 겹치지 않도록 전체적인 주소 대역을 할당한다. 그리고 각 브릿지에 실제 주소를 주소 대역 내에서 할당한다. 이후 게이트웨이에 라우팅 테이블을 설정한다. 이러한 가상 네트워크 인터페이스, Bridge 네트워크, 라우팅 규칙의 조합을 오버레이 네트워크라고 하며, 이 기능은 CNI가 제공한다.
다만 보통 Pod 간 통신은 Service를 통하기 때문에 이러한 네트워크의 동작 방식을 생각할 필요는 없다.
참고 문서
https://coffeewhale.com/k8s/network/2019/04/19/k8s-network-01/