日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Kubernetes利用CNI-bridge插件打通网络

發(fā)布時(shí)間:2024/1/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kubernetes利用CNI-bridge插件打通网络 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用CNI插件時(shí),需要如下配置

1、將需要用到的cni組件(二進(jìn)制可執(zhí)行文件)放到/opt/cni/bin目錄下

2、在/etc/cni/net.d中增加cni的配置文件,配置文件中可以指定需要使用的cni組件及參數(shù)

3、kubelet啟動(dòng)參數(shù)中networkPlugin設(shè)置為cni

4、創(chuàng)建網(wǎng)橋

5、添加本機(jī)網(wǎng)絡(luò)端口到網(wǎng)橋中

具體操作流程:

1、下載CNI插件

https://github.com/containernetworking/cni

2、構(gòu)建cni組件
cd $GOPATH/src/github.com/containernetworking/plugins ./build_linux.sh
3、將第2步生成的cni組件放到/opt/cni/bin目錄下
4、在/etc/cni/net.d中增加cni的配置文件
mkdir -p /etc/cni/net.dcat >/etc/cni/net.d/10-mynet.conf <<EOF {"cniVersion": "0.3.1","name": "mynet","plugins": [{"name": "mynet","type": "bridge","bridge": "cni0","isGateway": true, "ipam": {"type": "host-local","subnet": "192.168.204.2/24","rangeStart": "192.168.204.0","rangeEnd": "192.168.204.254","routes": [{ "dst": "0.0.0.0/0" }]}}] } EOF
5、kubelet啟動(dòng)參數(shù)中networkPlugin設(shè)置為cni
--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin
6、創(chuàng)建bridge網(wǎng)橋和添加添加本機(jī)網(wǎng)絡(luò)端口到網(wǎng)橋中
[root@node1 ~]# cat /etc/rc.local #!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to create own systemd services or udev rules # to run scripts during boot instead of using this file. # # In contrast to previous versions due to parallel execution during boot # this script will NOT be run after all other services. # # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure # that this script will be executed during boot.touch /var/lock/subsys/local/usr/sbin/ip link add cni0 type bridge//添加網(wǎng)橋 /usr/sbin/ip link set ens33 master cni0// /usr/sbin/ifconfig ens33 192.168.204.143/24//主機(jī)網(wǎng)卡恢復(fù)IP /usr/sbin/ifconfig cni0 192.168.204.3/24//給網(wǎng)橋設(shè)置IP

/usr/sbin/ip link add cni0 type bridge:創(chuàng)建網(wǎng)橋

Ip link set ens33 master cni0: 添加添加本機(jī)網(wǎng)絡(luò)端口到網(wǎng)橋中

1-4步將bridge搭建好了,但本機(jī)網(wǎng)卡eth0與bridge網(wǎng)橋是還沒(méi)有建立通信的。也就是說(shuō)外界還是無(wú)法訪問(wèn)通過(guò)bridge創(chuàng)建的容器。

所以當(dāng)eth0加入bridge之后,從外面網(wǎng)絡(luò)收到的數(shù)據(jù)包將無(wú)條件的轉(zhuǎn)發(fā)給bridge,自己變成了一根網(wǎng)線。就可以訪問(wèn)通過(guò)bridge創(chuàng)建的容器了。

bridge不區(qū)分接入進(jìn)來(lái)的是物理設(shè)備還是虛擬設(shè)備,對(duì)它來(lái)說(shuō)都一樣的,都是網(wǎng)絡(luò)設(shè)備。

ens33是本機(jī)網(wǎng)卡名稱,不同主機(jī)名稱會(huì)不同,ens33對(duì)應(yīng)下圖的eth0,cni0對(duì)應(yīng)bridge

驗(yàn)證:

192.168.204.189是pod的ip

[root@master1 ~]# curl 192.168.204.189 <h1>This request was processed by host: first-deployment-5bc5c8cd58-p2kqk</h1>

拓展:

CNI-bridge方式示意圖:

![未命名文件 (4)](/Users/tcy/Documents/Typora/Picture/未命名文件 (4).png)

使用新建的bridge網(wǎng)橋代替docker0網(wǎng)橋(docker0也可以繼續(xù)保留,常規(guī)容器還是用docker0,而需要互通的容器可以借助于這個(gè)工具給docker容器新建虛擬網(wǎng)卡并綁定IP橋接到bridge)

bridge和主機(jī)eth0之間是也是利用veth pair這個(gè)技術(shù):

https://blog.csdn.net/sld880311/article/details/77650937

https://segmentfault.com/a/1190000009491002#articleHeader6

查看網(wǎng)橋:

[root@node1 ~]# brctl show bridge name bridge id STP enabled interfaces cni0 8000.000c294220a7 no ens33veth1b8fe73aveth31fc4222veth5ed676bcvethf0b15c0b docker0 8000.0242814c9fe7 no

查看路由:

[root@node1 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.204.2 0.0.0.0 UG 0 0 0 cni0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 192.168.204.0 0.0.0.0 255.255.255.0 U 0 0 0 cni0

查看網(wǎng)卡:

[root@node1 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master cni0 state UP qlen 1000link/ether 00:0c:29:42:20:a7 brd ff:ff:ff:ff:ff:ffinet 192.168.204.143/24 brd 192.168.204.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::7c8e:9fcd:f1c1:f52b/64 scope link valid_lft forever preferred_lft forever 3: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000link/ether 00:0c:29:42:20:a7 brd ff:ff:ff:ff:ff:ffinet 192.168.204.3/24 brd 192.168.204.255 scope global cni0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe42:20a7/64 scope link valid_lft forever preferred_lft forever 4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN link/ether 02:42:81:4c:9f:e7 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft forever

創(chuàng)建刪除容器時(shí),Bridge工作流程:

創(chuàng)建容器:

1)brdige組件創(chuàng)建一個(gè)指定名字的網(wǎng)橋,如果網(wǎng)橋已經(jīng)存在,就使用已有的網(wǎng)橋;

2)創(chuàng)建vethpair,將node端的veth設(shè)備連接到網(wǎng)橋上;

3)從ipam獲取一個(gè)給容器使用的ip數(shù)據(jù),并根據(jù)返回的數(shù)據(jù)計(jì)算出容器對(duì)應(yīng)的網(wǎng)關(guān);

4)進(jìn)入容器網(wǎng)絡(luò)名字空間,修改容器中網(wǎng)卡名和網(wǎng)卡ip,以及配置路由,并進(jìn)行arp廣播(注意我們只為vethpair的容器端配置ip,node端是沒(méi)有ip的);

5)如果IsGW=true,將網(wǎng)橋配置為網(wǎng)關(guān),具體方法是:將第三步計(jì)算得到的網(wǎng)關(guān)IP配置到網(wǎng)橋上,同時(shí)根據(jù)需要將網(wǎng)橋上其他ip刪除。最后開(kāi)啟網(wǎng)橋的ip_forward內(nèi)核參數(shù);

6)如果IPMasq=true,使用iptables增加容器私有網(wǎng)網(wǎng)段到外部網(wǎng)段的masquerade規(guī)則,這樣容器內(nèi)部訪問(wèn)外部網(wǎng)絡(luò)時(shí)會(huì)進(jìn)行snat,在很多情況下配置了這條路由后容器內(nèi)部才能訪問(wèn)外網(wǎng)。(這里代碼中會(huì)做exist檢查,防止生成重復(fù)的iptables規(guī)則);

7)配置結(jié)束,整理當(dāng)前網(wǎng)橋的信息,并返回給調(diào)用者。DEL命令

刪除容器:

1)根據(jù)命令執(zhí)行的參數(shù),確認(rèn)要?jiǎng)h除的容器ip,調(diào)用ipam的del命令,將IP還回IP pool;

2)進(jìn)入容器的網(wǎng)絡(luò)名字空間,根據(jù)容器IP將對(duì)應(yīng)的網(wǎng)卡刪除;

3)如果IPMasq=true,在node上刪除創(chuàng)建網(wǎng)絡(luò)時(shí)配置的幾條iptables規(guī)則。

總結(jié)

以上是生活随笔為你收集整理的Kubernetes利用CNI-bridge插件打通网络的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。