Post

[Kubernetes] 쿠버네티스 네트워킹 이해하기 (1) - Pod 네트워킹의 원리

[Kubernetes] 쿠버네티스 네트워킹 이해하기 (1) - Pod 네트워킹의 원리

🌐 쿠버네티스 네트워킹의 기초: Pod은 어떻게 통신할까?

쿠버네티스를 공부하면서 가장 벽에 부딪히기 쉬운 부분이 바로 네트워킹입니다. 쿠버네티스는 우리가 기존에 알던 도커(Docker)의 네트워킹 방식과는 조금 다른 철학을 가지고 있기 때문인데요. 💡

오늘은 CoffeeWhale님의 기술 블로그 내용을 바탕으로, 쿠버네티스 네트워킹의 첫 단추인 Pod 네트워킹에 대해 깊이 있게 알아보겠습니다.


🏗️ 1. 쿠버네티스 네트워킹의 4가지 당면 과제

쿠버네티스 네트워킹은 크게 4가지 통신 패턴을 해결해야 합니다.

  1. 컨테이너 대 컨테이너: 같은 Pod 내의 컨테이너 간 통신
  2. Pod 대 Pod: Pod과 Pod 간의 통신
  3. Pod 대 Service: Pod과 서비스 간의 통신
  4. 외부 대 Service: 외부에서 내부 서비스로의 통신

이 글은 그중에서도 가장 기초가 되는 1번과 2번을 집중적으로 다룹니다.


📦 2. 같은 Pod 내 컨테이너 통신: Pause 컨테이너

쿠버네티스에서 Pod 내의 여러 컨테이너는 어떻게 서로 localhost로 통신할 수 있을까요? 바로 Pause 컨테이너 덕분입니다. 🛡️

  • Pause 컨테이너의 역할: Pod이 생성될 때 가장 먼저 생성되는 컨테이너로, 네트워크 네임스페이스(Network Namespace)를 유지하는 역할을 합니다.
  • Network Sharing: 이후 생성되는 실제 컨테이너들은 이 Pause 컨테이너의 네트워크 환경을 공유합니다. 따라서 같은 Pod 내 컨테이너들은 서로 IP가 같고, 포트 번호로만 구분하여 통신하게 됩니다.

🌉 3. Pod 대 Pod 통신 (IP-per-Pod 모델)

쿠버네티스의 네트워킹 철학 중 가장 중요한 것은 “모든 Pod은 고유한 IP를 가지며, NAT 없이 서로 통신할 수 있어야 한다”는 것입니다.

3.1 같은 노드 내의 통신

하나의 노드(서버) 안에서 Pod들이 통신할 때는 veth pair(Virtual Ethernet)Bridge를 사용합니다.

  • 각 Pod은 가상 이더넷 인터페이스를 통해 노드에 설치된 브리지(예: cbr0)에 연결됩니다.
  • 브리지는 허브 역할을 하여 같은 노드 내의 Pod들이 서로의 IP를 찾을 수 있게 해줍니다.

3.2 서로 다른 노드 간의 통신

서로 다른 노드에 있는 Pod끼리 통신할 때는 라우팅(Routing)이나 터널링 기술이 필요합니다. 이때 우리가 흔히 듣는 CNI(Calico, Flannel, Cilium 등)가 이 복잡한 경로를 대신 찾아주는 역할을 합니다. 🗺️


🔍 4. 핵심 요약: 쿠버네티스의 약속

쿠버네티스 네트워크가 성립하려면 아래 3가지 규칙이 반드시 지켜져야 합니다.

  1. 임의의 노드에 있는 Pod은 NAT 없이 다른 노드에 있는 Pod과 통신할 수 있어야 한다.
  2. 노드에 있는 에이전트(예: kubelet, 대시보드)는 해당 노드에 있는 모든 Pod과 통신할 수 있어야 한다.
  3. (선택사항) 노드의 호스트 네트워크에 있는 Pod은 NAT 없이 다른 노드의 Pod과 통신할 수 있어야 한다.
This post is licensed under CC BY 4.0 by the author.