docker01 | docker02 |
---|---|
192.168.1.11 | 192.168.1.13 |
關(guān)閉防火墻和禁用selinux,更改主機(jī)名
[root@localhost ~]# hostnamectl set-hostname docker01 [root@localhost ~]# su - 上一次登錄:二 12月 17 08:20:36 CST 2019從 192.168.1.1pts/0 上 [root@docker01 ~]# systemctl stop firealld Failed to stop firealld.service: Unit firealld.service not loaded. [root@docker01 ~]# setenforce 0 setenforce: SELinux is disabled [root@docker01 ~]# systemctl daemon-reload [root@docker01 ~]# systemctl restart docker 4.1 macvlan的單網(wǎng)絡(luò)通信
4.1 macvlan的單網(wǎng)絡(luò)通信
1) 打開網(wǎng)卡的混雜模式
//需要在docker01和docker02_上都進(jìn)行操作。 [root@docker01 ~]# ip link show ens33 //查看網(wǎng)卡模式
[root@docker01 ~]# ip link set ens33 promisc on //創(chuàng)建網(wǎng)卡模式為混雜模式 [root@docker01 ~]# ip link show ens33 //查看網(wǎng)卡模式
2)在docker01.上創(chuàng)建macvlan網(wǎng)絡(luò)
[root@docker01 ~]# docker network create -d macvlan --subnet 172.22.16.0/24 --gateway 172.22.16.1 -o parent=ens33 mac_net1 // 創(chuàng)建一個macvlan模式的網(wǎng)絡(luò) -o parent=綁定在哪張網(wǎng)卡之上 [root@docker01 ~]# docker network ls //查看網(wǎng)卡信息
3)基于創(chuàng)建的macvlan網(wǎng)絡(luò)運(yùn)行一個容器
[root@docker01 ~]# docker run -itd --name bbox1 --ip 172.22.16.10 --network mac_net1 busybox
4)在docker02.上創(chuàng)建macvlan網(wǎng)絡(luò)(要和docker01的macvlan一模一樣)
[root@docker02 ~]# docker network create -d macvlan --subnet 172.22.16.0/24 --gateway 172.22.16.1 -o parent=ens33 mac_net1 [root@docker02 ~]# docker network ls
5)在docker02. 上,基于創(chuàng)建的macvlan網(wǎng)絡(luò)運(yùn)行一個容器,驗證與docker01.上容器的通信。
[root@docker02 ~]# docker run -itd --name bbox2 --network mac_net1 --ip 172.22.16.20 busybox //基于busybox創(chuàng)建一個容器 [root@docker02 ~]# docker exec -it bbox2 /bin/sh //進(jìn)入bbox2容器 / # ping 172.22.16.10 //ping一下docker01的主機(jī)
4.2macvlan的多網(wǎng)絡(luò)通信
1) docker01和docker02驗證內(nèi)核模塊8021q封裝
macvlan需要解決的問題:基于真實的ens33網(wǎng)卡,生產(chǎn)新的虛擬網(wǎng)卡。
[root@docker01 ~]# modinfo 8021q //驗證內(nèi)核模塊8021q封裝
[root@docker01 ~]# modprobe 8021q //如果內(nèi)核模塊沒有開啟,運(yùn)行上邊的命令導(dǎo)入一下
2)docker01基于ens33創(chuàng)建虛擬網(wǎng)卡
修改ens33網(wǎng)卡配置文件
[root@docker01 ~]# cd /etc/sysconfig/network-scripts/ [root@docker01 network-scripts]# vim ifcfg-ens33
手動添加虛擬網(wǎng)卡配置文件
[root@docker01 ~]# cd /etc/sysconfig/network-scripts/ [root@docker01 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33.10 //-p保留源文件或目錄的屬性 [root@docker01 network-scripts]# vim ifcfg-ens33.10 //修改ens33.10網(wǎng)卡配置文件 BOOTPROTO=none NAME=ens33.10 DEVICE=ens33.10 ONBOOT=yes IPADDR=192.168.10.10 PREFIX=24 GATEWAY=192.168.10.2 VLAN=yes
這里注意,IP要和ens33網(wǎng)段做一個區(qū)分, 保證網(wǎng)關(guān)和網(wǎng)段IP的一致性,設(shè)備名稱和配置文件的-致性,并且打開VLAN支持模式。
創(chuàng)建第二個虛擬網(wǎng)卡配置文件
[root@docker01 network-scripts]# cp -p ifcfg-ens33.10 ifcfg-ens33.20 [root@docker01 network-scripts]# vim ifcfg-ens33.20 //修改ens33.20網(wǎng)卡配置文件 BOOTPROTO=none NAME=ens33.20 DEVICE=ens33.20 ONBOOT=yes IPADDR=192.168.20.20 PREFIX=24 GATEWAY=192.168.20.2 VLAN=yes
docker01上的操作,啟用創(chuàng)建的虛擬網(wǎng)卡:
[root@docker01 network-scripts]# ifup ifcfg-ens33.10 [root@docker01 network-scripts]# ifup ifcfg-ens33.20 [root@docker01 network-scripts]# ifconfig //查看IP
3)docker02基于ens33創(chuàng)建虛擬網(wǎng)卡
修改ens33網(wǎng)卡配置文件
[root@docker02 ~]# cd /etc/sysconfig/network-scripts/ [root@docker02 network-scripts]# vim ifcfg-ens33
手動添加虛擬網(wǎng)卡配置文件
[root@docker02 ~]# cd /etc/sysconfig/network-scripts/ [root@docker02 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33.10 //-p保留源文件或目錄的屬性 [root@docker02 network-scripts]# vim ifcfg-ens33.10 //修改ens33.10網(wǎng)卡配置文件 BOOTPROTO=none NAME=ens33.10 DEVICE=ens33.10 ONBOOT=yes IPADDR=192.168.10.11 PREFIX=24 GATEWAY=192.168.10.2 VLAN=yes
這里注意,IP要和ens33網(wǎng)段做一個區(qū)分, 保證網(wǎng)關(guān)和網(wǎng)段IP的一致性,設(shè)備名稱和配置文件的-致性,并且打開VLAN支持模式。
創(chuàng)建第二個虛擬網(wǎng)卡配置文件
[root@docker02 network-scripts]# cp -p ifcfg-ens33.10 ifcfg-ens33.20 [root@docker02 network-scripts]# vim ifcfg-ens33.20 //修改ens33.20網(wǎng)卡配置文件 BOOTPROTO=none NAME=ens33.20 DEVICE=ens33.20 ONBOOT=yes IPADDR=192.168.20.21 PREFIX=24 GATEWAY=192.168.20.2 VLAN=yes
docker02上的操作,啟用創(chuàng)建的虛擬網(wǎng)卡:
[root@docker02 network-scripts]# systemctl restart network [root@docker02 network-scripts]# ifup ifcfg-ens33.10 [root@docker02 network-scripts]# ifup ifcfg-ens33.20 [root@docker02 network-scripts]# ifconfig //查看IP
4)docekr01和docker02基于虛擬網(wǎng)卡,創(chuàng)建macvlan網(wǎng)絡(luò)
[root@docker02 network-scripts]# docker network create -d macvlan --subnet 172.16.10.0/24 --gateway 172.16.10.1 -o parent=ens33.10 mac_net10 //創(chuàng)建一個新的網(wǎng)卡基于ens33.10 [root@docker02 network-scripts]# docker network create -d macvlan --subnet 172.16.20.0/24 --gateway 172.16.20.1 -o parent=ens33.20 mac_net20 //創(chuàng)建一個新的網(wǎng)卡基于ens33.20
5)Docker01部署一個私有倉庫
Docker01
docker pull registry //下載registry鏡像 docker run -itd --name registry -p 5000:5000 --restart=always registry:latest //基于registry鏡像,啟動一臺容器 docker tag busybox:latest 192.168.1.11:5000/busybox:v1 //把容器重命名一個標(biāo)簽 docker ps
vim /usr/lib/systemd/system/docker.service #13行修改 ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.11:5000 systemctl daemon-reload systemctl restart docker.service //重啟docker docker push 192.168.1.11:5000/busybox:v1 //上傳容器到私有倉庫 docker images
Docker02
vim /usr/lib/systemd/system/docker.service #13行修改 ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.11:5000 systemctl daemon-reload systemctl restart docker.service //重啟docker docker pull 192.168.1.11/busybox:v1 //下載剛剛上傳的鏡像
6)docker01和docker02基于busybox:v1鏡像和網(wǎng)卡mac_net10,mac_net20,創(chuàng)建容器。
Docker01
[root@docker01 ~]# docker run -itd --name bbox10 --network mac_net10 --ip 172.16.10.10 192.168.1.11:5000/busybox:v1 [root@docker01 ~]# docker run -itd --name bbox20 --network mac_net20 --ip 172.16.20.20 192.168.1.11:5000/busybox:v1 **Docker02**
[root@docker02 ~]# docker run -itd --name bbox10 --network mac_net10 --ip 172.16.10.10 192.168.1.11:5000/busybox:v1 [root@docker02 ~]# docker run -itd --name bbox20 --network mac_net20 --ip 172.16.20.20 192.168.1.11:5000/busybox:v1
***這里只需注意,我們在這里的操作跟在docker01和上面的操作是一模一樣的,操作順序大致為:
驗證8021q內(nèi)核封裝
基于ens33網(wǎng)卡創(chuàng)建新的虛擬網(wǎng)卡,ens33.10和ens33.20 (注意和docker01. 上的ens33.10和ens33.20必須是在同一-網(wǎng)段,且IP不能沖突)基于此網(wǎng)絡(luò)運(yùn)行容器。(注意和docker01 上的容器,都是基于剛剛創(chuàng)建的macvlan網(wǎng)絡(luò),但I(xiàn)P地址不能沖突)
7)驗證
在docker01.上進(jìn)入容器bbox10和docker02.上的bbox11進(jìn)行通信。
在docker01.上進(jìn)入容器bbox20和docker02.上的bbox21進(jìn)行通信。
注意: VMware的網(wǎng)絡(luò)必須設(shè)置為Bridge模式。
現(xiàn)在把docker01和docker02的網(wǎng)絡(luò)模式設(shè)置為橋接模式
測試一下相同網(wǎng)卡的主機(jī)是否能ping通
[root@docker01 ~]# docker exec -it bbox10 /bin/sh / # ping 172.16.20.20
[root@docker02 ~]# docker exec -it bbox20 /bin/sh / # ping 172.16.20.20
5.Macvlan 的局限性
Macvlan 是將 VM 或容器通過二層連接到物理網(wǎng)絡(luò)的近乎理想的方案,但它也有一些局限性:
1.Linux 主機(jī)連接的交換機(jī)可能會限制同一個物理端口上的 MAC 地址數(shù)量。雖然你可以讓網(wǎng)絡(luò)管理員更改這些策略,但有時這種方法是無法實行的(比如你要去給客戶做一個快速的 PoC 演示)。
2.許多 NIC 也會對該物理網(wǎng)卡上的 MAC地址數(shù)量有限制。超過這個限制就會影響到系統(tǒng)的性能。
3.IEEE 802.11 不喜歡同一個客戶端上有多個 MAC 地址,這意味著你的 Macvlan 子接口在無線網(wǎng)卡或 AP 中都無法通信??梢酝ㄟ^復(fù)雜的辦法來突破這種限制,但還有一種更簡單的辦法,那就是使用 Ipvlan,感興趣可以自己查閱相關(guān)資料。
6.總結(jié)
macvlan是一種網(wǎng)卡虛擬化技術(shù),能夠?qū)⒁粡埦W(wǎng)卡虛擬出多張網(wǎng)卡。
macvlan的特定通信模式,常用模式是bridge。
在Docker中,macvlan只支持bridge模式。
相同的macvlan可以通信,不同的macvlan二層無法通信,可以通過三層路由完成通信。
思考一下:
macvlan bridge和bridge的異同點(diǎn)
還有一種類似的技術(shù),多張?zhí)摂M網(wǎng)卡共享相同MAC地址,但有獨(dú)立的IP地址,這是什么技術(shù)?
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
標(biāo)簽:延安 賀州 丹東 滄州 資陽 亳州 混顯 三沙
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Docker跨主機(jī)網(wǎng)絡(luò)(manual)的實現(xiàn)》,本文關(guān)鍵詞 Docker,跨,主機(jī),網(wǎng)絡(luò),manual,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。