Kubernetes

[K8s] 네트워크 유형 - 컨테이너 간 통신

비번변경 2024. 6. 6. 16:57

개요

쿠버네티스에서 네트워크는 크게 컨테이너 간 통신, Pod 간 통신, Pod와 서비스 간 통신, 외부와 서비스 간 통신으로 나누어진다.

쿠버네티스 환경에서 작업하다 보면 네트워크 관련으로 항상 헤매게 되는 것 같아서 정리해두려고 하는데, 그전에 먼저 네트워크 유형에 대해 정리해보려고 한다.

 

 

도커

먼제 도커 환경에서 기본적인 네트워크 동작을 알아본다.

도커 환경에서 같은 호스트에 존재하는 컨테이너 간의 통신은 docker0이라는 가상 네트워크 인터페이스를 통해 이루어진다. docker0은 호스트 네트워크 인터페이스 또는 디폴트 네트워크 네임스페이스라고 칭해진다.

그리고 각 컨테이너는 veth라는 고유한 가상 네트워크 인터페이스를 가지기 때문에 각각의 veth IP주소로 통신한다.

컨테이너 내에서는 네트워크 네임스페이스에 의해 veth0만 보이게 되고, 외부와 통신할 때는 docker0와 eth0를 통하게 된다.

 

 

쿠버네티스

아래 그림은 쿠버네티스 Pod 내 컨테이너 간 통신을 나타낸 것이다.

쿠버네티스는 Pod 단위로 컨테이너를 관리하며, Pod는 여러 개의 컨테이너로 구성될 수 있다. Pod 내 컨테이너는 pause라는 컨테이너에 의해 제공되는 네트워크 인터페이스 veth0를 공유한다. 두 컨테이너 모두 같은 IP 주소를 사용하되 Port 번호로 구분한다. 즉, 같은 Pod 내 컨테이너는 고유한 Port를 사용해야 한다.

네트워크 인터페이스를 제공하는 pause 컨테이너는 pause 명령어로 실행되며 쿠버네티스가 SIGTERM을 보내기 전까지 sleep 상태로 존재한다. 만약 쿠버네티스 컨테이너 엔진으로 docker를 사용한다면 docker ps 명령으로 확인할 수 있다.

 

 

참고 문서

쿠버네티스(Kubernetes) 네트워크 정리

[Kubernetes] # 쿠버네티스 네트워크 구성도

https://coffeewhale.com/k8s/network/2019/04/19/k8s-network-01/