1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        16 張圖硬核講解 Kubernetes 網(wǎng)絡(luò)

        共 5410字,需瀏覽 11分鐘

         ·

        2022-11-18 23:03

        Overview

        本文將探討 Kubernetes 中的網(wǎng)絡(luò)模型,以及對(duì)各種網(wǎng)絡(luò)模型進(jìn)行分析。

        Underlay Network Model

        什么是 Underlay Network

        底層網(wǎng)絡(luò) Underlay Network 顧名思義是指網(wǎng)絡(luò)設(shè)備基礎(chǔ)設(shè)施,如交換機(jī),路由器, DWDM 使用網(wǎng)絡(luò)介質(zhì)將其鏈接成的物理網(wǎng)絡(luò)拓?fù)?,?fù)責(zé)網(wǎng)絡(luò)之間的數(shù)據(jù)包傳輸。

        Underlay network topology

        underlay network 可以是二層,也可以是三層;二層的典型例子是以太網(wǎng) Ethernet,三層是的典型例子是互聯(lián)網(wǎng) Internet。

        而工作于二層的技術(shù)是 vlan,工作在三層的技術(shù)是由 OSPF, BGP 等協(xié)議組成。

        k8s 中的 underlay network

        在 kubernetes 中,underlay network 中比較典型的例子是通過(guò)將宿主機(jī)作為路由器設(shè)備,Pod 的網(wǎng)絡(luò)則通過(guò)學(xué)習(xí)路由條目從而實(shí)現(xiàn)跨節(jié)點(diǎn)通訊。

        underlay network topology in kubernetes

        這種模型下典型的有 flannelhost-gw 模式與 calico BGP 模式。

        flannel host-gw

        flannel host-gw 模式中每個(gè) Node 需要在同一個(gè)二層網(wǎng)絡(luò)中,并將 Node 作為一個(gè)路由器,跨節(jié)點(diǎn)通訊將通過(guò)路由表方式進(jìn)行,這樣方式下將網(wǎng)絡(luò)模擬成一個(gè)underlay network。

        layer2 ethernet topology

        Notes:因?yàn)槭峭ㄟ^(guò)路由方式,集群的 cidr 至少要配置 16,因?yàn)檫@樣可以保證,跨節(jié)點(diǎn)的 Node 作為一層網(wǎng)絡(luò),同節(jié)點(diǎn)的 Pod 作為一個(gè)網(wǎng)絡(luò)。如果不是這種用情況,路由表處于相同的網(wǎng)絡(luò)中,會(huì)存在網(wǎng)絡(luò)不可達(dá)

        Calico BGP

        BGP(Border Gateway Protocol)是去中心化自治路由協(xié)議。它是通過(guò)維護(hù) IP 路由表或前綴表來(lái)實(shí)現(xiàn) AS (Autonomous System)之間的可訪問(wèn)性,屬于向量路由協(xié)議。

        BGP network topology

        flannel 不同的是,Calico 提供了的 BGP 網(wǎng)絡(luò)解決方案,在網(wǎng)絡(luò)模型上,CalicoFlannel host-gw 是近似的,但在軟件架構(gòu)的實(shí)現(xiàn)上,flannel 使用 flanneld 進(jìn)程來(lái)維護(hù)路由信息;而 Calico 是包含多個(gè)守護(hù)進(jìn)程的,其中 Brid 進(jìn)程是一個(gè) BGP 客戶(hù)端與路由反射器(Router Reflector),BGP 客戶(hù)端負(fù)責(zé)從 Felix 中獲取路由并分發(fā)到其他 BGP Peer,而反射器在 BGP 中起了優(yōu)化的作用。在同一個(gè) IBGP 中,BGP 客戶(hù)端僅需要和一個(gè) RR 相連,這樣減少了AS內(nèi)部維護(hù)的大量的 BGP 連接。通常情況下,RR 是真實(shí)的路由設(shè)備,而 Bird 作為 BGP 客戶(hù)端工作。

        Calico Network Architecture

        IPVLAN & MACVLAN

        IPVLANMACVLAN 是一種網(wǎng)卡虛擬化技術(shù),兩者之間的區(qū)別為, IPVLAN 允許一個(gè)物理網(wǎng)卡擁有多個(gè) IP 地址,并且所有的虛擬接口用同一個(gè) MAC 地址;而 MACVLAN 則是相反的,其允許同一個(gè)網(wǎng)卡擁有多個(gè) MAC 地址,而虛擬出的網(wǎng)卡可以沒(méi)有 IP 地址。

        因?yàn)槭蔷W(wǎng)卡虛擬化技術(shù),而不是網(wǎng)絡(luò)虛擬化技術(shù),本質(zhì)上來(lái)說(shuō)屬于 Overlay network,這種方式在虛擬化環(huán)境中與 Overlay network 相比最大的特點(diǎn)就是可以將 Pod 的網(wǎng)絡(luò)拉平到 Node 網(wǎng)絡(luò)同級(jí),從而提供更高的性能、低延遲的網(wǎng)絡(luò)接口。本質(zhì)上來(lái)說(shuō)其網(wǎng)絡(luò)模型屬于下圖中第二個(gè)。

        Virtual networking modes: bridging, multiplexing and SR-IOV
        • 虛擬網(wǎng)橋:創(chuàng)建一個(gè)虛擬網(wǎng)卡對(duì)(veth pair),一頭在容器內(nèi),一頭在宿主機(jī)的 root namespaces 內(nèi)。這樣一來(lái)容器內(nèi)發(fā)出的數(shù)據(jù)包可以通過(guò)網(wǎng)橋直接進(jìn)入宿主機(jī)網(wǎng)絡(luò)棧,而發(fā)往容器的數(shù)據(jù)包也可以經(jīng)過(guò)網(wǎng)橋進(jìn)入容器。
        • 多路復(fù)用:使用一個(gè)中間網(wǎng)絡(luò)設(shè)備,暴露多個(gè)虛擬網(wǎng)卡接口,容器網(wǎng)卡都可以介入這個(gè)中間設(shè)備,并通過(guò) MAC/IP 地址來(lái)區(qū)分 packet 應(yīng)該發(fā)往哪個(gè)容器設(shè)備。
        • 硬件交換,為每個(gè) Pod 分配一個(gè)虛擬網(wǎng)卡,這樣一來(lái),Pod 與 Pod 之間的連接關(guān)系就會(huì)變得非常清晰,因?yàn)榻跷锢頇C(jī)之間的通信基礎(chǔ)。如今大多數(shù)網(wǎng)卡都支持 SR-IOV 功能,該功能將單一的物理網(wǎng)卡虛擬成多個(gè) VF 接口,每個(gè) VF 接口都有單獨(dú)的虛擬 PCIe 通道,這些虛擬的 PCIe 通道共用物理網(wǎng)卡的 PCIe 通道。

        在 kubernetes 中 IPVLAN 這種網(wǎng)絡(luò)模型下典型的 CNI 有,multus 與 danm。

        multus

        multus 是 intel 開(kāi)源的 CNI 方案,是由傳統(tǒng)的 cnimultus,并且提供了 SR-IOV CNI 插件使 K8s pod 能夠連接到 SR-IOV VF 。這是使用了 IPVLAN/MACVLAN 的功能。

        當(dāng)創(chuàng)建新的 Pod 后,SR-IOV 插件開(kāi)始工作。配置 VF 將被移動(dòng)到新的 CNI 名稱(chēng)空間。該插件根據(jù) CNI 配置文件中的 “name” 選項(xiàng)設(shè)置接口名稱(chēng)。最后將 VF 狀態(tài)設(shè)置為 UP。

        下圖是一個(gè) Multus 和 SR-IOV CNI 插件的網(wǎng)絡(luò)環(huán)境,具有三個(gè)接口的 pod。

        • eth0flannel 網(wǎng)絡(luò)插件,也是作為 Pod 的默認(rèn)網(wǎng)絡(luò)
        • VF 是主機(jī)的物理端口 ens2f0 的實(shí)例化。這是英特爾 X710-DA4 上的一個(gè)端口。在 Pod 端的 VF 接口名稱(chēng)為 south0
        • 這個(gè) VF 使用了 DPDK 驅(qū)動(dòng)程序,此 VF 是從主機(jī)的物理端口 ens2f1 實(shí)例化出的。這個(gè)是英特爾 ? X710-DA4 上另外一個(gè)端口。Pod 內(nèi)的 VF 接口名稱(chēng)為 north0。該接口綁定到 DPDK 驅(qū)動(dòng)程序 vfio-pci 。
        Mutus networking Architecture overlay and SR-IOV

        Notes:術(shù)語(yǔ)

        • NIC:network interface card,網(wǎng)卡
        • SR-IOV:single root I/O virtualization,硬件實(shí)現(xiàn)的功能,允許各虛擬機(jī)間共享 PCIe 設(shè)備。
        • VF:Virtual Function,基于 PF,與 PF 或者其他 VF 共享一個(gè)物理資源。
        • PF:PCIe Physical Function,擁有完全控制 PCIe 資源的能力
        • DPDK:Data Plane Development Kit

        于此同時(shí),也可以將主機(jī)接口直接移動(dòng)到 Pod 的網(wǎng)絡(luò)名稱(chēng)空間,當(dāng)然這個(gè)接口是必須存在,并且不能是與默認(rèn)網(wǎng)絡(luò)使用同一個(gè)接口。這種情況下,在普通網(wǎng)卡的環(huán)境中,就直接將 Pod 網(wǎng)絡(luò)與 Node 網(wǎng)絡(luò)處于同一個(gè)平面內(nèi)了。

        Mutus networking Architecture overlay and ipvlan

        danm

        DANM 是諾基亞開(kāi)源的 CNI 項(xiàng)目,目的是將電信級(jí)網(wǎng)絡(luò)引入 kubernetes 中,與 multus 相同的是,也提供了 SR-IOV/DPDK 的硬件技術(shù),并且支持 IPVLAN.

        Overlay Network Model

        什么是 Overlay

        疊加網(wǎng)絡(luò)是使用網(wǎng)絡(luò)虛擬化技術(shù),在 underlay 網(wǎng)絡(luò)上構(gòu)建出的虛擬邏輯網(wǎng)絡(luò),而無(wú)需對(duì)物理網(wǎng)絡(luò)架構(gòu)進(jìn)行更改。本質(zhì)上來(lái)說(shuō),overlay network 使用的是一種或多種隧道協(xié)議 (tunneling),通過(guò)將數(shù)據(jù)包封裝,實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)到另一個(gè)網(wǎng)絡(luò)中的傳輸,具體來(lái)說(shuō)隧道協(xié)議關(guān)注的是數(shù)據(jù)包(幀)。

        overlay network topology

        常見(jiàn)的網(wǎng)絡(luò)隧道技術(shù)

        • 通用路由封裝 ( Generic Routing Encapsulation ) 用于將來(lái)自 IPv4/IPv6 的數(shù)據(jù)包封裝為另一個(gè)協(xié)議的數(shù)據(jù)包中,通常工作與 L3 網(wǎng)絡(luò)層中。
        • VxLAN (Virtual Extensible LAN),是一個(gè)簡(jiǎn)單的隧道協(xié)議,本質(zhì)上是將 L2 的以太網(wǎng)幀封裝為 L4 中 UDP 數(shù)據(jù)包的方法,使用 4789 作為默認(rèn)端口。VxLAN 也是 VLAN 的擴(kuò)展,對(duì)于 4096(VLAN ID) 擴(kuò)展為 1600 萬(wàn)(VN·ID )個(gè)邏輯網(wǎng)絡(luò)。

        這種工作在 overlay 模型下典型的有 flannelcalico 中的的 VxLAN, IPIP 模式。

        IPIP

        IP in IP 也是一種隧道協(xié)議,與 VxLAN 類(lèi)似的是,IPIP 的實(shí)現(xiàn)也是通過(guò) Linux 內(nèi)核功能進(jìn)行的封裝。IPIP 需要內(nèi)核模塊 ipip.ko 使用命令查看內(nèi)核是否加載 IPIP 模塊lsmod | grep ipip ;使用命令modprobe ipip 加載。

        A simple IPIP network workflow

        Kubernetes 中 IPIPVxLAN 類(lèi)似,也是通過(guò)網(wǎng)絡(luò)隧道技術(shù)實(shí)現(xiàn)的。與 VxLAN 差別就是,VxLAN 本質(zhì)上是一個(gè) UDP 包,而 IPIP 則是將包封裝在本身的報(bào)文包上。

        IPIP in kubernetes
        IPIP packet with wireshark unpack

        Notes:公有云可能不允許 IPIP 流量,例如 Azure

        VxLAN

        kubernetes 中不管是 flannel 還是 calico VxLAN 的實(shí)現(xiàn)都是使用 Linux 內(nèi)核功能進(jìn)行的封裝,Linux 對(duì) vxlan 協(xié)議的支持時(shí)間并不久,2012 年 Stephen Hemminger 才把相關(guān)的工作合并到 kernel 中,并最終出現(xiàn)在 kernel 3.7.0 版本。為了穩(wěn)定性和很多的功能,你可以會(huì)看到某些軟件推薦在 3.9.0 或者 3.10.0 以后版本的 kernel 上使用 VxLAN

        A simple VxLAN network topology

        在 kubernetes 中 vxlan 網(wǎng)絡(luò),例如 flannel,守護(hù)進(jìn)程會(huì)根據(jù) kubernetes 的 Node 而維護(hù) VxLAN,名稱(chēng)為 flannel.1 這是 VNID,并維護(hù)這個(gè)網(wǎng)絡(luò)的路由,當(dāng)發(fā)生跨節(jié)點(diǎn)的流量時(shí),本地會(huì)維護(hù)對(duì)端 VxLAN 設(shè)備的 MAC 地址,通過(guò)這個(gè)地址可以知道發(fā)送的目的端,這樣就可以封包發(fā)送到對(duì)端,收到包的對(duì)端 VxLAN 設(shè)備 flannel.1 解包后得到真實(shí)的目的地址。

        查看 Forwarding database 列表

        $ bridge fdb
        26:5e:87:90:91:fc dev flannel.1 dst 10.0.0.3 self permanent
        VxLAN in kubernetes
        VxLAN packet with wireshark unpack

        Notes:VxLAN 使用的 4789 端口,wireshark 應(yīng)該是根據(jù)端口進(jìn)行分析協(xié)議的,而 flannel 在 linux 中默認(rèn)端口是 8472,此時(shí)抓包僅能看到是一個(gè) UDP 包。

        通過(guò)上述的架構(gòu)可以看出,隧道實(shí)際上是一個(gè)抽象的概念,并不是建立的真實(shí)的兩端的隧道,而是通過(guò)將數(shù)據(jù)包封裝成另一個(gè)數(shù)據(jù)包,通過(guò)物理設(shè)備傳輸后,經(jīng)由相同的設(shè)備(網(wǎng)絡(luò)隧道)進(jìn)行解包實(shí)現(xiàn)網(wǎng)絡(luò)的疊加。

        weave vxlan

        weave 也是使用了 VxLAN 技術(shù)完成的包的封裝,這個(gè)技術(shù)在 weave 中稱(chēng)之為 fastdp (fast data path),與 calicoflannel 中用到的技術(shù)不同的,這里使用的是 Linux 內(nèi)核中的 openvswitch datapath module,并且 weave 對(duì)網(wǎng)絡(luò)流量進(jìn)行了加密。

        weave fastdp network topology

        Notes:fastdp 工作在 Linux 內(nèi)核版本 3.12 及更高版本,如果低于此版本的例如 CentOS7,weave 將工作在用戶(hù)空間,weave 中稱(chēng)之為 sleeve mode

        Reference

        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


        作者:Cylon

        原文鏈接:https://www.cnblogs.com/Cylon/p/16595820.html


        瀏覽 44
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            日韩午夜在线 | 久久99久久久 | 日本精品二区 | 日韩无码一级毛片 | 1分38秒叫床声小宾馆 | 成人免费A级毛片无码片2022 | 亭亭五月与丁香花 | 亚洲无码精品在线 | 欧美性爱XXXXX | 国产v在线 |