2.承上,帶有上述設定的 MAC 地址的網卡稱為子接口(sub interface);而實體網卡則稱為父接口(parent interface)。
3.parent interface 可以是一個物理接口(eth0),可以是一個 802.1q 的子接口(eth0.10),也可以是 bonding 接口。
4.可在 parent/sub interface 上設定的不只是 MAC 地址,IP 地址同樣也可以被設定。
5.sub interface 無法直接與 parent interface 通訊 (帶有 sub interface 的 VM 或容器無法與 host 直接通訊)。
承上,若 VM 或容器需要與 host 通訊,那就必須額外建立一個 sub 6.interface 給 host 用。
7.sub interface 通常以 mac0@eth0 的形式來命名以方便區別。
用張圖來解釋一下設定 Macvlan 后的樣子:

4.實驗環境

docker01 docker02

192.168.1.11
192.168.1.13

關閉防火墻和禁用selinux,更改主機名

[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的單網絡通信

4.1 macvlan的單網絡通信

1) 打開網卡的混雜模式

//需要在docker01和docker02_上都進行操作。

[root@docker01 ~]# ip link show ens33
//查看網卡模式

[root@docker01 ~]# ip link set ens33 promisc on
//創建網卡模式為混雜模式
[root@docker01 ~]# ip link show ens33
//查看網卡模式

2)在docker01.上創建macvlan網絡

[root@docker01 ~]# docker network create -d macvlan --subnet 172.22.16.0/24 --gateway 172.22.16.1 -o parent=ens33 mac_net1
// 創建一個macvlan模式的網絡
-o parent=綁定在哪張網卡之上
[root@docker01 ~]# docker network ls
//查看網卡信息

3)基于創建的macvlan網絡運行一個容器

[root@docker01 ~]# docker run -itd --name bbox1 --ip 172.22.16.10 --network mac_net1 busybox

4)在docker02.上創建macvlan網絡(要和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. 上,基于創建的macvlan網絡運行一個容器,驗證與docker01.上容器的通信。

[root@docker02 ~]# docker run -itd --name bbox2 --network mac_net1 --ip 172.22.16.20 busybox
//基于busybox創建一個容器
[root@docker02 ~]# docker exec -it bbox2 /bin/sh
//進入bbox2容器
/ # ping 172.22.16.10
//ping一下docker01的主機

4.2macvlan的多網絡通信

1) docker01和docker02驗證內核模塊8021q封裝

macvlan需要解決的問題:基于真實的ens33網卡,生產新的虛擬網卡。

[root@docker01 ~]# modinfo 8021q
//驗證內核模塊8021q封裝

[root@docker01 ~]# modprobe 8021q
//如果內核模塊沒有開啟,運行上邊的命令導入一下

2)docker01基于ens33創建虛擬網卡

修改ens33網卡配置文件

[root@docker01 ~]# cd /etc/sysconfig/network-scripts/
[root@docker01 network-scripts]# vim ifcfg-ens33 

手動添加虛擬網卡配置文件

[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網卡配置文件
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網段做一個區分, 保證網關和網段IP的一致性,設備名稱和配置文件的-致性,并且打開VLAN支持模式。

創建第二個虛擬網卡配置文件

[root@docker01 network-scripts]# cp -p ifcfg-ens33.10 ifcfg-ens33.20
[root@docker01 network-scripts]# vim ifcfg-ens33.20
//修改ens33.20網卡配置文件
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上的操作,啟用創建的虛擬網卡:

[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創建虛擬網卡

修改ens33網卡配置文件

[root@docker02 ~]# cd /etc/sysconfig/network-scripts/
[root@docker02 network-scripts]# vim ifcfg-ens33 

手動添加虛擬網卡配置文件

[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網卡配置文件
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網段做一個區分, 保證網關和網段IP的一致性,設備名稱和配置文件的-致性,并且打開VLAN支持模式。

創建第二個虛擬網卡配置文件

[root@docker02 network-scripts]# cp -p ifcfg-ens33.10 ifcfg-ens33.20
[root@docker02 network-scripts]# vim ifcfg-ens33.20
//修改ens33.20網卡配置文件
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上的操作,啟用創建的虛擬網卡:

[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基于虛擬網卡,創建macvlan網絡

[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
//創建一個新的網卡基于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
//創建一個新的網卡基于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 
//把容器重命名一個標簽
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鏡像和網卡mac_net10,mac_net20,創建容器。
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內核封裝

基于ens33網卡創建新的虛擬網卡,ens33.10和ens33.20 (注意和docker01. 上的ens33.10和ens33.20必須是在同一-網段,且IP不能沖突)基于此網絡運行容器。(注意和docker01 上的容器,都是基于剛剛創建的macvlan網絡,但IP地址不能沖突)

7)驗證
在docker01.上進入容器bbox10和docker02.上的bbox11進行通信。
在docker01.上進入容器bbox20和docker02.上的bbox21進行通信。
注意: VMware的網絡必須設置為Bridge模式。

現在把docker01和docker02的網絡模式設置為橋接模式

測試一下相同網卡的主機是否能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 或容器通過二層連接到物理網絡的近乎理想的方案,但它也有一些局限性:

1.Linux 主機連接的交換機可能會限制同一個物理端口上的 MAC 地址數量。雖然你可以讓網絡管理員更改這些策略,但有時這種方法是無法實行的(比如你要去給客戶做一個快速的 PoC 演示)。
2.許多 NIC 也會對該物理網卡上的 MAC地址數量有限制。超過這個限制就會影響到系統的性能。
3.IEEE 802.11 不喜歡同一個客戶端上有多個 MAC 地址,這意味著你的 Macvlan 子接口在無線網卡或 AP 中都無法通信。可以通過復雜的辦法來突破這種限制,但還有一種更簡單的辦法,那就是使用 Ipvlan,感興趣可以自己查閱相關資料。

6.總結

macvlan是一種網卡虛擬化技術,能夠將一張網卡虛擬出多張網卡。

macvlan的特定通信模式,常用模式是bridge。

在Docker中,macvlan只支持bridge模式。

相同的macvlan可以通信,不同的macvlan二層無法通信,可以通過三層路由完成通信。

思考一下:

macvlan bridge和bridge的異同點
還有一種類似的技術,多張虛擬網卡共享相同MAC地址,但有獨立的IP地址,這是什么技術?

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持三五互聯

更多關于云服務器域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » Docker跨主機網絡(manual)的實現

登錄

找回密碼

注冊

主站蜘蛛池模板: 男女动态无遮挡动态图| 国产乱码1卡二卡3卡四卡5| 国产精品免费视频网站| 国产精品一码二码三码四码| 国产SUV精品一区二区四| 天堂V亚洲国产V第一次| 国产精品亚洲国际在线看| 亚洲无人区视频在线观看| 久久人体视频| 黄色大全免费看国产精品| 无码精品人妻一区二区三区中| 中文字幕乱码熟女人妻水蜜桃| 久久精品国产一区二区蜜芽| 人妻饥渴偷公乱中文字幕| 亚洲综合色在线视频WWW| 无码一区中文字幕| 国产精品性视频一区二区| 福利一区二区不卡国产| 国产热A欧美热A在线视频| 国产成人不卡一区二区| 亚洲欧美国产免费综合视频| 日韩熟妇| 人人妻人人澡人人爽不卡视频| ww污污污网站在线看com| 国产天美传媒性色av高清| 亚洲综合色成在线观看| 四虎库影成人在线播放| 国产蜜臀久久av一区二区| 国产一区二区亚洲一区二区三区| 国产成本人片无码免费| 国产精品日韩精品日韩| 狠狠色噜噜狠狠狠狠2021| 色吊丝二区三区中文写幕| 国产成人精品日本亚洲网站| 超清无码一区二区三区| 黑人大战中国av女叫惨了| 亚洲精品一区三区三区在| 九九热视频在线免费观看| 国产超碰无码最新上传| 亚洲欧美国产日韩天堂区| 亚洲色婷婷综合开心网|