溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Kubernetes網(wǎng)絡(luò)組件之Flannel策略實踐(vxl

發(fā)布時間:2020-07-30 21:02:20 來源:網(wǎng)絡(luò) 閱讀:4161 作者:wx5c1cfd6e22842 欄目:系統(tǒng)運維

4.3 Kubernetes網(wǎng)絡(luò)組件之 Flannel
Flannel是CoreOS維護的一個網(wǎng)絡(luò)組件,F(xiàn)lannel為每個Pod提供全局唯一的IP,F(xiàn)lannel使用ETCD來存儲Pod子網(wǎng)與Node IP之間的關(guān)系。flanneld守護進程在每臺主機上運行,并負責(zé)維護ETCD信息和路由數(shù)據(jù)包。
其實k8s網(wǎng)絡(luò)組件flannel和calico主要解決的問題是k8s節(jié)點之間容器網(wǎng)絡(luò)的通信,flannel要保證每個pod的IP是唯一的,怎么保證是唯一的,大部分組件的做法是在每個Node上分配一個唯一的子網(wǎng),node1是一個單獨的子網(wǎng),node2是一個單獨的子網(wǎng),可以理解是不同網(wǎng)段,不同vlan,所以每個節(jié)點都是一個子網(wǎng),所以flannel會預(yù)先設(shè)置一個大的子網(wǎng),然后在這個每個node上分配子網(wǎng),這些信息都會由flannel存儲到etcd中,并且每個子網(wǎng)綁定到node上都有關(guān)系記錄的,然后方便下次進行二次的數(shù)據(jù)包傳輸,并且flannel在node上會啟動一個守護進程并運行,守護進程主要維護的是本地的路由規(guī)則,和維護etcd中的信息。

1、Flannel 部署

 https://github.com/coreos/flannel 
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

部署好之后會以daemonset的形式在每個node上啟動一個pod,來啟動一個flannel的守護進程,主要負責(zé)本機路由表的設(shè)定和etcd中的數(shù)據(jù),本地的子網(wǎng)上報到etcd中,所以守護進程是非常重要的
可以在flannel的配置文件去設(shè)定大的子網(wǎng),還有屬性模式

 net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }

---

這個配置完之后會放到cni這個目錄下,由于flannel是使用網(wǎng)橋的模式,實現(xiàn)的同節(jié)點數(shù)據(jù)包到達宿主機這個的通信,所以子網(wǎng)信息并沒寫到這個配置文件里,而是放到了這個 cat /var/run/flannel/subnet.env 下,這個通過ip a也能看到設(shè)備分配的ip,每個節(jié)點都會分配一個子網(wǎng),網(wǎng)絡(luò)接口設(shè)備為cni0,也就是一個node上可以分配255個小的子網(wǎng)

[root@k8s-node2 ~]# cat /var/run/flannel/subnet.env 
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true

還有一個cni的二進制文件, /opt/cni/bin,這個就是kubelet調(diào)用這個二進制接口為創(chuàng)建的每個pod創(chuàng)建網(wǎng)絡(luò)信息,并且是從我們的配置的子網(wǎng)中去拿IP

配置的話修改的是就是預(yù)先設(shè)定它的子網(wǎng),以及工作模式,另外就是這個網(wǎng)絡(luò)不能與k8s本身的內(nèi)網(wǎng)沖突,否則導(dǎo)致網(wǎng)絡(luò)不通的狀況

2、 Flannel工作模式及原理
Flannel支持多種數(shù)據(jù)轉(zhuǎn)發(fā)方式:
UDP:最早支持的一種方式,由于性能最差,目前已經(jīng)棄用。
VXLAN:Overlay Network方案,源數(shù)據(jù)包封裝在另一種網(wǎng)絡(luò)包里面進行路由轉(zhuǎn)發(fā)和通信
這也是網(wǎng)絡(luò)的虛擬化技術(shù),也就是原來是有一個包數(shù)據(jù)包,有源IP和目的IP,但由于某些情況這個數(shù)據(jù)包到達不了目的地址上,這可能就會借助物理上的以太網(wǎng)網(wǎng)絡(luò)進行封裝一個數(shù)據(jù)包帶上,然后通過這種物理網(wǎng)絡(luò)傳輸?shù)侥康牡刂飞?,這是一種疊加式的網(wǎng)絡(luò),里面是有兩種數(shù)據(jù)包的,這種也叫做隧道方案
Host-GW:Flannel通過在各個節(jié)點上的Agent進程,將容器網(wǎng)絡(luò)的路由信息刷到主機的路由表上,這樣一來所有的主機都有整個容器網(wǎng)絡(luò)的路由數(shù)據(jù)了,這樣它就知道這個數(shù)據(jù)包到達這個節(jié)點轉(zhuǎn)發(fā)到這個機器上,也就是路由表之間轉(zhuǎn)發(fā)的,這種也叫路由方案
VXLAN

使用kubeadm部署的話默認是支持的

kubeadm部署指定Pod網(wǎng)段
kubeadm init --pod-network-cidr=10.244.0.0/16

但是使用二進制部署就得去啟動cni的支持,默認我ansible部署的k8s集群都是啟動的
二進制部署指定

cat /opt/kubernetes/cfg/kube-controller-manager.conf
--allocate-node-cidrs=true \     允許node自動分配cidr這個網(wǎng)絡(luò)
--cluster-cidr=10.244.0.0/16 \   指定pod網(wǎng)絡(luò)的網(wǎng)段,這個網(wǎng)段要和flannel的網(wǎng)段對應(yīng)上

另外也都要在每個node節(jié)點的kubelet的配置文件上進行對cni的支持

[root@k8s-node1 ~]# cat /opt/kubernetes/cfg/kubelet.conf 
--network-plugin=cni \

這樣的話就能以cni的標(biāo)準來為k8s配置網(wǎng)絡(luò)

kube-flannel.yml
net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }

在節(jié)點1上有個容器,與節(jié)點2上的容器進行通信,這兩個是進行跨主機進行的通信,如果本機通信之間使用網(wǎng)橋使用二層的傳輸了,像原生的docker網(wǎng)就能解決了,最重要的是這兩個節(jié)點的數(shù)據(jù)包傳輸

flannel保證每個node都是唯一的ip,它是在每個node上都分配一個子網(wǎng)
可以看到flannel是基于宿主機創(chuàng)建的,它會為每個node創(chuàng)建獨立的子網(wǎng),并為當(dāng)前pod分配ip

[root@k8s-master1 ~]# kubectl get pod -n kube-system -o wide
kube-flannel-ds-amd64-4jjmm           1/1     Running   0          14d   10.4.7.11     k8s-master1   <none>           <none>
kube-flannel-ds-amd64-9f9vq           1/1     Running   0          14d   10.4.7.21     k8s-node2     <none>           <none>
kube-flannel-ds-amd64-gcf9s           1/1     Running   0          14d   10.4.7.12     k8s-node1     <none>           <none>

為了能夠在二層網(wǎng)絡(luò)上打通“隧道”,VXLAN 會在宿主機上設(shè)置一個特殊的網(wǎng)絡(luò)設(shè)備作為“隧道”的兩端。這個設(shè)備就叫作 VTEP,即:VXLAN Tunnel End Point(虛擬隧道端點)。下圖flannel.1的設(shè)備就是VXLAN所需的VTEP設(shè)備。示意圖如下:
Kubernetes網(wǎng)絡(luò)組件之Flannel策略實踐(vxl

vxlan是怎么工作的?
vxlan是Linux上支持的一個隧道的技術(shù),隧道也就是點到點,端到端的兩個設(shè)備的通信,其實vxlan實現(xiàn)是有一個vtep的設(shè)備做數(shù)據(jù)包的封裝與解封裝,而現(xiàn)在已經(jīng)封裝到flannel.1這個進程里面了,也就是這個虛擬網(wǎng)卡包含了veth來去使用對這個vxlan進行封裝和解封裝。

現(xiàn)在是Node1節(jié)點上的pod 1是1.10,現(xiàn)在要與Node2節(jié)點上的pod 2的2.10進行通信,他們是不在一個網(wǎng)絡(luò)的,當(dāng)這個數(shù)據(jù)包發(fā)出去的時候,pod1 的容器的網(wǎng)卡eth0,先出這個網(wǎng)卡,然后會連接這個veth這個好比就是一個網(wǎng)線,etch0是一頭,veth是一頭,也就是veth是這個設(shè)備的另一頭,
這個veth是在宿主機上,那么這個宿主機就拿到了這個容器的數(shù)據(jù)包,然后這個數(shù)據(jù)包到達這個網(wǎng)橋上面,這個網(wǎng)橋也好比一個二層的交換機,所有的容器都會加入到這個網(wǎng)橋里面,可以通過yum -y install bridge-utils看到veth的另一端是不是加入到cni的網(wǎng)橋中,這個網(wǎng)橋就是flannel創(chuàng)建的,并且這個網(wǎng)橋有獨立的mac地址和IP都可以看到

[root@k8s-node2 ~]# brctl show cni0
bridge name bridge id       STP enabled interfaces
cni0        8000.4a025e87aa87   no      veth08925d5a
                            veth3591a36f
                            veth776a1e86
                            veth718beeac
                            veth81dadcbd
                            veth8a96f11c
                            veth8c90fdb6
                            veth8f350182
                            veth90818f0b
                            vetha471152b

這個就是當(dāng)我們創(chuàng)建好pod的時候由flannel去分配并加入這個網(wǎng)橋中的,這個后面有個interfaces有這個接口,這個相當(dāng)于交換機的接口,這正是宿主機上的虛擬網(wǎng)卡,如果本地的話,直接走這個網(wǎng)橋就能直接找到了,然后就可以發(fā)送一個ARP廣播包進行封包傳輸了,cni0就相當(dāng)于一個二層交換機,幫你擴散,找目的的mac進行響應(yīng),所以說同節(jié)點就可以直接走網(wǎng)橋這個,那么這個目的地址不在這個網(wǎng)橋里面,就像2.10,當(dāng)前的node是不知道2.10上的pod在哪,那么它只能走路由表了,也就是它它不一定目的地址的時候就會走默認網(wǎng)關(guān),所以flannel會在宿主機上生成很多路由表通過ip router可以看到

[root@k8s-node2 ~]# ip route 
default via 10.4.7.1 dev eth0 proto static metric 100 
10.4.7.0/24 dev eth0 proto kernel scope link src 10.4.7.21 metric /
10.244.0.0/24 dev cni0 proto kernel scope link src 10.244.0.1  /
10.244.1.0/24 via 10.244.1.0 dev flannel.1 onlink /
10.244.2.0/24 via 10.244.2.0 dev flannel.1 onlink /
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 

部署docker生成的路由表,這里的docker0網(wǎng)橋是沒有用到,當(dāng)部署flannel的時候是默認使用的是自己的網(wǎng)橋,這個的原理和flannel的是一樣的,只不過flannel用的是自己做的,也是為了方便自己處理數(shù)據(jù)包

這里的路由表都記錄下來了,它會找哪個是目的地址2.10pod2的IP地址,所以它會根據(jù)這個路由表,然后發(fā)送到flannel的這個設(shè)備上,這個flannel是采用vxlan的模式,vxlan需要veth的數(shù)據(jù)封裝與解封裝,所以flannel就把這個數(shù)據(jù)包交給vxlan,而vxlan是一個內(nèi)核級的驅(qū)動程序,有它去封裝這個包,因為vxlan本身是工作在二層的,它還需要目的的mac地址

那么就可以通過ip neigh show dev flannel.1去查看mac地址

 [root@k8s-node2 ~]# ip neigh show dev flannel.1
10.244.2.0 lladdr ea:ca:d6:62:be:21 PERMANENT
10.244.1.0 lladdr 4e:e3:fa:5f:d2:34 PERMANENT

而flannel.1的vxlan實現(xiàn)是有一個vtep的設(shè)備做數(shù)據(jù)包的封裝與解封裝,因為它在2層進行封包,就要知道目的的mac地址,那么這個目的mac就由flannel去提供給vetp,flannel去存儲對應(yīng)下一跳的網(wǎng)關(guān),那么這個網(wǎng)關(guān)肯定不是在本地,當(dāng)我們拿到目的的mac地址之后你們就封裝成一個完整的幀,那么封裝好之后,對于宿主機沒有太多的實際意義,因為這個數(shù)據(jù)包幀發(fā)不出去,要是按二層的走肯定到不了另外一個節(jié)點,因為在不同的子網(wǎng)里面,如果沒有路由的介入肯定是通信不了的,接下來就需要linux內(nèi)核的數(shù)據(jù)幀封裝一個宿主機普通的數(shù)據(jù)幀,也就是udp封裝一個普通的數(shù)據(jù)幀,也就是在這之上再加一層udp的包,這樣做的目的能讓數(shù)據(jù)包直接傳輸?shù)侥康娜萜鞯闹鳈C上。
Kubernetes網(wǎng)絡(luò)組件之Flannel策略實踐(vxl
vxlan是使用的udp協(xié)議,它會將原始的報文放在內(nèi)部,而外部由udp封裝的源IP與目的地址

[root@k8s-master1 ~]# bridge fdb show  dev flannel.1
a6:a4:e5:5d:19:9b dst 10.4.7.21 self permanent
ea:ca:d6:62:be:21 dst 10.4.7.12 self permanent

可以看到,上面用的對方flannel.1的MAC地址對應(yīng)宿主機IP,也就是UDP要發(fā)往的目的地。使用這個目的IP進行封裝。
也就是這些flannel都是知道的,為什么說flannel維護這etcd的數(shù)據(jù),守護本地的路由規(guī)則,其實etcd的數(shù)據(jù)要和flannel,把它當(dāng)前的數(shù)據(jù)寫到etcd中,由各個節(jié)點都存儲一份,所以根據(jù)這個地址拿到了mac地址,然后這又是一個完整的包,由vxlan封裝的udp的包,這個udp包里面就有兩個IP包的存在,udp就直接能發(fā)送到node2的節(jié)點上,數(shù)據(jù)包已經(jīng)傳輸過去了,因為宿主機之間是同網(wǎng)段的,到達31.63上之后,接收到udp的包之后,會進行拆分,解包會將原始的包拿出來,所以這里就有一個vxlan的標(biāo)記,本身flannel是由vtep處理的,所以在封包的時候?qū)χ砂蛄藗€標(biāo)記,也就是vxlan header的標(biāo)記,首先打上vxlan的頭部,那么這就意味著這就是一個vxlan的數(shù)據(jù)包,并且加了一個VNI的編號,VNI是為了區(qū)分vxlan的點對點隧道,多個數(shù)據(jù)包也是分外多個編號,也是為了區(qū)分,而這個編號被flannel引用到了,所以這是內(nèi)部的一個編號,確認這個數(shù)據(jù)包無誤,然后交給flannel.1這個設(shè)備,它處理這個數(shù)據(jù)包,拿到了源IP和目的IP,而去判斷,會發(fā)現(xiàn)這個是cni網(wǎng)橋的,所以它根據(jù)路由表放到了cni網(wǎng)橋,根據(jù)這個路由表拆分這個目的地址,正好這個目的地址匹配到了,所以它會將這個轉(zhuǎn)發(fā)到cni網(wǎng)橋里,到cni就跟之前一樣了,就相當(dāng)于一個二層交換機,拿到這個數(shù)據(jù)包,它會進行一個ARP的廣播,發(fā)現(xiàn)正在這個網(wǎng)橋里面,然后就進行數(shù)據(jù)包的轉(zhuǎn)發(fā)了。

從此看來;vxlan使用重疊網(wǎng)絡(luò),進行封包解封包,性能就下降了很多

小結(jié):

  1. 容器路由:容器根據(jù)路由表從eth0發(fā)出
    / # ip route
    default via 10.244.0.1 dev eth0 
    10.244.0.0/24 dev eth0 scope link  src 10.244.0.45 
    10.244.0.0/16 via 10.244.0.1 dev eth0 
  2. 主機路由:數(shù)據(jù)包進入到宿主機虛擬網(wǎng)卡cni0,根據(jù)路由表轉(zhuǎn)發(fā)到flannel.1虛擬網(wǎng)卡,也就是,來到了隧道的入口。
    ip route
    default via 192.168.31.1 dev ens33 proto static metric 100 
    10.244.0.0/24 dev cni0 proto kernel scope link src 10.244.0.1 
    10.244.1.0/24 via 10.244.1.0 dev flannel.1 onlink 
    10.244.2.0/24 via 10.244.2.0 dev flannel.1 onlink 
  3. VXLAN封裝:而這些VTEP設(shè)備(二層)之間組成二層網(wǎng)絡(luò)必須要知道目的MAC地址。這個MAC地址從哪獲取到呢?其實在flanneld進程啟動后,就會自動添加其他節(jié)點ARP記錄,可以通過ip命令查看,如下所示:
ip neigh show dev flannel.1
10.244.1.0 lladdr ca:2a:a4:59:b6:55 PERMANENT
10.244.2.0 lladdr d2:d0:1b:a7:a9:cd PERMANENT
  1. 二次封包:知道了目的MAC地址,封裝二層數(shù)據(jù)幀(容器源IP和目的IP)后,對于宿主機網(wǎng)絡(luò)來說這個幀并沒有什么實際意義。接下來,Linux內(nèi)核還要把這個數(shù)據(jù)幀進一步封裝成為宿主機網(wǎng)絡(luò)的一個普通數(shù)據(jù)幀,好讓它載著內(nèi)部數(shù)據(jù)幀,通過宿主機的eth0網(wǎng)卡進行傳輸。
  2. 封裝到UDP包發(fā)出去:現(xiàn)在能直接發(fā)UDP包嘛?到目前為止,我們只知道另一端的flannel.1設(shè)備的MAC地址,卻不知道對應(yīng)的宿主機地址是什么。
    flanneld進程也維護著一個叫做FDB的轉(zhuǎn)發(fā)數(shù)據(jù)庫,可以通過bridge fdb命令查看:

    bridge fdb show  dev flannel.1
    
    d2:d0:1b:a7:a9:cd dst 192.168.31.61 self permanent
    ca:2a:a4:59:b6:55 dst 192.168.31.63 self permanent

    可以看到,上面用的對方flannel.1的MAC地址對應(yīng)宿主機IP,也就是UDP要發(fā)往的目的地。使用這個目的IP進行封裝。

  3. 數(shù)據(jù)包到達目的宿主機:Node1的eth0網(wǎng)卡發(fā)出去,發(fā)現(xiàn)是VXLAN數(shù)據(jù)包,把它交給flannel.1設(shè)備。flannel.1設(shè)備則會進一步拆包,取出原始二層數(shù)據(jù)幀包,發(fā)送ARP請求,經(jīng)由cni0網(wǎng)橋轉(zhuǎn)發(fā)給container。

Host-GW
host-gw模式相比vxlan簡單了許多, 直接添加路由,將目的主機當(dāng)做網(wǎng)關(guān),直接路由原始封包。
切換成host-gw的模式,上面的轉(zhuǎn)發(fā)還是一樣,pod1容器的網(wǎng)卡先連接veth到宿主機上,然后到達cni0的網(wǎng)橋上,這個網(wǎng)橋就相當(dāng)于一個二層的交換機,這個數(shù)據(jù)包到cni的網(wǎng)橋之后,也就是到達宿主機上,那么宿主機的網(wǎng)絡(luò)協(xié)議棧會根據(jù)路由表決定轉(zhuǎn)發(fā)到哪個網(wǎng)關(guān)上,因為它的目的IP地址不是同網(wǎng)段的,肯定走路由表,它會根據(jù)路由表判斷目的地址是2.10,也就是來自這個數(shù)據(jù)的數(shù)據(jù)包轉(zhuǎn)發(fā)到了它的下一跳,也就是網(wǎng)關(guān),通過接口之間轉(zhuǎn)發(fā)到31.63上了,也就是直接安照宿主機的網(wǎng)絡(luò),因為這個數(shù)據(jù)包是宿主機處理的,所以宿主機要想訪問31.63,會進行重新封包,目的地址就是31.63,它判斷了31.63下一跳的網(wǎng)關(guān)是同一子網(wǎng),而且是二層的傳輸,二層的傳輸又需要獲取到目的的mac地址,如果它本地不知道31.63的mac地址的話,它會發(fā)送一個ARP廣播包,知道了對方的mac就進行封包,所以經(jīng)過二層的傳輸?shù)竭_31.63,31.63收到之后數(shù)據(jù)包之后,它又會去判斷路由表了,然后進入cni的網(wǎng)橋,二層又轉(zhuǎn)發(fā)到了容器里面。

最重要兩條,host-gw是把每個節(jié)點都當(dāng)成一個網(wǎng)關(guān),它會加入其他節(jié)點并設(shè)成網(wǎng)關(guān),當(dāng)數(shù)據(jù)包到達這個節(jié)點的時候,就根據(jù)路由表之間發(fā)送到下一跳了,也就是節(jié)點IP,這個都是同網(wǎng)段的IP,直接通過2層之間把這個數(shù)據(jù),轉(zhuǎn)發(fā)到另一個節(jié)點上,另一個節(jié)點再根據(jù)另一條規(guī)則,根據(jù)目的的地址轉(zhuǎn)發(fā)到cni網(wǎng)橋,cni網(wǎng)橋根據(jù)2層又轉(zhuǎn)發(fā)到容器里面,一個是數(shù)據(jù)的流入,就是當(dāng)數(shù)據(jù)包到達這個節(jié)點之后,然后發(fā)給誰,這是流入數(shù)據(jù)包,一個是數(shù)據(jù)包的流出,當(dāng)從節(jié)點出來的數(shù)據(jù)包,應(yīng)該轉(zhuǎn)發(fā)到哪個node上,這些都是由flannel去維護的
這個的局限是每個node在2層都能通,否則下一跳轉(zhuǎn)發(fā)不過去,但是它的性能要比vxlan的性能高很多,不需要封包解封包,這種接近原生,性能也是最好的

下面是示意圖:
Kubernetes網(wǎng)絡(luò)組件之Flannel策略實踐(vxl

kube-flannel.yml

net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "host-gw"
      }
    }

看名字就能看出hots-gw它把目的的主機當(dāng)作網(wǎng)關(guān),直接路由原始的封包
將vxlan切換成host-gw的模式,重建之后可以看到路由表發(fā)生變化,切換的時候也會對網(wǎng)絡(luò)進行影響,一般是在夜深人靜的時候去做

之前的路由表都是通過flannel.1去轉(zhuǎn)發(fā)到設(shè)備上,也就是使用host-gw,flannel.1這個設(shè)備就不用了,所以就不會用vxlan進行去封包了
當(dāng)你設(shè)置flannel使用host-gw模式,flanneld會在宿主機上創(chuàng)建節(jié)點的路由表:

ip route

default via 192.168.31.1 dev ens33 proto static metric 100 
10.244.0.0/24 dev cni0 proto kernel scope link src 10.244.0.1 
10.244.1.0/24 via 192.168.31.63 dev ens33 
10.244.2.0/24 via 192.168.31.61 dev ens33 
192.168.31.0/24 dev ens33 proto kernel scope link src 192.168.31.62 metric 100

目的 IP 地址屬于 10.244.1.0/24 網(wǎng)段的 IP 包,應(yīng)該經(jīng)過本機的 eth0 設(shè)備發(fā)出去(即:dev eth0);并且,它下一跳地址是 192.168.31.63(即:via 192.168.31.63)。
一旦配置了下一跳地址,那么接下來,當(dāng) IP 包從網(wǎng)絡(luò)層進入鏈路層封裝成幀的時候,eth0 設(shè)備就會使用下一跳地址對應(yīng)的 MAC 地址,作為該數(shù)據(jù)幀的目的 MAC 地址。
而 Node 2 的內(nèi)核網(wǎng)絡(luò)棧從二層數(shù)據(jù)幀里拿到 IP 包后,會“看到”這個 IP 包的目的 IP 地址是 10.244.1.20,即 container-2 的 IP 地址。這時候,根據(jù) Node 2 上的路由表,該目的地址會匹配到第二條路由規(guī)則(也就是 10.244.1.0 對應(yīng)的路由規(guī)則),從而進入 cni0 網(wǎng)橋,進而進入到 container-2 當(dāng)中。

小結(jié):
如果想追求性能的話,二層可以通信,那么就可以選擇host-gw,那么如果兩個節(jié)點之間是不能通過二層通信,那么可能需要路由的轉(zhuǎn)發(fā),那么可能在不同的vlan中,那么使用vxlan是最好的,因為可以滿足這樣的一個需求。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI