久久国产精品一区二区三区四区,久色婷婷小香蕉久久,国产日韩欧美在线播放不卡,另类av一区二区

全球資訊:從 Flannel 學習 Kubernetes overlay 網絡
來源:云原生指北    時間:2022-12-15 09:05:55
?Flannel 介紹

Flannel 是一個非常簡單的 overlay 網絡(VXLAN),是 Kubernetes 網絡 CNI 的解決方案之一。Flannel 在每臺主機上運行一個簡單的輕量級 agentflanneld?來監聽集群中節點的變更,并對地址空間進行預配置。Flannel 還會在每臺主機上安裝 vtepflannel.1(VXLAN tunnel endpoints),與其他主機通過 VXLAN 隧道相連。


(相關資料圖)

flanneld 監聽在8472端口,通過 UDP 與其他節點的 vtep 進行數據傳輸。到達 vtep 的二層包會被原封不動地通過 UDP 的方式發送到對端的 vtep,然后拆出二層包進行處理。簡單說就是用四層的 UDP 傳輸二層的數據幀。

vxlan-tunnel

在 Kubernetes 發行版K3S[1]中將 Flannel 作為默認的 CNI 實現。K3S 集成了 flannel,在啟動后 flannel 以 go routine 的方式運行。

環境搭建

Kubernetes 集群使用 k3s 發行版,但在安裝集群的時候,禁用 k3s 集成的 flannel,使用獨立安裝的 flannel 進行驗證。

安裝 CNI 的 plugin,需要在所有的 node 節點上執行下面的命令,下載 CNI 的官方 bin。

sudo mkdir -p /opt/cni/bincurl -sSL https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz | sudo tar -zxf - -C /opt/cni/bin

安裝 k3s 的控制平面。

export INSTALL_K3S_VERSION=v1.23.8+k3s2curl -sfL https://get.k3s.io | sh -s - --disable traefik --flannel-backend=none --write-kubeconfig-mode 644 --write-kubeconfig ~/.kube/config

安裝 Flannel。這里注意,Flannel 默認的 Pod CIRD 是10.244.0.0/16?,我們將其修改為 k3s 默認的10.42.0.0/16。

curl -s https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml | sed "s|10.244.0.0/16|10.42.0.0/16|g" | kubectl apply -f -

添加另一個節點到集群。

export INSTALL_K3S_VERSION=v1.23.8+k3s2export MASTER_IP=export NODE_TOKEN=curl -sfL https://get.k3s.io | K3S_URL=https://${MASTER_IP}:6443 K3S_TOKEN=${NODE_TOKEN} sh -

查看節點狀態。

kubectl get nodeNAME STATUS ROLES AGE VERSIONubuntu-dev3 Ready 13m v1.23.8+k3s2ubuntu-dev2 Ready control-plane,master 17m v1.23.8+k3s2

運行兩個 pod:curl?和httpbin,為了探尋

NODE1=ubuntu-dev2NODE2=ubuntu-dev3kubectl apply -n default -f - <網絡配置

接下來,一起看下 CNI 插件如何配置 pod 網絡。

初始化

Flannel 是通過Daemonset?的方式部署的,每臺節點上都會運行一個 flannel 的 pod。通過掛載本地磁盤的方式,在 Pod 啟動時會通過初始化容器將二進制文件和 CNI 的配置復制到本地磁盤中,分別位于/opt/cni/bin/flannel?和/etc/cni/net.d/10-flannel.conflist。

通過查看kube-flannel.yml[2]中的ConfigMap?,可以找到 CNI 配置,flannel 默認委托(見flannel-cni 源碼 `flannel_linux.go#L78`[3])給bridge 插件[4]進行網絡配置,網絡名稱為cbr0;IP 地址的管理,默認委托(見flannel-cni 源碼 `flannel_linux.go#L40`[5])host-local 插件[6]完成。

#cni-conf.json 復制到 /etc/cni/net.d/10-flannel.conflist{ "name": "cbr0", "cniVersion": "0.3.1", "plugins": [ { "type": "flannel", "delegate": { "hairpinMode": true, "isDefaultGateway": true } }, { "type": "portmap", "capabilities": { "portMappings": true } } ]}

還有 Flannel 的網絡配置,配置中有我們設置的 Pod CIDR10.42.0.0/16?以及后端(backend)的類型vxlan?。這也是 flannel 默認的類型,此外還有多種后端類型[7]可選,如host-gw、wireguard、udp、Alloc、IPIP、IPSec。

#net-conf.json 掛載到 pod 的 /etc/kube-flannel/net-conf.json{ "Network": "10.42.0.0/16", "Backend": { "Type": "vxlan" }}

Flannel Pod 運行啟動flanneld?進程,指定了參數--ip-masq?和--kube-subnet-mgr?,后者開啟了kube subnet manager模式。

運行

集群初始化時使用了默認的 Pod CIDR10.42.0.0/16?,當有節點加入集群,集群會從該網段上為節點分配屬于節點的 Pod CIDR10.42.X.1/24。

flannel 在kube subnet manager模式下,連接到 apiserver 監聽節點更新的事件,從節點信息中獲取節點的 Pod CIDR。

kubectl get no ubuntu-dev2 -o jsnotallow={.spec} | jq{ "podCIDR": "10.42.0.0/24", "podCIDRs": [ "10.42.0.0/24" ], "providerID": "k3s://ubuntu-dev2"}

然后在主機上寫子網配置文件,下面展示的是其中一個節點的子網配置文件的內容。另一個節點的內容差異在FLANNEL_SUBNET=10.42.1.1/24,使用的是對應節點的 Pod CIDR。

#node 192.168.1.12cat /run/flannel/subnet.envFLANNEL_NETWORK=10.42.0.0/16FLANNEL_SUBNET=10.42.0.1/24FLANNEL_MTU=1450FLANNEL_IPMASQ=trueCNI 插件執行

CNI 插件的執行是由容器運行時觸發的,具體細節可以看上一篇《源碼解析:從 kubelet、容器運行時看 CNI 的使用》。

Flannel Plugin Flow

flannel 插件

flannel?CNI 插件(/opt/cni/bin/flannel?)執行的時候,接收傳入的cni-conf.json?,讀取上面初始化好的subnet.env?的配置,輸出結果,委托給bridge進行下一步。

cat /var/lib/cni/flannel/e4239ab2706ed9191543a5c7f1ef06fc1f0a56346b0c3f2c742d52607ea271f0 | jq{ "cniVersion": "0.3.1", "hairpinMode": true, "ipMasq": false, "ipam": { "ranges": [ [ { "subnet": "10.42.0.0/24" } ] ], "routes": [ { "dst": "10.42.0.0/16" } ], "type": "host-local" }, "isDefaultGateway": true, "isGateway": true, "mtu": 1450, "name": "cbr0", "type": "bridge"}bridge 插件

bridge使用上面的輸出連同參數一起作為輸入,根據配置完成如下操作:

創建網橋cni0(節點的根網絡命名空間)創建容器網絡接口eth0( pod 網絡命名空間)創建主機上的虛擬網絡接口vethX(節點的根網絡命名空間)將vethX?連接到網橋cni0委托 ipam 插件分配 IP 地址、DNS、路由將 IP 地址綁定到 pod 網絡命名空間的接口eth0上檢查網橋狀態設置路由設置 DNS

最后輸出如下的結果:

cat /var/li/cni/results/cbr0-a34bb3dc268e99e6e1ef83c732f5619ca89924b646766d1ef352de90dbd1c750-eth0 | jq .result{ "cniVersion": "0.3.1", "dns": {}, "interfaces": [ { "mac": "6a:0f:94:28:9b:e7", "name": "cni0" }, { "mac": "ca:b4:a9:83:0f:d4", "name": "veth38b50fb4" }, { "mac": "0a:01:c5:6f:57:67", "name": "eth0", "sandbox": "/var/run/netns/cni-44bb41bd-7c41-4860-3c55-4323bc279628" } ], "ips": [ { "address": "10.42.0.5/24", "gateway": "10.42.0.1", "interface": 2, "version": "4" } ], "routes": [ { "dst": "10.42.0.0/16" }, { "dst": "0.0.0.0/0", "gw": "10.42.0.1" } ]}

port-mapping 插件

該插件會將來自主機上一個或多個端口的流量轉發到容器。

Debug

讓我們在第一個節點上,使用tcpdump?對接口cni0進行抓包。

tcpdump -i cni0 port 80 -vvv

從 podcurl?中使用 podhttpbin?的 IP 地址10.42.1.2發送請求:

kubectl exec curl -n default -- curl -s 10.42.1.2/get

cni0

從在cni0上的抓包結果來看,第三層的 IP 地址均為 Pod 的 IP 地址,看起來就像是兩個 pod 都在同一個網段。

tcpdump-on-cni0

host eth0

文章開頭提到 flanneld 監聽 udp 8472 端口。

netstat -tupln | grep 8472udp 0 0 0.0.0.0:8472 0.0.0.0:* -

我們直接在以太網接口上抓取 UDP 的包:

tcpdump -i eth0 port 8472 -vvv

再次發送請求,可以看到抓取到 UDP 數據包,傳輸的負載是二層的封包。

tcpdump-on-host-eth0

Overlay 網絡下的跨節點通信

在系列的第一篇中,我們研究 pod 間的通信時提到不同 CNI 插件的處理方式不同,這次我們探索了 flannel 插件的工作原理。希望通過下面的圖可以對 overlay 網絡處理跨節點的網絡通信有個比較直觀的認識。

當發送到10.42.1.2?流量到達節點 A 的網橋cni0?,由于目標 IP 并不屬于當前階段的網段。根據系統的路由規則,進入到接口flannel.1?,也就是 VXLAN 的 vtep。這里的路由規則也由flanneld來維護,當節點上線或者下線時,都會更新路由規則。

#192.168.1.12Destination Gateway Genmask Flags Metric Ref Use Ifacedefault _gateway 0.0.0.0 UG 0 0 0 eth010.42.0.0 0.0.0.0 255.255.255.0 U 0 0 0 cni010.42.1.0 10.42.1.0 255.255.255.0 UG 0 0 0 flannel.1192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0#192.168.1.13Destination Gateway Genmask Flags Metric Ref Use Ifacedefault _gateway 0.0.0.0 UG 0 0 0 eth010.42.0.0 10.42.0.0 255.255.255.0 UG 0 0 0 flannel.110.42.1.0 0.0.0.0 255.255.255.0 U 0 0 0 cni0192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

flannel.1?將原始的以太封包使用 UDP 協議重新封裝,將其發送到目標地址10.42.1.0?(目標的 MAC 地址通過 ARP 獲取)。對端的 vtep 也就是flannel.1?的 UDP 端口 8472 收到消息,解幀出以太封包,然后對以太封包進行路由處理,發送到接口cni0,最終到達目標 pod 中。

響應的數據傳輸與請求的處理也是類似,只是源地址和目的地址調換。

參考資料

[1]K3S:https://k3s.io/

[2]kube-flannel.yml:https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

[3]flannel-cni 源碼flannel_linux.go#L78?:https://github.com/flannel-io/cni-plugin/blob/v1.1.0/flannel_linux.go#L78

[4]bridge 插件:https://www.cni.dev/plugins/current/main/bridge/

[5]flannel-cni 源碼flannel_linux.go#L40?:https://github.com/flannel-io/cni-plugin/blob/v1.1.0/flannel_linux.go#L40

[6]host-local 插件:https://www.cni.dev/plugins/current/ipam/host-local/

[7]多種后端類型:https://github.com/flannel-io/flannel/blob/master/Documentation/backends.md

關鍵詞: 命名空間 數據傳輸 發送請求 配置文件 網絡接口

上一篇:

下一篇:

X 關閉

X 關閉

久久国产精品一区二区三区四区,久色婷婷小香蕉久久,国产日韩欧美在线播放不卡,另类av一区二区
亚洲宅男天堂在线观看无病毒| 欧美综合国产精品久久丁香| 国产一区日韩二区欧美三区| 夜夜夜久久久| 日韩一级免费观看| 国产日韩一区在线| 国产综合婷婷| 亚洲一区区二区| 国产精品福利影院| 在线观看亚洲a| 久久久最新网址| 日韩视频中文| 91久久中文字幕| 欧美亚洲第一区| 欧美亚洲免费高清在线观看| 欧美一区二区免费视频| 一本色道婷婷久久欧美| 尤物九九久久国产精品的分类| 欧美日本一道本| 欧美+日本+国产+在线a∨观看| 日韩小视频在线观看专区| 在线播放日韩| 国产精品99久久久久久人| 欧美午夜精品理论片a级按摩| 日韩一区二区精品在线观看| 午夜久久一区| 免费成人激情视频| 国产精品久久久久永久免费观看| 国产情人节一区| 亚洲免费在线视频一区 二区| 久久人人爽人人| 在线成人激情视频| 午夜精品久久久久久99热软件| 国产亚洲精品综合一区91| 亚洲日本va午夜在线电影| 亚洲一本大道在线| 亚洲欧美成人一区二区三区| 国产精品一区毛片| 亚洲国产三级网| 欧美国产精品一区| 久久美女艺术照精彩视频福利播放| 国产在线精品成人一区二区三区| 亚洲激情偷拍| 欧美日韩精品一区| 久热re这里精品视频在线6| 亚洲午夜久久久久久尤物| 欧美一区二区免费观在线| 久久人人97超碰人人澡爱香蕉| 国产日韩高清一区二区三区在线| 久久中文精品| 国产日韩一区二区三区在线| 欧美日韩亚洲一区二区三区在线| 欧美一区午夜精品| 国产日韩欧美成人| 欧美大片在线影院| 国产偷国产偷亚洲高清97cao| 99热在这里有精品免费| 亚洲图中文字幕| 欧美片在线播放| 欧美日韩国产综合视频在线| 欧美伦理a级免费电影| 亚洲视频在线观看| 欧美激情影音先锋| 国产欧美一区二区色老头| 欧美大香线蕉线伊人久久国产精品| 久久精品视频导航| 久久免费国产精品1| 最新国产の精品合集bt伙计| 欧美电影免费网站| 国产亚洲高清视频| 亚洲欧美日韩精品| 欧美bbbxxxxx| 久久精品视频在线观看| 久久激情综合| 欧美日本亚洲韩国国产| 午夜久久黄色| 99精品欧美一区二区三区| 亚洲激情国产| 亚洲人体大胆视频| 国产乱码精品| 欧美国产高潮xxxx1819| 国产精品香蕉在线观看| 欧美色综合天天久久综合精品| 日韩视频永久免费观看| 亚洲天堂av在线免费观看| 免费不卡欧美自拍视频| 日韩亚洲综合在线| 精品盗摄一区二区三区| 亚洲精品国产精品乱码不99| 国产精品一区免费在线观看| 夜夜爽夜夜爽精品视频| 美女被久久久| 国内精品久久久久久影视8| 欧美激情精品久久久久久蜜臀| 欧美韩国在线| 黄色成人精品网站| 国产精品免费网站| 国产综合激情| 新片速递亚洲合集欧美合集| 亚洲免费在线观看| 国产精品日日摸夜夜添夜夜av| 欧美在线视频不卡| 欧美亚洲综合在线| 欧美国产视频在线| 在线中文字幕一区| 久久久www免费人成黑人精品| 在线播放视频一区| 国产私拍一区| 久久久国产视频91| 麻豆精品视频在线观看| 黑人极品videos精品欧美裸| 亚洲国产精品久久91精品| 久久久久久黄| 欧美激情精品久久久久久大尺度| 欧美日韩在线亚洲一区蜜芽| 欧美一区二区三区日韩视频| 久久久久久久一区二区三区| 亚洲精品一级| 国产精品国产成人国产三级| 国产视频精品网| 国语精品一区| 在线综合亚洲| 亚洲一区二区成人在线观看| 欧美日韩精品是欧美日韩精品| 欧美一区二区在线视频| 久久米奇亚洲| 91久久精品美女高潮| 欧美精品在线一区二区三区| 欧美日韩1区2区3区| 91久久黄色| 亚洲免费综合| 国产色婷婷国产综合在线理论片a| 91久久夜色精品国产九色| 国产综合色精品一区二区三区| 亚洲免费观看高清在线观看| 亚洲已满18点击进入久久| 亚洲人成在线观看网站高清| 久久riav二区三区| 欧美另类人妖| 欧美久久99| 国产真实乱偷精品视频免| 欧美一区二区三区男人的天堂| 久久久久久亚洲精品不卡4k岛国| 西西裸体人体做爰大胆久久久| 美女精品视频一区| 激情婷婷欧美| 亚洲欧美精品在线| 久久一综合视频| 久久久精品动漫| 精品成人a区在线观看| 久久精品免视看| 欧美日韩在线观看一区二区三区| 伊人久久亚洲美女图片| 欧美亚洲三级| 国产一区清纯| 在线播放一区| 亚洲精品永久免费精品| 国产日韩一区在线| 日韩亚洲欧美一区二区三区| 欧美激情在线有限公司| 久久久av水蜜桃| 亚洲日本成人在线观看| 午夜精品久久久久久久久久久| 激情五月婷婷综合| 国产精品二区在线| 99在线|亚洲一区二区| 久久婷婷成人综合色| 亚洲天堂久久| 久久精品欧美| 欧美日韩在线一二三| 国产乱理伦片在线观看夜一区| 能在线观看的日韩av| 亚洲高清在线精品| 国产精品久久午夜| 亚洲国产成人久久综合一区| 亚洲视频中文| 久久精品亚洲国产奇米99| 欧美精品在线视频观看| 国产字幕视频一区二区| 免费久久99精品国产自| 欧美成人资源| 国产欧美精品日韩精品| 国产精品亚洲人在线观看| 国产日产欧产精品推荐色| 亚洲欧美中文日韩在线| 伊人精品成人久久综合软件| 欧美+日本+国产+在线a∨观看| 亚洲一区高清| 久久一区二区三区超碰国产精品| 99ri日韩精品视频| 免费精品99久久国产综合精品| 亚洲黄色免费网站| 国产婷婷一区二区| 亚洲欧洲日本国产| 亚洲福利在线观看| 怡红院精品视频| 亚洲国产精品一区二区www在线| 亚洲激情女人| 亚洲免费成人| 国产欧美精品在线观看|