Kubernetes 네트워크를 설명하는 16개의 핵심 다이어그램

개요

이 기사에서는 Kubernetes의 네트워크 모델에 대해 설명하고 다양한 네트워크 모델을 분석합니다.

언더레이 네트워크 모델

언더레이 네트워크란?

이름에서 알 수 있듯이 기본 네트워크는  네트워크 매체를 사용하여 연결 Underlay Network 하는 스위치, 라우터 및 물리적 네트워크 토폴로지와 같은 네트워크 장비 인프라를 나타내며  DWDM 네트워크 간의 데이터 패킷 전송을 담당합니다.

언더레이 네트워크 토폴로지

underlay network 계층 2 또는 계층 3일 수 있으며 계층 2의 일반적인 예는 이더넷  Ethernet이고 계층 3의 일반적인 예는 인터넷입니다  Internet.

2계층에서 동작하는 기술은  vlan3계층에서 동작하는 기술이  OSPFBGP 그리고 다른 프로토콜로 구성되어 있습니다.

k8s의 언더레이 네트워크

쿠버네티스에서 underlay network 전형적인 예는 호스트 머신을 라우터 장치로 사용하는 것이며 Pod 네트워크는 라우팅 항목을 학습하여 노드 간 통신을 구현합니다.

쿠버네티스의 언더레이 네트워크 토폴로지

 이 모델에는 일반적인  패턴과  패턴이 flannel 있습니다   .host-gwcalico BGP

플란넬 호스트-gw

flannel host-gw 모드에서 각 노드는 동일한 레이어 2 네트워크에 있어야 하며 노드는 라우터로 사용되며 노드 간 통신은 라우팅 테이블을 통해 수행됩니다. underlay network.

레이어2 이더넷 토폴로지

참고: 라우팅을 통해 이루어지기 때문에 클러스터의 cidr은 16 이상으로 구성되어야 합니다. 이렇게 하면 노드 간 노드가 네트워크 계층으로 사용되고 동일한 노드의 Pod가 네트워크로 사용되도록 할 수 있기 때문입니다. 그렇지 않은 경우 라우팅 테이블이 동일한 네트워크에 있으므로 네트워크에 연결할 수 없습니다.

옥양목 BGP

BGP( Border Gateway Protocol)는 분산형 자율 라우팅 프로토콜입니다. 前缀IP 라우팅 테이블 또는 테이블을 유지함으로써 AS() Autonomous System간의 접근성을 실현 하고 벡터 라우팅 프로토콜에 속합니다.

BGP 네트워크 토폴로지

차이점  flannel 은 Calico 제공되는  BGP 네트워크 솔루션은 네트워크 모델과 Calico 유사  Flannel host-gw 하지만 소프트웨어 아키텍처 구현에서 프로세스는  라우팅 정보를 유지하는  데  flannel 사용되며  여러 데몬 프로세스가 포함되어 있으며  그 프로세스는   클라이언트와 경로 리플렉터( )는  클라이언트가  경로  리플렉터는 BGP에서 최적화된 역할을 수행합니다. 동일한 IBGP에서 BGP 클라이언트는 하나만 연결하면 되므로  내부적으로 유지되는 많은 수의 BGP 연결이  줄어듭니다 . 일반적으로  클라이언트  로  작동하는  실제 라우팅 장치입니다  .flanneldCalicoBridBGPRouter ReflectorBGPFelixBGP PeerRRASRRBirdBGP

Calico 네트워크 아키텍처

IPVLAN 및 MACVLAN

IPVLAN 그리고  MACVLAN 네트워크 카드 가상화 기술입니다.이 둘의 차이점은  IPVLAN 물리적 네트워크 카드가 여러 개의 IP 주소를 가질 수 있도록 하고 모든 가상 인터페이스는 동일한 MAC 주소를 사용합니다  MACVLAN . 다중 IP 주소 다중 MAC 주소 및 가상 네트워크 카드에는 IP 주소가 없을 수 있습니다.

본질적으로 네트워크 가상화 기술이 아닌 네트워크 카드 가상화 기술이기 때문에  Overlay network가상화된 환경에서 이 방식 Overlay network 의 가장 큰 특징은 Pod 네트워크를 Node 네트워크와 동일한 수준으로 평준화할 수 있어 더 높은 고성능을 제공한다는 것입니다. , 대기 시간이 짧은 네트워크 인터페이스. 기본적으로 해당 네트워크 모델은 아래 그림의 두 번째 모델에 속합니다.

가상 네트워킹 모드: 브리징, 멀티플렉싱 및 SR-IOV

  • 가상 브리지: 가상 네트워크 카드 쌍(veth 쌍)을 만들고 한쪽 끝은 컨테이너에, 다른 쪽 끝은 호스트 시스템의 루트 네임스페이스에 만듭니다. 이와 같이 컨테이너에서 보낸 데이터 패킷은 브리지를 통해 호스트 네트워크 스택에 직접 들어갈 수 있으며 컨테이너로 보낸 데이터 패킷도 브리지를 통해 컨테이너에 들어갈 수 있습니다.

  • 멀티플렉싱: 중간 네트워크 장치를 사용하여 여러 가상 NIC 인터페이스를 노출합니다. 컨테이너 NIC는 이 중간 장치에 개입할 수 있으며 MAC/IP 주소를 사용하여 패킷을 전송해야 하는 컨테이너 장치를 구별합니다.

  • 하드웨어 스위칭, 가상 네트워크 카드를 각 포드에 할당하여 포드 간의 연결 관계가 물리적 시스템 간의 통신 기반에 가깝기 때문에 매우 명확해집니다. 오늘날 대부분의 네트워크 카드는 단일 물리적 네트워크 카드를 여러 VF 인터페이스로 가상화하는 SR-IOV 기능을 지원합니다. 각 VF 인터페이스에는 별도의 가상 PCIe 채널이 있으며 이러한 가상 PCIe 채널은 물리적 네트워크 카드의 PCIe 채널을 공유합니다.

kubernetes에서  IPVLAN 이 네트워크 모델의 일반적인 CNI에는 multus 및 danm이 포함됩니다.

많은

multuscni Intel의 오픈 소스 CNI 솔루션 으로   기존의  multusSR-IOV CNI 플러그인을 제공하여 K8s 포드를 SR-IOV VF에 연결할 수 있도록 합니다. IPVLAN/MACVLAN 사용하는 기능 입니다  .

새 포드가 생성되면 SR-IOV 플러그인이 작동하기 시작합니다. 구성 VF는 새 CNI 네임스페이스로 이동됩니다. 플러그인은 CNI 구성 파일의 "이름" 옵션에 따라 인터페이스 이름을 설정합니다. 마지막으로 VF 상태를 UP으로 설정합니다.

아래 그림은 Multus와 SR-IOV CNI 플러그인, 3개의 인터페이스가 있는 Pod의 네트워크 환경입니다.

  • eth0 네트워크 플러그인  flannel 이며 Pod의 기본 네트워크 역할도 합니다.

  • VF는 호스트의 물리적 포트를  ens2f0 인스턴스화한 것 입니다. Intel X710-DA4의 포트입니다. 포드 측의 VF 인터페이스 이름은 입니다  south0 .

  • 이 VF는 DPDK 드라이버를 사용하며 VF는  ens2f1 호스트의 물리적 포트에서 인스턴스화됩니다. 이것은 인텔® X710-DA4의 또 다른 포트입니다. Pod의 VF 인터페이스 이름은 입니다  north0. 이 인터페이스는 DPDK 드라이버에 바인딩됩니다  vfio-pci .

Mutus 네트워킹 아키텍처 오버레이 및 SR-IOV

참고: 용어

  • NIC: 네트워크 인터페이스 카드, 네트워크 카드

  • SR-IOV: 단일 루트 I/O 가상화, 가상 시스템이 PCIe 장치를 공유할 수 있도록 하는 하드웨어 구현 기능.

  • VF: PF를 기반으로 하는 Virtual Function은 PF 또는 다른 VF와 물리적 리소스를 공유합니다.

  • PF: PCIe 물리적 기능, PCIe 리소스를 완전히 제어할 수 있는 기능이 있습니다.

  • DPDK: 데이터 플레인 개발 키트

동시에 호스트 인터페이스를 파드의 네트워크 네임스페이스로 직접 옮길 수도 있는데, 물론 이 인터페이스는 반드시 존재해야 하며 기본 네트워크와 동일한 인터페이스를 사용할 수 없다. 이 경우 공통 네트워크 카드 환경에서 Pod 네트워크와 Node 네트워크는 동일한 평면에 직접 배치됩니다.

Mutus 네트워킹 아키텍처 오버레이 및 ipvlan

젠장

DANM은 Nokia의 오픈 소스 CNI 프로젝트로 multus와 마찬가지로 kubernetes에 캐리어급 네트워크를 도입하는 것이 목적이며 SR-IOV/DPDK 하드웨어 기술도 제공하고 IPVLAN을 지원합니다.

오버레이 네트워크 모델

오버레이란?

오버레이 네트워크는 물리적 네트워크 아키텍처를 변경하지 않고 네트워크 가상화 기술을 사용하여  underlay 네트워크에 구축된 가상 논리 네트워크 입니다. 기본적으로 overlay network 하나 이상의 터널링 프로토콜( )은 tunneling데이터 패킷을 캡슐화하여 한 네트워크에서 다른 네트워크로 전송하는 데 사용되며 특히 터널링 프로토콜은 데이터 패킷(프레임)에 중점을 둡니다.

오버레이 네트워크 토폴로지

일반적인 네트워크 터널링 기술

  • 일반 라우팅 캡슐화(  Generic Routing Encapsulation )는 IPv4/IPv6의 패킷을 일반적으로 L3 네트워크 계층에서 작동하는 다른 프로토콜의 패킷으로 캡슐화하는 데 사용됩니다.

  • VxLAN( )은  기본 포트로 4789를Virtual Extensible LAN 사용하여 L2 이더넷 프레임을 L4의 UDP 패킷으로 캡슐화하는 간단한 터널링 프로토콜입니다  . 또한 4096(비트 )에서 1600만(비트   ) 논리 네트워크  의 확장   입니다  .VxLANVLANVLAN IDVN·ID

이런 종류의 작업은  overlay 일반적  flannel 으로  모델 아래 calico 에  VxLAN모드가  있습니다 IPIP .

IPIP

IP in IP 또한 터널링 프로토콜이며  VxLAN 이와 유사하게 IPIP 구현도 Linux 커널 기능을 통해 캡슐화됩니다. IPIP 커널 모듈은  ipip.ko 커널이 IPIP 모듈을 로드하는지 여부를 확인하는 명령을 사용하는 데 필요합니다 lsmod | grep ipip . 명령을 사용하여 modprobe ipip 로드하십시오.

간단한 IPIP 네트워크 워크플로

쿠버네티스 속 쿠버네티스  IPIP 와  마찬가지로 VxLAN 네트워크 터널링 기술을 통해서도 구현된다. 차이점  은  본질적으로 UDP 패킷이지만   패킷이 자체 패킷에 캡슐화된다는 VxLAN 것입니다 .VxLANIPIP

쿠버네티스의 IPIP

wireshark 언팩이 포함된 IPIP 패킷

참고: 퍼블릭 클라우드는 Azure와 같은 IPIP 트래픽을 허용하지 않을 수 있습니다.

VxLAN

kubernetes에서  VxLAN 구현은 Linux 커널 기능에 의해 캡슐화 flannel 됩니다  calico .Linux는 오랫동안 vxlan 프로토콜을 지원하지 않았습니다.2012년 Stephen Hemminger는 관련 작업을 커널에 병합하여 마침내 커널 3.7.0 버전에 등장했습니다. 안정성과 많은 기능을 위해 일부 소프트웨어는 커널 버전 3.9.0 또는 3.10.0 이상에서 사용하는 것이 좋습니다  VxLAN.

간단한 VxLAN 네트워크 토폴로지

예를 들어 kubernetes의 vxlan 네트워크에서는  flannelkubernetes의 Node에 따라 데몬 프로세스가 유지되고  VxLAN이름은  flannel.1 this  VNID이며 이 네트워크의 경로는 유지됩니다 노드 간 트래픽이 발생하면  VxLAN 피어의 MAC 주소 주소는 전송 대상을 알 수 있으므로 패킷을 반대쪽 끝으로 보낼 수 있으며 패킷을 수신하는 반대쪽 끝 VxLAN 장치는 압축을 푼 후  flannel.1 실제 대상 주소를 얻습니다.

Forwarding database 목록 보기 

$ bridge fdb
26:5e:87:90:91:fc dev flannel.1 dst 10.0.0.3 self permanent

쿠버네티스의 VxLAN

wireshark 언팩이 포함된 VxLAN 패킷

참고: VxLAN에서 사용하는 포트 4789, wireshark는 포트에 따라 프로토콜을 분석해야 하며, Linux에서 flannel의 기본 포트는 8472이며, 이때 패킷 캡처에서 하나의 UDP 패킷만 볼 수 있습니다.

터널은 실제로 추상적인 개념이라는 것을 위의 아키텍처에서 볼 수 있으며, 시설 양단의 실제 터널이 아니라 데이터 패킷을 물리적 장치를 통해 전송한 후 다른 데이터 패킷으로 캡슐화하여 네트워크의 중첩을 실현하기 위해 압축을 푸는 동일한 장치(네트워크 터널).

짜다 vxlan

Weave는 또한  VxLAN 기술을 사용하여 패키지 캡슐화를 완료합니다.이 기술을  weave 호출하고  in  및  in에서 사용하는 기술 fastdp (fast data path)과  다릅니다  . 여기서는 Linux 커널에서 사용되며  weave는 네트워크 트래픽을 암호화합니다.calicoflannelopenvswitch datapath module

직조 fastdp 네트워크 토폴로지

참고: fastdp는 Linux 커널 버전 3.12 이상에서 작동합니다.CentOS7과 같이 이 버전보다 낮은 경우 weave는 weave에서 호출되는 사용자 공간에서 작동합니다. sleeve mode

참조

https://github.com/flannel-io/flannel/blob/master/Documentation/backends.md#host-gw
https://projectcalico.docs.tigera.io/networking/bgp
https://www.weave. works/docs/net/latest/concepts/router-encapsulation/
https://github.com/k8snetworkplumbingwg/sriov-network-device-plugin
https://github.com/nokia/danm

추천

출처blog.csdn.net/m0_37723088/article/details/130711661