1. Macvlan 簡介 在 Macvlan 出現之前,我們只能為一塊以太網卡添加多個 IP 地址,卻不能添加多個 MAC 地址,因為 MAC 地址正是通過其全球唯一性來標識一塊以太網卡的,即便你使用了創建 ethx:y 這樣的方式,你會發現所有這些“網卡”的 MAC 地址和 ethx 都是一樣的,本質上,它們還是一塊網卡,這將限制你做很多二層的操作。有了 Macvlan 技術,你可以這么做了。 Macvlan 允許你在主機的一個網絡接口上配置多個虛擬的網絡接口,這些網絡 interface 有自己獨立的 MAC 地址,也可以配置上 IP 地址進行通信。Macvlan 下的虛擬機或者容器網絡和主機在同一個網段中,共享同一個廣播域。Macvlan 和 Bridge 比較相似,但因為它省去了 Bridge 的存在,所以配置和調試起來比較簡單,而且效率也相對高。除此之外,Macvlan 自身也完美支持 VLAN。 同一 VLAN 間數據傳輸是通過二層互訪,即 MAC 地址實現的,不需要使用路由。不同 VLAN 的用戶單播默認不能直接通信,如果想要通信,還需要三層設備做路由,Macvlan 也是如此。用 Macvlan 技術虛擬出來的虛擬網卡,在邏輯上和物理網卡是對等的。物理網卡也就相當于一個交換機,記錄著對應的虛擬網卡和 MAC 地址,當物理網卡收到數據包后,會根據目的 MAC 地址判斷這個包屬于哪一個虛擬網卡。這也就意味著,只要是從 Macvlan 子接口發來的數據包(或者是發往 Macvlan 子接口的數據包),物理網卡只接收數據包,不處理數據包,所以這就引出了一個問題:本機 Macvlan 網卡上面的 IP 無法和物理網卡上面的 IP 通信!關于這個問題的解決方案我們下一節再討論。 簡單來說,Macvlan 虛擬網卡設備是寄生在物理網卡設備上的。發包時調用自己的發包函數,查找到寄生的物理設備,然后通過物理設備發包。收包時,通過注冊寄生的物理設備的 rx_handler 回調函數,處理數據包。 2.簡單介紹manual的流程 macvlan 就如它的名字一樣,是一種網卡虛擬化技術,它能夠將一個物理網卡虛擬出多個接口,每個接口都可以配置 MAC 地址,同樣每個接口也可以配自己的 IP,每個接口就像交換機的端口一樣,可以為它劃分 VLAN。 macvlan 的做法其實就是將這些虛擬出來的接口與 Docker 容器直連來達到通信的目的。一個 macvlan 網絡對應一個接口,不同的 macvlan 網絡分配不同的子網,因此,相同的 macvlan 之間可以互相通信,不同的 macvlan 網絡之間在二層上不能通信,需要借助三層的路由器才能完成通信,如下,顯示的就是兩個不同的 macvlan 網絡之間的通信流程。 我們用一個 Linux 主機,通過配置其路由表和 iptables,將其配成一個路由器(當然是虛擬的),就可以完成不同 macvlan 網絡之間的數據交換,當然用物理路由器也是沒毛病的。 3.Macvlan 的特點: 1.可讓使用者在同一張實體網卡上設定多個 MAC 地址。 4.實驗環境
關閉防火墻和禁用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部署一個私有倉庫 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,創建容器。 [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和上面的操作是一模一樣的,操作順序大致為: 基于ens33網卡創建新的虛擬網卡,ens33.10和ens33.20 (注意和docker01. 上的ens33.10和ens33.20必須是在同一-網段,且IP不能沖突)基于此網絡運行容器。(注意和docker01 上的容器,都是基于剛剛創建的macvlan網絡,但IP地址不能沖突) 7)驗證 測試一下相同網卡的主機是否能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 演示)。 6.總結 macvlan是一種網卡虛擬化技術,能夠將一張網卡虛擬出多張網卡。 macvlan的特定通信模式,常用模式是bridge。 在Docker中,macvlan只支持bridge模式。 相同的macvlan可以通信,不同的macvlan二層無法通信,可以通過三層路由完成通信。 思考一下: macvlan bridge和bridge的異同點 以上所述是小編給大家介紹的詳解Docker跨主機網絡(manual)的實現,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對17站長網的支持! |
免責聲明:本站部分文章和圖片均來自用戶投稿和網絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業用途,如果損害了您的權利,請聯系我們及時修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長、創業、互聯網等領域,為您提供最新最全的互聯網資訊,幫助站長轉型升級,為互聯網創業者提供更加優質的創業信息和品牌營銷服務,與站長一起進步!讓互聯網創業者不再孤獨!
掃一掃,關注站長網微信
當我們在共享網絡訪問的時候,可能會遇到提示指定的網絡名不再可用的問題,這可能是由于我們的共享網絡出現了錯誤,也可能是被共享的對象所拒絕了。指定的網絡名 ......
文/曹楊 原標題:誰還看電視? 爸爸戴一副老花鏡,媽媽戴一副近視鏡,一人坐在沙發,一人躺在床上,各自刷著自己關注的博主更新的短視頻。電視也許開著,但只是背景。 這樣的畫面,幾乎成了洛奇家的常 ...
1、首先進入到“百度”軟件中, 2、然后在其中輸入“百度識圖”, 3、之后點擊圖中的“開始使用”按鈕, 4、緊接著點擊右下角的“相冊”功能, 5、在相冊下 ......
圖片來源于簡書 文/郭開森 楊帆 陸玖財經準備開新欄目了,每周一創始人郭開森和楊帆合體郭德帆,對行業進行一些觀察和評論,第一篇我們仍是打算寫社區團購,這是當下最火的話題。 來過陸玖財經做客的朋友們...
一、軟件沖突1、首先確認是否是應用程序沖突導致的。2、查看是否只有特定幾個游戲或應用會導致該問題。3、如果是應用沖突,那么只要卸載這些app就可以解決了。二 ......
電腦端:1、大家可以點擊右邊鏈接進入網頁版的百度網盤,進入之后點擊“去登錄”。https://pan.baidu.com/2、之后正確的輸入賬號密碼進行登錄就好啦。手機端:1 ......
一、N100對比intel i3 1、N100的跑分達到了147210分,這個數據可以達到i3的七代級別。 2、在跑分上也是超越了大部分的I3七代CPU,不過比I3八代要弱勢一些。 3 ......
8月15日消息 上周,有媒體報道前身為百度圖片的“榴蓮”APP含有大量不雅視頻內容被用戶舉報。對此,百度圖片官方進行了回應,百度圖片表示已經對報道中所涉及的“生吃旋風哥”等爭議內容進行了下線處理。 此外,百度...
在填寫一些項目申請書中,總是免不了要選擇一些數字,但是在方框中如何插入數字,該怎么辦呢?那么下面就由學習啦小編給大家分享下word在方框里輸入數字的技巧, ......
WPS Office手機版怎么加橫線?很多用戶還不知道WPS Office手機版怎么加橫線,WPS Office手機版怎么加橫線,WPS Office手機版怎么打橫線,WPS Office手機版怎么弄 ......
迅雷前綴是什么 答:迅雷前綴是(magnet:?xt=urn:btih:)括號里的就是了。 我們只要在這段文字之后輸入后續的內容,就可以創建下載鏈接了。 1、磁力鏈接不基于文 ......
一、內容特權。 1、半價點播。 許多站內視頻都需要付費觀看,而大會員用戶可以直接半價享受; 購買成功后的48h內無限次觀看。有部分的內容是只限在中國大陸內觀 ......
1、首先打開小米運動的“實驗室功能”。 2、接著點擊“門卡模擬”。 3、然后點擊“我知道了”。 4、最后貼近就可以刷卡成功了。...
答:華為P系列: 華為p40,華為p40plus,華為p50,華為p50e,華為p60 華為mate系列: 華為mate40,華為mate50,華為mate50e,華為mate60 華為nova系列: 華為n ......
近期有用戶反映,電腦在更新Windows 11 Insider Preview 25252.1000后,出現了應用和已壓縮的文件點擊毫無反應,拖拽都不行,只能從開始菜單打開的情況,這是怎 ......
可見單元格就是不包括隱藏或者篩選篩選后隱藏起來的單元格區域。方法:篩選或隱藏數據,復制需要粘貼的值,在目標單元格區域左上角的第一個單元格處右擊,選擇【 ......
答:驍龍8+更好。 驍龍7+gen2實際上就是驍龍8+的低配版本。 在一些其他的核心架構方面都是保持一致的,比如說CPU的架構、GPU的架構等等。 驍龍7+和驍龍8+具體 ......
文/黎明 一場針對中國互聯網巨頭的反壟斷風暴正在醞釀,而且這次動真格了。 11月10日,國家市場監管總局發布《關于平臺經濟領域的反壟斷指南(征求意見稿)》,要加大對互聯網巨頭涉嫌壟斷的調查和監管。 ...
win11系統如何釋放掉系統默認保留的存儲空間?一般情況下,Windows會保留一些存儲空間,以便設備獲得良好性能和成功更新。但是當出現系統盤儲存空間不足時,我們會將幾個G的保留空間釋放出來,以解燃眉之急。本期教...
文件被win10系統誤報病毒自動刪除了如何進行恢復?有用戶下載了某些破解軟件卻被Win10系統誤認為是病毒文件而自動刪除,當然系統自帶殺毒軟件其實挺不錯的,就是有時候會誤報,大家遇到這種情況的時候就希望把誤刪的...
1、先打開機頂盒進入主界面,并且使用遙控器打開設置。 2、然后選擇“賬號與安全”,并且進入。 3、最后往下面翻就可以看到“ADB調試”的選項,直接開啟就行了 ......
羅技g304dpi燈顏色代表什么:1、藍色:這種情況是正常工作的顯示,如果說是常亮或者閃爍,那都沒有問題這是在正常工作呢。2、紅色:如果說是紅燈閃爍的話那就是 ......
答:在3DMark壓力測試當中,顯卡需要超高97%才能夠算合格,證明顯卡的穩定性是過關的。 1、一般的默認情況下在2500~3000分就算很正常的了。 2、分數越高說明顯卡 ......
win11系統快速跳過聯網創建本地管理賬戶3種方法?現在市面上銷售的品牌筆記本和臺式機基本上都預裝Windows11家庭中文版正版操作系統,聯網后系統會自動激活。當用戶拿到新機器后還需要按照cortana(小娜)的提示一步...
我們經常用WPS的時候,如果需要輸入波浪號~,會發現鍵盤上的波浪號輸入之后在最上面,但是為了美觀,我們希望波浪號顯示在中間。這里總結了三個方法分享給大家 ......
答:中高端水平 i513500hx在處理器當中是處于一個中高端的水平。 i513500hx是第十一代酷睿處理器系列的一員,基礎頻率為2.4GHz,表現十分的不錯。 i513500hx介 ......
相信有非常多使用過筆記本的用戶都聽說過獨顯直連這個詞,但很多用戶并不了解獨顯直連是什么,又有什么用處,那么下面就和小編一起來看看什么是獨顯直連和開啟這 ......
win11系統開機總是自動登錄OneDrive如何關閉?win11系統開機的時候,會自動啟動OneDrive,不想要啟動,該怎么操作呢?下面我們就來看看詳細的教程。 在OneDrive界面點小齒輪按鈕,下拉菜單中點【設置】。 單擊【...
打開軟件,直接填寫就可以。 1、下載安裝easyconnect軟件, 2、打開easyconnect應用,在如圖所示的“服務器地址”一欄輸入如圖所示網址,點擊“連接”, 3、等 ......