最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Docker 容器跨主機(jī)多網(wǎng)段通信解決方案

 更新時(shí)間:2020年08月11日 10:27:26   作者:張九冫  
這篇文章主要介紹了Docker 容器跨主機(jī)多網(wǎng)段通信解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、MacVlan

實(shí)現(xiàn)Docker的跨主機(jī)網(wǎng)絡(luò)通信的方案有很多,如之前博文中寫到的通過部署 Consul服務(wù)實(shí)現(xiàn)Docker容器跨主機(jī)通信

Macvlan工作原理:

Macvlan是Linux內(nèi)核支持的網(wǎng)絡(luò)接口。要求的Linux內(nèi)部版本是v3.9–3.19和4.0+;
通過為物理網(wǎng)卡創(chuàng)建Macvlan子接口,允許一塊物理網(wǎng)卡擁有多個(gè)獨(dú)立的MAC地址和IP地址。虛擬出來的子接口將直接暴露在相鄰物理網(wǎng)絡(luò)中。從外部看來,就像是把網(wǎng)線隔開多股,分別接受了不同的主機(jī)上一樣;
物理網(wǎng)卡收到包后,會(huì)根據(jù)收到包的目的MAC地址判斷這個(gè)包需要交給其中虛擬網(wǎng)卡。

當(dāng)容器需要直連入物理網(wǎng)絡(luò)時(shí),可以使用Macvlan。Macvlan本身不創(chuàng)建網(wǎng)絡(luò),本質(zhì)上首先使宿主機(jī)物理網(wǎng)卡工作在‘混雜模式',這樣物理網(wǎng)卡的MAC地址將會(huì)失效,所有二層網(wǎng)絡(luò)中的流量物理網(wǎng)卡都能收到。接下來就是在這張物理網(wǎng)卡上創(chuàng)建虛擬網(wǎng)卡,并為虛擬網(wǎng)卡指定MAC地址,實(shí)現(xiàn)一卡多用,在物理網(wǎng)絡(luò)看來,每張?zhí)摂M網(wǎng)卡都是一個(gè)單獨(dú)的接口。

使用Macvlan注意:

  • 容器直接連接物理網(wǎng)絡(luò),由物理網(wǎng)絡(luò)負(fù)責(zé)分配IP地址,可能的結(jié)果是物理網(wǎng)絡(luò)IP地址被耗盡,另一個(gè)后果是網(wǎng)絡(luò)性能問題,物理網(wǎng)絡(luò)中接入的主機(jī)變多,廣播包占比快速升高而引起的網(wǎng)絡(luò)性能下降問題;
  • 宿主機(jī)上的某張網(wǎng)上需要工作在‘混亂模式'下;
  • 前面說到,工作在混亂模式下的物理網(wǎng)卡,其MAC地址會(huì)失效,所以,此模式中運(yùn)行的容器并不能與外網(wǎng)進(jìn)行通信,但是不會(huì)影響宿主機(jī)與外網(wǎng)通信;
  • 從長(zhǎng)遠(yuǎn)來看bridge網(wǎng)絡(luò)與overlay網(wǎng)絡(luò)是更好的選擇,原因就是虛擬網(wǎng)絡(luò)應(yīng)該與物理網(wǎng)絡(luò)隔離而不是共享。

工作示意圖:


二、配置實(shí)例

實(shí)例1(實(shí)現(xiàn)容器基于macvlan的單網(wǎng)段跨主機(jī)通信)

實(shí)現(xiàn)效果:

兩臺(tái)centos 7.3,分別運(yùn)行著docker服務(wù);
兩臺(tái)docker服務(wù)器創(chuàng)建相同的一個(gè)MacVlan網(wǎng)絡(luò),使docker服務(wù)器上的容器可以實(shí)現(xiàn)跨主機(jī)通信。

開始配置

1、第一臺(tái)docker服務(wù)器配置如下

[root@docker01 ~]# ip link set ens33 promisc on       # 開啟ens33網(wǎng)卡的混雜模式
[root@docker01 ~]# ip link show ens33   # 確定查看的信息包含以下標(biāo)紅的字樣
2: ens33: <BROADCAST,MULTICAST,'PROMISC',UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
  link/ether 00:0c:29:9f:33:9f brd ff:ff:ff:ff:ff:ff
[root@docker01 ~]# docker network create -d macvlan --subnet 172.22.16.0/24 --gateway 172.22.16.1 -o pa
rent=ens33 mac_net1
#創(chuàng)建macvlan網(wǎng)絡(luò),指定網(wǎng)關(guān)、網(wǎng)段等信息,“-o”指定綁定在哪張網(wǎng)卡之上
[root@docker01 ~]# docker run -itd --name test1 --ip 172.22.16.10 --network mac_net1 busybox   # 基于新創(chuàng)建的macvlan網(wǎng)絡(luò)運(yùn)行一個(gè)容器,并指定其IP

確認(rèn)運(yùn)行的容器的IP地址

[root@docker01 ~]# docker exec test1 ip a   # 查看IP,確定以下標(biāo)紅與配置的一樣
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
6: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
  link/ether 02:42:ac:16:10:0a brd ff:ff:ff:ff:ff:ff
  inet '172.22.16.10/24' brd 172.22.16.255 scope global eth0
    valid_lft forever preferred_lft forever

2、第二臺(tái)docker服務(wù)器配置如下(與第一臺(tái)docker服務(wù)器基本相似)

[root@docker02 ~]# ip link set ens33 promisc on    # 開啟混雜模式
[root@docker02 ~]# ip link show ens33 
2: ens33: <BROADCAST,MULTICAST,'PROMISC',UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
  link/ether 00:0c:29:b5:bc:ed brd ff:ff:ff:ff:ff:ff
[root@docker02 ~]# docker network create -d macvlan --subnet 172.22.16.0/24 --gateway=172.22.16.1 -o parent=ens33 mac_net1
#創(chuàng)建一個(gè)與第一臺(tái)docker服務(wù)器的網(wǎng)段、網(wǎng)關(guān)相同的macvlan。并綁定到物理網(wǎng)卡上。
#為了可以直觀的看出其他docker服務(wù)器上的macvlan和第這臺(tái)是在同一個(gè)網(wǎng)段的。所以,建議設(shè)置的網(wǎng)絡(luò)名稱一樣。
[root@docker02 ~]# docker run -itd --name test2 --ip 172.22.16.11 --network mac_net1 busybox
#運(yùn)行一個(gè)容器,并指定是基于macvlan網(wǎng)絡(luò)的
#注意,其IP地址不要與其他docker服務(wù)器上的容器IP地址沖突

確認(rèn)運(yùn)行的容器的IP地址

[root@docker02 ~]# docker exec test2 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
6: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
  link/ether 02:42:ac:16:10:0b brd ff:ff:ff:ff:ff:ff
  inet '172.22.16.11/24' brd 172.22.16.255 scope global eth0
    valid_lft forever preferred_lft forever

使用第二臺(tái)docker服務(wù)器上的容器test2對(duì)第一臺(tái)docker服務(wù)器上的容器test1進(jìn)行ping測(cè)試


OK,跨主機(jī)的容器通信就通過macvlan實(shí)現(xiàn)了。由于使用混雜模式會(huì)造成物理網(wǎng)卡的MAC地址失效,所以容器并不能通過此模式進(jìn)行與外網(wǎng)的通信。

實(shí)例2(基于macvlan的跨主機(jī)網(wǎng)絡(luò)多網(wǎng)段的解決方案)

實(shí)現(xiàn)的效果如下:

  • 兩臺(tái)centos 7.3,分別運(yùn)行著docker服務(wù);
  • 每臺(tái)宿主機(jī)創(chuàng)建了兩個(gè)MacVlan網(wǎng)段供容器使用(172.10.16.0/24和172.20.16.0/24);
  • 第一臺(tái)docker服務(wù)器上運(yùn)行容器test1和test2,第二臺(tái)docker服務(wù)器運(yùn)行容器test3和test4。
  • 最終實(shí)現(xiàn)跨主機(jī)的同網(wǎng)段容器互相通信。

開始配置:

1、第一臺(tái)docker服務(wù)器配置如下

[root@docker01 ~]# ip link set ens33 promisc on       # 開啟ens33網(wǎng)卡的混雜模式
#也就是開啟網(wǎng)卡的多個(gè)虛擬interface(接口) 
[root@docker01 ~]# ip link show ens33   # 確定查看的信息包含以下標(biāo)紅的字樣
2: ens33: <BROADCAST,MULTICAST,'PROMISC',UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
  link/ether 00:0c:29:9f:33:9f brd ff:ff:ff:ff:ff:ff
[root@docker01 ~]# modinfo 8021q
 #查看是否加載8021q模塊,如果有信息返回,則表示該模塊已經(jīng)加載

modinfo 8021q命令返回的信息如下

[root@docker01 ~]# modprobe 8021q   #若沒有加載8021q模塊,則執(zhí)行此命令
[root@docker01 ~]# cd /etc/sysconfig/network-scripts/
[root@docker01 network-scripts]# vim ifcfg-ens33 
           ...................
BOOTPROTO=manual       # 將此配置項(xiàng)改為“manual”,也是手動(dòng)的意思
[root@docker01 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33.10       # 復(fù)制一份網(wǎng)卡配置文件,-p保留原本文件的屬性
[root@docker01 network-scripts]# vim ifcfg-ens33.10 
BOOTPROTO=none 
NAME=ens33.10        #注意更改名稱
DEVICE=ens33.10   #注意更改名稱
ONBOOT=yes
IPADDR=192.168.10.11       # 給虛擬網(wǎng)卡設(shè)置一個(gè)IP
PREFIX=24
GATEWAY=192.168.10.2
VLAN=yes
[root@docker01 network-scripts]# cp ifcfg-ens33.10 ifcfg-ens33.20 
[root@docker01 network-scripts]# vim ifcfg-ens33.20 
BOOTPROTO=none
NAME=ens33.20
DEVICE=ens33.20
ONBOOT=yes
IPADDR=192.168.20.10        # 注意,此處的IP與ens33.10并不在同一網(wǎng)段
PREFIX=24
GATEWAY=192.168.20.2
VLAN=yes
[root@docker01 network-scripts]# ifdown ens33;ifup ens33     #重啟網(wǎng)卡,使更改生效
[root@docker01 network-scripts]# ifup ens33.10   # 啟動(dòng)該網(wǎng)卡
[root@docker01 network-scripts]# ifup ens33.20   # 啟動(dòng)
[root@docker01 ~]# docker network create -d macvlan --subnet 172.10.16.0/24 --gateway 172.10.16.1 -o parent=ens33.10 mac_net10
#創(chuàng)建一個(gè)macvlan網(wǎng)絡(luò),給其定義一個(gè)網(wǎng)段、網(wǎng)關(guān)及綁定到ens33.10
[root@docker01 ~]# docker network create -d macvlan --subnet 172.20.16.0/24 --gateway 172.20.16.1 -o parent=ens33.20 mac_net20
#創(chuàng)建一個(gè)macvlan網(wǎng)絡(luò),給其定義一個(gè)網(wǎng)段、網(wǎng)關(guān)及綁定到ens33.20
#接下來分別基于剛剛創(chuàng)建的macvlan網(wǎng)絡(luò)運(yùn)行一個(gè)容器

2、第二臺(tái)docker服務(wù)器配置如下(基本與第一臺(tái)操作類似,要注意IP不要沖突)

[root@docker02 ~]# ip link set ens33 promisc on    # 開啟混雜模式
[root@docker02 ~]# ip link show ens33 
2: ens33: <BROADCAST,MULTICAST,'PROMISC',UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
  link/ether 00:0c:29:b5:bc:ed brd ff:ff:ff:ff:ff:ff
[root@docker02 ~]# modinfo 8021q
返回信息可參考圖一
[root@docker02 ~]# modprobe 8021q   #若沒有加載8021q模塊,則執(zhí)行此命令
[root@docker02 ~]# cd /etc/sysconfig/network-scripts/
[root@docker02 network-scripts]# vim ifcfg-ens33 
      ...............#省略部分內(nèi)容
BOOTPROTO=manual    
[root@docker02 network-scripts]# scp root@192.168.171.151:/etc/sysconfig/network-scripts/ifcfg-ens33.* .         # 要注意后面的“.”
ifcfg-ens33.10                            100% 128  83.4KB/s  00:00  
ifcfg-ens33.20                            100% 124  75.0KB/s  00:00 
[root@docker02 network-scripts]# vim ifcfg-ens33.10 
BOOTPROTO=none
NAME=ens33.10
DEVICE=ens33.10
ONBOOT=yes
IPADDR=192.168.10.11      # 更改IP,以防和第一臺(tái)沖突
PREFIX=24
GATEWAY=192.168.10.2
VLAN=yes
[root@docker02 network-scripts]# vim ifcfg-ens33.20 

BOOTPROTO=none
NAME=ens33.20
DEVICE=ens33.20
ONBOOT=yes
IPADDR=192.168.20.11
PREFIX=24
GATEWAY=192.168.20.2
VLAN=yes
[root@docker02 network-scripts]# ifdown ens33;ifup ens33     # 重啟網(wǎng)卡 ,使配置生效
[root@docker02 network-scripts]# ifup ens33.10   # 啟動(dòng)網(wǎng)卡
[root@docker02 network-scripts]# ifup ens33.20
#接下來創(chuàng)建macvlan網(wǎng)絡(luò),與第一臺(tái)docker服務(wù)器創(chuàng)建的網(wǎng)絡(luò)一樣
[root@docker02 ~]# docker network create -d macvlan --subnet 172.10.16.0/24 --gateway 172.10.16.1 -o parent=ens33.10 mac_net10
[root@docker02 ~]# docker network create -d macvlan --subnet 172.20.16.0/24 --gateway 172.20.16.1 -o parent=ens33.20 mac_net20 
[root@docker02 ~]# docker run -itd --name test3 --network mac_net10 --ip 172.10.16.11 busybox
[root@docker02 ~]# docker run -itd --name test4 --network mac_net20 --ip 172.20.16.21 busybox

配置至此,即可進(jìn)行ping測(cè)試了,如果配置無誤,則test3應(yīng)該和test1互通(因?yàn)槠涠际腔趍ac_net10網(wǎng)絡(luò));test4應(yīng)該和test2互通(同理)。

但test3和test1不能和test4和test2互通(因?yàn)槠洳皇腔谕粋€(gè)虛擬局域網(wǎng))。

容器test3 ping 容器test1測(cè)試(注意:若是使用vmware虛擬機(jī)進(jìn)行測(cè)試,由于vmware的特性,需將其網(wǎng)絡(luò)適配器改為“橋接模式”,而不是NAT模式等。否則無法通信)


容器test4 ping 容器test2測(cè)試:


至此,跨主機(jī)網(wǎng)絡(luò)多網(wǎng)段已經(jīng)實(shí)現(xiàn),同樣,各個(gè)容器無法與外網(wǎng)進(jìn)行通信。若有耐心,還是建議閱讀docker官方文檔

到此這篇關(guān)于Docker 容器跨主機(jī)多網(wǎng)段通信解決方案的文章就介紹到這了,更多相關(guān)Docker 容器跨主機(jī)多網(wǎng)段通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Docker安裝SonarQube的詳細(xì)教程

    使用Docker安裝SonarQube的詳細(xì)教程

    這篇文章主要介紹了Docker安裝SonarQube的教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • 如何使用Docker部署Xxl-Job分布式任務(wù)調(diào)度中心

    如何使用Docker部署Xxl-Job分布式任務(wù)調(diào)度中心

    XXL-Job是一個(gè)開源的分布式任務(wù)調(diào)度中心,它提供了一個(gè)可視化的任務(wù)管理界面,可以方便地創(chuàng)建、編輯和監(jiān)控任務(wù),本文詳細(xì)的講解了如何使用Docker部署xxl-job分布式任務(wù)調(diào)度服務(wù),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 使用Docker快速部署ES單機(jī)方式

    使用Docker快速部署ES單機(jī)方式

    這篇文章主要介紹了使用Docker快速部署ES單機(jī)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Docker nacos集群部署的實(shí)現(xiàn)

    Docker nacos集群部署的實(shí)現(xiàn)

    本文將深入探討如何使用Docker來部署Nacos集群,從而實(shí)現(xiàn)服務(wù)的快速擴(kuò)展、高可用性和可維護(hù)性,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 從源碼構(gòu)建docker-ce的過程分析

    從源碼構(gòu)建docker-ce的過程分析

    這篇文章主要介紹了從源碼構(gòu)建docker-ce的過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Docker中安裝和配置Apache Pulsar實(shí)現(xiàn)

    Docker中安裝和配置Apache Pulsar實(shí)現(xiàn)

    本文介紹了在Docker中安裝和配置Apache Pulsar集群,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 如何清理docker的overlay2 目錄

    如何清理docker的overlay2 目錄

    本文介紹了如何清理Docker的overlay2目錄,包括確認(rèn)overlay2目錄的位置、清理未使用的容器和鏡像、手動(dòng)清理overlay2目錄、清理日志文件、限制日志大小以及檢查磁盤空間,感興趣的朋友一起看看吧
    2025-03-03
  • Docker Compose的安裝和使用步驟

    Docker Compose的安裝和使用步驟

    Docker Compose是一個(gè)工具,用于定義和運(yùn)行多容器應(yīng)用程序的工具,接下來通過本文給大家分享Docker Compose的安裝和使用教程一起看看吧
    2021-09-09
  • 使用Docker部署Spring Boot的實(shí)現(xiàn)方法

    使用Docker部署Spring Boot的實(shí)現(xiàn)方法

    這篇文章主要介紹了使用Docker部署Spring Boot的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Docker教程:使用容器(簡(jiǎn)單示例)

    Docker教程:使用容器(簡(jiǎn)單示例)

    今天小編就為大家分享一篇關(guān)于Docker教程:使用容器(簡(jiǎn)單示例),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10

最新評(píng)論

安国市| 三亚市| 陆丰市| 远安县| 芷江| 偃师市| 花莲县| 舞阳县| 仁怀市| 贵港市| 辉县市| 明溪县| 兰坪| 隆昌县| 镇远县| 神农架林区| 青田县| 乌鲁木齐市| 陇西县| 龙海市| 仁布县| 万盛区| 灵宝市| 且末县| 漳州市| 商南县| 德兴市| 元江| 都江堰市| 天水市| 芮城县| 阳东县| 遂昌县| 富宁县| 德江县| 军事| 景宁| 宜春市| 顺义区| 揭东县| 永寿县|