docker (11)——不同宿主机上的容器进行通信

在这里插入图片描述
在这里插入图片描述

2. macvlan容器网络方案的实现

macvlan本身是linxu kernel的模块,本质上是一种网卡虚拟化技术。
其功能是允许在同一个物理网卡上虚拟出多个网卡,通过不同的MAC地址在数据链路层进行网络数据的转发,

一块网卡上配置多个 MAC 地址(即多个 interface),每个interface可以配置自己的IP,
Docker的macvlan网络实际上就是使用了Linux提供的macvlan驱动。
因为多个MAC地址的网络数据包都是从同一块网卡上传输,所以需要打开网卡的混杂模式ip link set eth1 promisc on。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
注意:如果不开启混杂模式,会导致macvlan网络无法访问外界
不使用vlan时,表现为无法ping通路由,无法ping通同一网络内其他主机

在这里插入图片描述

在这里插入图片描述
在两台主机上各创建macvlan网络创建macvlan网络不同于桥接模式,需要指定网段和网关(因为要保证跨主机上网段和网关是相同的),并且都得是真实存在的
server1:
在这里插入图片描述
server2:

[root@server2 ~]# docker network create -d macvlan  --subnet 172.20.0.0/24 --gateway 172.20.0.1 -o parent=eth1 macvlan1

测试:sever2容器vm2中ping server1的vm1容器

[root@server2 ~]# docker run -it --name vm2 --network macvlan1 --ip 172.20.0.12 busybox
/ # ping 172.20.0.11
PING 172.20.0.11 (172.20.0.11): 56 data bytes
64 bytes from 172.20.0.11: seq=0 ttl=64 time=0.952 ms
64 bytes from 172.20.0.11: seq=1 ttl=64 time=0.419 ms
64 bytes from 172.20.0.11: seq=2 ttl=64 time=0.383 ms
^C
--- 172.20.0.11 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.383/0.584/0.952 ms
/ #

在这里插入图片描述
注:macvlan模式不依赖网桥,所以brctl show查看并没有创建新的bridge

在这里插入图片描述
macvlan模式不依赖网桥,所以brctl show查看并没有创建新的bridge
但是查看容器的网络,会看到虚拟网卡对应了一个interface是17
在这里插入图片描述
可见,容器的 eth0 就是宿主机的eth1通过macvlan虚拟出来的interface
容器的interface直接与主机的网卡连接,这种方案使得容器无需通过NAT和端口映射就能与外网直接通信(只要有网关)在网络上看起来与其他独立主机没有区别

在这里插入图片描述
在这里插入图片描述


版权声明:本文为qq_42024433原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。