클러스터 네트워킹
클러스터 네트워킹 (Cluster Networking)
네트워킹은 Kubernetes의 핵심이에요. 하지만 정확히 어떻게 동작할 것으로 기대하는지 이해하는 건 꽤 까다로울 수 있죠. 여기서 풀어야 할 네트워킹 문제는 서로 구별되는 4가지가 있어요.
- 긴밀하게 결합된 컨테이너 간 통신 (container-to-container) – Pod와
localhost통신으로 해결돼요. - Pod 간 통신 (Pod-to-Pod) – 이 문서의 주요 초점이에요.
- Pod에서 Service로의 통신 (Pod-to-Service) – Service가 담당해요.
- 외부에서 Service로의 통신 (External-to-Service) – 이것도 Service가 담당합니다.
Kubernetes는 본질적으로 애플리케이션 간에 머신을 공유하는 데 관한 것이에요. 일반적으로 머신을 공유하려면 두 애플리케이션이 같은 포트를 사용하지 않도록 보장해야 합니다. 여러 개발자 사이에서 포트를 조정하는 것은 규모가 커질수록 매우 어렵고, 사용자 통제 밖의 클러스터 수준 문제에 사용자를 노출시키죠.
**동적 포트 할당(dynamic port allocation)**은 시스템에 많은 복잡함을 가져와요 – 모든 애플리케이션이 포트를 플래그로 받아야 하고, API 서버가 구성 블록에 동적 포트 번호를 삽입하는 방법을 알아야 하며, 서비스들이 서로를 찾는 방법을 알아야 하는 등등. Kubernetes는 이런 방식 대신 다른 접근 방식을 취합니다.
Kubernetes 네트워킹 모델에 대해 배우려면 여기를 참고하세요.
Kubernetes IP 주소 범위 (Kubernetes IP address ranges)
Kubernetes 클러스터는 Pod, Service, Node에 대해 겹치지 않는 IP 주소(non-overlapping IP addresses)를 할당해야 해요. 이 주소는 다음 컴포넌트에 구성된 사용 가능한 주소 범위에서 할당됩니다.
- **네트워크 플러그인(Network plugin)**이 Pod에 IP 주소를 할당하도록 구성돼요.
- kube-apiserver가 Service에 IP 주소를 할당하도록 구성돼요.
- kubelet 또는 cloud-controller-manager가 Node에 IP 주소를 할당하도록 구성돼요.
클러스터 네트워킹 유형 (Cluster networking types)
Kubernetes 클러스터는 구성된 IP 패밀리에 따라 다음과 같이 분류할 수 있어요.
- IPv4 전용(IPv4 only): 네트워크 플러그인, kube-apiserver, kubelet/cloud-controller-manager가 IPv4 주소만 할당하도록 구성돼요.
- IPv6 전용(IPv6 only): 네트워크 플러그인, kube-apiserver, kubelet/cloud-controller-manager가 IPv6 주소만 할당하도록 구성돼요.
- IPv4/IPv6 또는 IPv6/IPv4 듀얼 스택(dual-stack):
- 네트워크 플러그인이 IPv4와 IPv6 주소를 모두 할당하도록 구성돼요.
- kube-apiserver가 IPv4와 IPv6 주소를 모두 할당하도록 구성돼요.
- kubelet 또는 cloud-controller-manager가 IPv4와 IPv6 주소를 모두 할당하도록 구성돼요.
- 모든 컴포넌트가 구성된 기본 IP 패밀리에 동의해야 해요.
Kubernetes 클러스터는 표현되는 객체에 실제로 존재하는 IP와는 무관하게, Pod, Service, Node 객체에 존재하는 IP 패밀리만 고려해요. 예를 들어 서버나 Pod는 인터페이스에 여러 IP 주소를 가질 수 있지만, Kubernetes 네트워크 모델을 구현하고 클러스터 유형을 정의할 때는 node.status.addresses나 pod.status.ips에 있는 IP 주소만 고려됩니다.
Kubernetes 네트워크 모델 구현하기 (How to implement the Kubernetes network model)
네트워크 모델은 각 노드의 컨테이너 런타임에 의해 구현돼요. 가장 일반적인 컨테이너 런타임은 네트워크와 보안 기능을 관리하기 위해 CNI(Container Network Interface) 플러그인을 사용합니다. 다양한 벤더들이 제공하는 CNI 플러그인이 아주 많아요. 어떤 것들은 네트워크 인터페이스 추가/제거 같은 기본 기능만 제공하고, 다른 것들은 다른 컨테이너 오케스트레이션 시스템과의 통합, 여러 CNI 플러그인 실행, 고급 IPAM 기능 등 더 정교한 솔루션을 제공하기도 합니다.
Kubernetes가 지원하는 네트워킹 애드온의 전체 목록은 아닌 목록을 이 페이지에서 볼 수 있어요.