클러스터 네트워킹
클러스터 네트워킹 (Cluster Networking)
네트워킹은 쿠버네티스의 핵심 부분이지만, 정확히 어떻게 동작할 것으로 기대되는지 이해하는 것은 어려울 수 있어요. 해결해야 할 네트워킹 문제는 네 가지로 구분돼요.
- 긴밀하게 결합된 컨테이너 간 통신: 파드(Pods)와 localhost 통신으로 해결돼요.
- 파드 간 통신: 이 문서의 주요 초점이에요.
- 파드-서비스 간 통신: Service로 다뤄져요.
- 외부-서비스 간 통신: 이것도 Service로 다뤄져요.
쿠버네티스는 애플리케이션끼리 머신을 공유하는 것이 전부예요. 일반적으로 머신을 공유하려면 두 애플리케이션이 같은 포트를 사용하지 않도록 보장해야 해요. 여러 개발자 간에 포트를 조정하는 것은 대규모에서 매우 어렵고, 사용자를 통제 밖의 클러스터 수준 문제에 노출시켜요.
동적 포트 할당은 시스템에 많은 복잡성을 가져와요. 모든 애플리케이션이 포트를 플래그로 받아야 하고, API 서버가 구성 블록에 동적 포트 번호를 어떻게 삽입할지 알아야 하며, Service가 서로를 어떻게 찾을지 알아야 하는 등등. 쿠버네티스는 이를 다루는 대신 다른 접근 방식을 취해요.
쿠버네티스 네트워킹 모델에 대해 배우려면 여기를 참조하세요.
출처: 문서
본문
쿠버네티스 IP 주소 범위
쿠버네티스 클러스터는 파드, Service, 노드에 대해 겹치지 않는 IP 주소를 할당해야 해요. 이는 다음 구성 요소에서 구성된 가용 주소 범위에서 이뤄져요.
- 네트워크 플러그인은 파드에 IP 주소를 할당하도록 구성돼요.
- kube-apiserver는 Service에 IP 주소를 할당하도록 구성돼요.
- kubelet 또는 cloud-controller-manager는 노드에 IP 주소를 할당하도록 구성돼요.
클러스터 네트워킹 유형
쿠버네티스 클러스터는 구성된 IP 패밀리에 따라 다음과 같이 분류할 수 있어요.
- IPv4 전용: 네트워크 플러그인, kube-apiserver, kubelet/cloud-controller-manager가 IPv4 주소만 할당하도록 구성됨.
- IPv6 전용: 네트워크 플러그인, kube-apiserver, kubelet/cloud-controller-manager가 IPv6 주소만 할당하도록 구성됨.
- IPv4/IPv6 또는 IPv6/IPv4 듀얼 스택: 네트워크 플러그인이 IPv4와 IPv6 주소를 할당하도록 구성됨. kube-apiserver가 IPv4와 IPv6 주소를 할당하도록 구성됨. kubelet 또는 cloud-controller-manager가 IPv4와 IPv6 주소를 할당하도록 구성됨. 모든 구성 요소가 구성된 기본 IP 패밀리에 동의해야 함.
쿠버네티스 클러스터는 표현된 객체의 기존 IP와 무관하게, 파드, Service, 노드 객체에 존재하는 IP 패밀리만 고려해요. 예를 들어 서버나 파드는 인터페이스에 여러 IP 주소가 할당될 수 있지만, 쿠버네티스 네트워크 모델을 구현하고 클러스터 유형을 정의할 때는 node.status.addresses나 pod.status.ips의 IP 주소만 고려돼요.
쿠버네티스 네트워크 모델 구현하기
네트워크 모델은 각 노드의 컨테이너 런타임이 구현해요. 가장 흔한 컨테이너 런타임은 CNI(Container Network Interface) 플러그인을 사용해 네트워크와 보안 기능을 관리해요. 여러 벤더가 만든 다양한 CNI 플러그인이 존재해요. 어떤 것은 네트워크 인터페이스를 추가·제거하는 기본 기능만 제공하고, 다른 것은 다른 컨테이너 오케스트레이션 시스템과의 통합, 여러 CNI 플러그인 실행, 고급 IPAM 기능 등 더 정교한 솔루션을 제공해요.
쿠버네티스가 지원하는 네트워킹 애드온의 완전하지 않은 목록은 이 페이지를 참고하세요.
더 알아보기 (Learn more)
- 네트워킹 모델의 초기 설계와 근거는 네트워킹 설계 문서에서 더 자세히 설명돼요.
- 향후 계획과 쿠버네티스 네트워킹을 개선하려는 지속적인 노력에 대해서는 SIG-Network KEP를 참조하세요.