默认情况下各个macvlan之间可以通讯,但是不能与宿主机进行通讯!!
主要原因:为了安全而禁止互通
如宿主机ping容器的ip,尽管他们属于同一网段,但也是ping不通的,反过来也是。
这里用两个实例来说明如何解决这个问题。
实例一
环境说明:
宿主机: 10.0.1.80
容器:10.0.1.2
虚拟 IP(做路由实现通信):10.0.1.8
宿主机物理网卡名称:ens33
# 添加一个虚拟接口桥接到物理网卡
ip link add macvlan-proxy link ens33 type macvlan mode bridge
# 给虚拟接口配置ip
ip addr add 10.0.1.8/32 dev macvlan-proxy
# 启用虚拟接口
ip link set macvlan-proxy up
# 添加到容器网络的静态路由规则
ip route add 10.0.1.2/32 dev macvlan-proxy
此时,就可以实现宿主机和容器通信了
使用 ifconfig 查看是否有 macvlan-proxy 的网卡出现。
使用 route -n 查看是否有相关路由出现
10.0.1.2 0.0.0.0 255.255.255.255 UH 0 0 0 macvlan-proxy
使用 ping 直接测试
实例二
环境说明:
宿主机网络:192.168.100.100
容器网络:172.20.0.0/16
虚拟IP:172.20.1.2/32
宿主机物理网卡:ens32
ip link add macvlan-proxy link ens32 type macvlan mode bridge
ip addr add 172.20.1.2/32 dev macvlan-proxy
ip link set macvlan-proxy up
ip route add 172.20.1.2/16 dev macvlan-proxy
此处容器网络和宿主机不同网段,宿主机通过虚拟IP和容器网络进行通信
另一种方式:
环境说明:
宿主机网络:192.168.100.100
容器网络:172.20.0.0/16
虚拟IP:192.168.100.110/32
宿主机物理网卡:ens32
ip link add macvlan-proxy link ens32 type macvlan mode bridge
ip addr add 192.168.100.110/32 dev macvlan-proxy
ip link set macvlan-proxy up
ip route add 172.20.1.2/16 dev macvlan-proxy
设置转发
# 有固定公网ip地址
iptables -t nat -I POSTROUTING -s 172.20.0.0/16 -j SNAT --to-source 192.168.100.100
# 没有固定公网ip地址
iptables -t nat -A POSTROUTING -s 172.20.0.0/16 -j MASQUERADE (伪装)
如需要宿主机网段和容器网段通信,则需要添加静态路由
ip route add 172.20.0.0/16 via 192.168.100.100 dev ens32
参考资料:
解决Docker macvlan网络与宿主机通讯问题_docker macvlan无法ping通网关_不会拯救世界的SuperMan的博客-CSDN博客
macvlan 网络 docker 容器与宿主机通信 - 运维学习记录文章来源:https://www.toymoban.com/news/detail-733013.html
https://www.cnblogs.com/bakari/p/10893589.html文章来源地址https://www.toymoban.com/news/detail-733013.html
到了这里,关于docker macvlan虚拟化网络与宿主机通信问题解决——筑梦之路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!