Kubernetes는 클러스터 외부의 모든 항목이 클러스터와 통신할 수 있다고 보장하지 않으며 다음과 같은 기능의 제공만을 약속합니다.
클러스터의 모든 포드는 네트워크 주소 변환(NAT)을 사용하지 않고도 서로 직접 통신할 수 있습니다. 서로 다른 노드에 있는 포드도 서로 직접 통신할 수 있습니다.
노드의 에이전트(예: 시스템 데몬 또는 kubelet)는 해당 노드의 모든 포드와 통신할 수 있습니다.
그렇다면 아래의 그림과 같이 네트워크가 두 개의 클러스터를 호스팅하는 경우 클러스터 1의 포드는 어떻게 클러스터 2의 포드와 통신할까요? 마찬가지로, 다이어그램에 '기타 클라이언트' 및 '기타 서버'로 표시된 클러스터 외부의 클라이언트나 서버는 어떻게 클러스터 내의 포드와 통신할까요?
이 문서에서는 위의 질문에 대한 답이 플랫 모드 네트워크 모델과 섬(island) 모드 네트워크 모델에서 어떻게 다른지 설명합니다.
플랫 모드 네트워크 모델
완전 통합 또는 플랫 모드 네트워크에서는 포드가 모든 클러스터에서 고유한 IP 주소를 갖습니다. 예를 들어 클러스터 1의 Pod-A
에는 클러스터 1 또는 클러스터 2의 다른 곳에서는 확인되지 않는 IP 주소가 있습니다. 마찬가지로 클러스터 2의 Pod-G
도 두 클러스터 모두에서 고유한 주소를 갖습니다. 즉, 트래픽을 차단하는 방화벽 또는 기타 정책이 없다고 가정하면 클러스터 1의 포드가 클러스터 2의 모든 포드와 직접 통신할 수 있습니다. 게이트웨이나 변환이 필요하지 않습니다.
마찬가지로, 라우팅이 네트워크 기기에서 정적으로 구성되어 있거나 지정된 IP 범위의 트래픽을 처리할 수 있다고 공지하기 위해 노드에서 Border Gateway Protocol(BGP)을 사용하는 경우 클러스터 외부의 클라이언트와 서버가 포드의 고유한 IP 주소를 통해 클러스터 내의 포드와 직접 통신할 수 있습니다.
따라서 플랫 네트워크에서는 통신이 쉬우며 직접적으로 이루어집니다. IP 주소가 겹치지 않으며 오버레이 네트워크 또는 NAT를 사용할 필요가 없습니다.
섬(Island) 모드 네트워크 모델
평면 모드 네트워크 모델은 대규모 IP 주소 공간이 있고 포드마다 고유한 IP 주소를 할당할 수 있는 옵션입니다. 하지만 큰 IP 주소 공간을 사용할 수 없다면 섬(island) 모드 네트워크 모델을 사용하는 것이 좋습니다.
섬(island) 모드 네트워크에서는 노드에 고유한 IP 주소가 있지만 부족한 IP 주소를 경제적으로 사용하기 위해 포드에는 클러스터 전체에서 고유한 주소가 없습니다. 한 클러스터의 포드가 다른 클러스터의 포드와 직접 통신하지 않으므로 문제가 발생하지는 않습니다. 대신 다음 다이어그램과 같이 한 클러스터의 포드와 다른 클러스터의 포드를 중재하는 게이트웨이가 있습니다.
마찬가지로 클러스터에 들어오는 클라이언트의 (인그레스) 트래픽과 클러스터에서 나가는 (이그레스) 트래픽은 비슷한 게이트웨이에서 처리됩니다. 다양한 방법으로 게이트웨이를 구현할 수 있습니다. 예를 들어 NAT, 가상 IP 주소(VIP), 프록시가 게이트웨이의 예시입니다. 포드 IP를 비공개로 유지하는 효과가 있는 IP 주소 변환을 수행합니다.
섬(island) 모드 네트워크 모델에서는 각 클러스터에서 동일한 포드 IP 주소를 사용할 수 있습니다. IP 주소가 클러스터 전체에서 고유하지 않아도 됩니다. 다음 다이어그램과 같이 한 클러스터의 포드가 다른 클러스터의 포드와 직접 통신하지 않으므로 각 클러스터에서 동일한 포드 IP 주소를 사용할 수 있습니다.
섬(island) 모드 네트워크 모델의 주요 이점은 포드 IP 주소를 이러한 방식으로 재사용할 수 있다는 것입니다.
두 모델의 장단점
두 모델의 장점과 단점 몇 가지를 소개합니다.
섬(island) 모드의 게이트웨이는 주소 변환을 수행하므로 플랫 네트워크가 섬(island) 네트워크보다 빠르며 변환 시 성능 비용이 발생합니다.
플랫 네트워크에서는 네트워크의 모든 항목에 고유한 IP 주소가 있기 때문에 클러스터 문제를 쉽게 디버깅할 수 있어 문제가 발생한 위치를 더 쉽게 파악할 수 있습니다. 예를 들어 포드 IP가 노드의 IP 주소 뒤에 표시되지 않기 때문에 문제를 일으키는 포드를 정확히 파악하기가 더 용이합니다. 마찬가지로 클라이언트 IP가 섬(island) 모드에서처럼 플랫 모드에서 가려지지 않아 디버깅에도 도움이 됩니다.
IP 주소가 부족하거나 IP 공간이 파편화된 경우(즉, 대량의 IP 주소가 없는 경우) 플랫 네트워크 모델을 사용하지 못할 수 있습니다. 이러한 경우에는 섬(island) 네트워크가 더 나은 옵션입니다.
플랫 및 섬(island) 네트워크 모델은 가능한 네트워크 모델 중 두 개에 불과하며 이러한 모델 내에서도 많은 변형이 있습니다.