최근에 PaaS 콘텐츠 작업을 하고 있는데, 네트워크 커버리지, 즉 호스트 간 간 통신을 포함하는 Kubernetes를 막 접하게 되었습니다. 그래서 플란넬, 칼리코, 위브 등과 같은 오픈 소스 구성 요소들이 등장했습니다. 여기서는 주로 칼리코와 팬넬이 있습니다.
플란넬 원리
CoreOS에서 개발한 프로젝트인 Flannel은 아마도 가장 직접적이고 인기 있는 CNI 플러그인일 것입니다. 이는 컨테이너 오케스트레이션 시스템에서 가장 성숙한 네트워크 아키텍처 사례 중 하나이며, 더 나은 컨테이너 간 및 호스트 간 네트워킹을 가능하게 하도록 설계되었습니다. CNI 개념이 부상하면서 Flannel CNI 플러그인이 초기 도입 단계로 등장했습니다.
플란넬은 다른 옵션에 비해 설치와 설정이 비교적 쉽습니다. 단일 바이너리 FlannelD로 패키징되어 있으며, 많은 일반적인 Kubernetes 클러스터 배포 도구와 Kubernetes 배포판에서 기본적으로 Flannel을 설치할 수 있습니다. Flannel은 Kubernetes 클러스터의 기존 etcd 클러스터를 API로 상태 정보를 저장할 수 있어 전용 데이터 저장소가 필요하지 않습니다.
Flannel은 레이어 3 IPv4 오버레이 네트워크를 구성합니다. 클러스터 내 모든 노드를 아우르는 대규모 내부 네트워크를 만듭니다. 이 오버레이 네트워크에서는 각 노드가 내부적으로 IP 주소를 할당하는 서브넷을 가지고 있습니다. 포드를 구성할 때, 각 노드의 Docker 브리지 인터페이스가 각 새로운 컨테이너에 주소를 할당합니다. 같은 호스트 내 포드는 Docker 브리지를 사용해 통신할 수 있으며, 다른 호스트의 포드는 플란넬드를 사용해 트래픽을 UDP 패킷으로 캡슐화하여 적절한 목적지로 라우팅할 수 있습니다.
플란넬은 캡슐화와 라우팅에 사용할 수 있는 여러 종류의 백엔드를 가지고 있습니다. 기본적이고 권장되는 접근법은 VXLAN을 사용하는 것인데, VXLAN이 더 좋은 성능을 내고 수동 개입이 덜 필요하기 때문입니다.
칼리코 건축
칼리코에는 다음과 같은 중요한 구성 요소들이 포함되어 있습니다: 펠릭스, etcd, BGP 클라이언트, 그리고 BGP 루트 리플렉터. 다음은 각 구성 요소에 대한 설명입니다.
Felix: 주로 라우팅 구성, ACLS 규칙 구성 및 전달을 담당하며, 각 노드에 존재합니다.
etcd: 분산 키-값 저장소는 주로 네트워크 메타데이터 일관성을 담당하며 Calico 네트워크 상태의 정확성을 보장하며, kubernetes와 공유할 수 있습니다;
BGPClient(BIRD)는 주로 Felix가 커널에 작성한 라우팅 정보를 현재 Calico 네트워크로 배포하여 워크로드 간 통신의 효율성을 보장하는 역할을 합니다.
BGPRoute 리플렉터(BIRD)는 대규모 배포에 사용되며, 모든 노드를 상호 연결하는 메시 모드를 포기하고, 하나 이상의 BGPRoute 리플렉터를 사용해 중앙 집중식 라우팅과 분배를 완성합니다.
칼리코 원리
다음 다이어그램에서 보듯, 프로세스는 소스 컨테이너에서 출발 호스트, 데이터 센터 라우팅, 목적지 호스트, 그리고 최종 목적지 컨테이너에 할당되는 과정을 보여줍니다.
대조
위 원칙을 통해 플란넬은 라우팅 포워딩을 기반으로 패킷 언패킹 작업을 수행하며, 이는 CPU 컴퓨팅 자원을 낭비합니다. 아래 차트는 온라인에서 찾을 수 있는 다양한 오픈 소스 네트워크 구성 요소들의 성능을 비교한 것입니다. 대역폭과 네트워크 지연 시간 측면에서 Calico와 호스트의 성능은 유사하다는 것을 알 수 있습니다.
|