容器内的Docker Macvlan网络无法到达其自己的主机

我已经在2个Docker主机之间设置了Macvlan网络,如下所示:

主机设置:HOST_1 ens192:172.18.0.21

创建macvlan网桥接口

docker network  create  -d macvlan \
--subnet=172.18.0.0/22 \
--gateway=172.18.0.1 \
--ip-range=172.18.1.0/28 \
-o macvlan_mode=bridge \
-o parent=ens192 macvlan

创建macvlan界面HOST_1

ip link add ens192.br link ens192 type macvlan mode bridge
ip addr add 172.18.1.0/28 dev ens192.br
ip link set dev ens192.br up

主机设置:HOST_2 ens192:172.18.0.23

创建macvlan网桥接口

docker network  create  -d macvlan \
--subnet=172.18.0.0/22 \
--gateway=172.18.0.1 \
--ip-range=172.18.1.16/28 \
-o macvlan_mode=bridge \
-o parent=ens192 macvlan

在HOST_2中创建macvlan接口

ip link add ens192.br link ens192 type macvlan mode bridge
ip addr add 172.18.1.16/28 dev ens192.br
ip link set dev ens192.br up

容器设定

在两个主机中创建容器

HOST_1# docker run --net=macvlan -it --name macvlan_1 --rm alpine /bin/sh
HOST_2# docker run --net=macvlan -it --name macvlan_1 --rm alpine /bin/sh

HOST_1中的CONTAINER_1

24:eth0 @ if2:<广播,多播,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue状态未知
    链接/以太网02:42:ac:12:01:00 brd ff:ff:ff:ff:ff:ff:ff
    inet 172.18.1.0/22 brd 172.18.3.255作用域全局eth0
       永久有效_lft永久首选_lft

HOST_2中的CONTAINER_2

21:eth0 @ if2:<广播,多播,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue状态未知
    链接/以太网02:42:ac:12:01:10 brd ff:ff:ff:ff:ff:ff:ff
    inet 172.18.1.16/22 brd 172.18.3.255作用域全局eth0
       永久有效_lft永久首选_lft

CONTAINER_1和CONTAINER_2中的路由表

内核IP路由表
目标网关Genmask标志度量标准引用使用Iface
0.0.0.0 172.18.0.1 0.0.0.0 UG 0 0 0 eth0
172.18.0.0 0.0.0.0 255.255.252.0 U 0 0 0 eth0

情境

HOST_1(172.18.0.21)<-> HOST_2(172.18.0.23)= OK(反之亦然)

HOST_1(172.18.0.21)-> CONTAINER_1(172.18.1.0)和CONTAINER_2(172.18.1.16)=确定

HOST_2(172.18.0.23)-> CONTAINER_1(172.18.1.0)和CONTAINER_2(172.18.1.16)=确定

CONTAINER_1(172.18.1.0)-> HOST_2(172.18.0.23)= OK

CONTAINER_2(172.18.1.16)-> HOST_1(172.18.0.21)= OK

CONTAINER_1(172.18.1.0)<-> CONTAINER_2(172.18.1.16)= OK(反之亦然)

CONTAINER_1(172.18.1.0)-> HOST_1(172.18.0.21)=失败

CONTAINER_2(172.18.1.16)-> HOST_2(172.18.0.23)=失败

除了这1个单一问题外,我与我要实现的解决方案非常接近.我该如何使容器连接到自己的主机.如果有解决方案,我想知道如何在ESXi虚拟化透视图中进行配置,如果有任何区别,也可以裸机进行配置

最佳答案
这是为macvlan定义的行为,是设计使然.查看Docker Macvlan Documentation

  • When using macvlan, you cannot ping or communicate with the default namespace IP address. For example, if you create a container and try to ping the Docker host’s eth0, it will not work. That traffic is explicitly filtered by the kernel modules themselves to offer additional provider isolation and security.

  • A macvlan subinterface can be added to the Docker host, to allow traffic between the Docker host and containers. The IP address needs to be set on this subinterface and removed from the parent address.

转载注明原文:容器内的Docker Macvlan网络无法到达其自己的主机 - 代码日志