精品免费在线观看-精品欧美-精品欧美成人bd高清在线观看-精品欧美高清不卡在线-精品欧美日韩一区二区

17站長網(wǎng)

17站長網(wǎng) 首頁 網(wǎng)站 服務器 查看內(nèi)容

詳解Docker跨主機網(wǎng)絡(manual)的實現(xiàn)

2022-10-17 09:13| 查看: 1468 |來源: 互聯(lián)網(wǎng)

1. Macvlan 簡介 在 Macvlan 出現(xiàn)之前,我們只能為一塊以太網(wǎng)卡添加多個 IP 地址,卻不能添加多個 MAC 地址,因為 MAC 地址正是通過其全球唯一性來標識一塊以太 ...

1. Macvlan 簡介

在 Macvlan 出現(xiàn)之前,我們只能為一塊以太網(wǎng)卡添加多個 IP 地址,卻不能添加多個 MAC 地址,因為 MAC 地址正是通過其全球唯一性來標識一塊以太網(wǎng)卡的,即便你使用了創(chuàng)建 ethx:y 這樣的方式,你會發(fā)現(xiàn)所有這些“網(wǎng)卡”的 MAC 地址和 ethx 都是一樣的,本質(zhì)上,它們還是一塊網(wǎng)卡,這將限制你做很多二層的操作。有了 Macvlan 技術,你可以這么做了。

Macvlan 允許你在主機的一個網(wǎng)絡接口上配置多個虛擬的網(wǎng)絡接口,這些網(wǎng)絡 interface 有自己獨立的 MAC 地址,也可以配置上 IP 地址進行通信。Macvlan 下的虛擬機或者容器網(wǎng)絡和主機在同一個網(wǎng)段中,共享同一個廣播域。Macvlan 和 Bridge 比較相似,但因為它省去了 Bridge 的存在,所以配置和調(diào)試起來比較簡單,而且效率也相對高。除此之外,Macvlan 自身也完美支持 VLAN。

同一 VLAN 間數(shù)據(jù)傳輸是通過二層互訪,即 MAC 地址實現(xiàn)的,不需要使用路由。不同 VLAN 的用戶單播默認不能直接通信,如果想要通信,還需要三層設備做路由,Macvlan 也是如此。用 Macvlan 技術虛擬出來的虛擬網(wǎng)卡,在邏輯上和物理網(wǎng)卡是對等的。物理網(wǎng)卡也就相當于一個交換機,記錄著對應的虛擬網(wǎng)卡和 MAC 地址,當物理網(wǎng)卡收到數(shù)據(jù)包后,會根據(jù)目的 MAC 地址判斷這個包屬于哪一個虛擬網(wǎng)卡。這也就意味著,只要是從 Macvlan 子接口發(fā)來的數(shù)據(jù)包(或者是發(fā)往 Macvlan 子接口的數(shù)據(jù)包),物理網(wǎng)卡只接收數(shù)據(jù)包,不處理數(shù)據(jù)包,所以這就引出了一個問題:本機 Macvlan 網(wǎng)卡上面的 IP 無法和物理網(wǎng)卡上面的 IP 通信!關于這個問題的解決方案我們下一節(jié)再討論。


簡單來說,Macvlan 虛擬網(wǎng)卡設備是寄生在物理網(wǎng)卡設備上的。發(fā)包時調(diào)用自己的發(fā)包函數(shù),查找到寄生的物理設備,然后通過物理設備發(fā)包。收包時,通過注冊寄生的物理設備的 rx_handler 回調(diào)函數(shù),處理數(shù)據(jù)包。

2.簡單介紹manual的流程

macvlan 就如它的名字一樣,是一種網(wǎng)卡虛擬化技術,它能夠?qū)⒁粋物理網(wǎng)卡虛擬出多個接口,每個接口都可以配置 MAC 地址,同樣每個接口也可以配自己的 IP,每個接口就像交換機的端口一樣,可以為它劃分 VLAN。

macvlan 的做法其實就是將這些虛擬出來的接口與 Docker 容器直連來達到通信的目的。一個 macvlan 網(wǎng)絡對應一個接口,不同的 macvlan 網(wǎng)絡分配不同的子網(wǎng),因此,相同的 macvlan 之間可以互相通信,不同的 macvlan 網(wǎng)絡之間在二層上不能通信,需要借助三層的路由器才能完成通信,如下,顯示的就是兩個不同的 macvlan 網(wǎng)絡之間的通信流程。


我們用一個 Linux 主機,通過配置其路由表和 iptables,將其配成一個路由器(當然是虛擬的),就可以完成不同 macvlan 網(wǎng)絡之間的數(shù)據(jù)交換,當然用物理路由器也是沒毛病的。

3.Macvlan 的特點:

1.可讓使用者在同一張實體網(wǎng)卡上設定多個 MAC 地址。
2.承上,帶有上述設定的 MAC 地址的網(wǎng)卡稱為子接口(sub interface);而實體網(wǎng)卡則稱為父接口(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 的形式來命名以方便區(qū)別。
用張圖來解釋一下設定 Macvlan 后的樣子:

4.實驗環(huán)境


docker01docker02
192.168.1.11192.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的單網(wǎng)絡通信

4.1 macvlan的單網(wǎng)絡通信


1) 打開網(wǎng)卡的混雜模式

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

[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)絡

[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)絡
-o parent=綁定在哪張網(wǎng)卡之上
[root@docker01 ~]# docker network ls
//查看網(wǎng)卡信息

3)基于創(chuàng)建的macvlan網(wǎng)絡運行一個容器

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

4)在docker02.上創(chuàng)建macvlan網(wǎng)絡(要和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)絡運行一個容器,驗證與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
//進入bbox2容器
/ # ping 172.22.16.10
//ping一下docker01的主機

4.2macvlan的多網(wǎng)絡通信

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)核模塊沒有開啟,運行上邊的命令導入一下

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)關和網(wǎng)段IP的一致性,設備名稱和配置文件的-致性,并且打開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)關和網(wǎng)段IP的一致性,設備名稱和配置文件的-致性,并且打開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)絡

[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 
//把容器重命名一個標簽
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**[/code]


[code]
[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)絡運行容器。(注意和docker01 上的容器,都是基于剛剛創(chuàng)建的macvlan網(wǎng)絡,但IP地址不能沖突)

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

現(xiàn)在把docker01和docker02的網(wǎng)絡模式設置為橋接模式


測試一下相同網(wǎng)卡的主機是否能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)絡的近乎理想的方案,但它也有一些局限性:

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

6.總結

macvlan是一種網(wǎng)卡虛擬化技術,能夠?qū)⒁粡埦W(wǎng)卡虛擬出多張網(wǎng)卡。

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

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

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

思考一下:

macvlan bridge和bridge的異同點
還有一種類似的技術,多張?zhí)摂M網(wǎng)卡共享相同MAC地址,但有獨立的IP地址,這是什么技術?

以上所述是小編給大家介紹的詳解Docker跨主機網(wǎng)絡(manual)的實現(xiàn),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對17站長網(wǎng)的支持!

本文最后更新于 2022-10-17 09:13,某些文章具有時效性,若有錯誤或已失效,請在網(wǎng)站留言或聯(lián)系站長:17tui@17tui.com
·END·
站長網(wǎng)微信號:w17tui,關注站長、創(chuàng)業(yè)、關注互聯(lián)網(wǎng)人 - 互聯(lián)網(wǎng)創(chuàng)業(yè)者營銷服務中心

免責聲明:本站部分文章和圖片均來自用戶投稿和網(wǎng)絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業(yè)用途,如果損害了您的權利,請聯(lián)系我們及時修正或刪除。謝謝!

17站長網(wǎng)微信二維碼

始終以前瞻性的眼光聚焦站長、創(chuàng)業(yè)、互聯(lián)網(wǎng)等領域,為您提供最新最全的互聯(lián)網(wǎng)資訊,幫助站長轉(zhuǎn)型升級,為互聯(lián)網(wǎng)創(chuàng)業(yè)者提供更加優(yōu)質(zhì)的創(chuàng)業(yè)信息和品牌營銷服務,與站長一起進步!讓互聯(lián)網(wǎng)創(chuàng)業(yè)者不再孤獨!

掃一掃,關注站長網(wǎng)微信

大家都在看

熱門排行

    最近更新

      返回頂部
      主站蜘蛛池模板: 亚洲欧美日韩国产专区一区 | 九九精品国产兔费观看久久 | 国内精品免费视频自在线 | 国产精品第一页在线观看 | 欧美精品啪啪 | 国产秒拍福利视频露脸 | 久久精品国产99国产精品免费看 | 国产激情自拍视频 | 成人au免费视频影院 | 国产高清视频在线播放www色 | 一区二区在线视频 | 啪啪小视频网站 | 成年男女男免费视频网站不卡 | 色婷婷综合久久久 | 久久精品国产99国产精品澳门 | 国产成人综合洲欧美在线 | 免费的黄色网址 | 香蕉依依精品视频在线播放 | 欧美v亚洲| 国产永久视频 | 国产欧美综合在线 | 欧洲亚洲欧美国产日本高清 | 国产主播福利精品一区二区 | 9丨精品国产高清自在线看 9久9久女女免费精品视频在线观看 | 国产精品99久久久久久夜夜嗨 | 欧美国产人妖另类色视频 | 成人免费福利视频在线观看 | 午夜男男xx00视频免费 | 伊人久久综合网站 | 午夜影院性 | 在线精品日韩一区二区三区 | 精品成人免费播放国产片 | 高清欧美一区二区免费影视 | 二区视频| 黄色欧美视频 | 国产精品免费视频一区二区 | 成人精品视频 成人影院 | 色男人天堂 | 极品毛片 | 亚洲国产人久久久成人精品网站 | 我想看黄色毛片 |