Tips-利用Macvlan与宿主机通讯

2022-07-29 15:26:40 0点赞 10收藏 0评论

前言:默认情况下各个macvlan之间可以通讯,但是不能与宿主机进行通讯!! 出现这种情况的原因是为了安全而禁止互通,如宿主机ping容器的ip,尽管他们属于同一网段,但是也是ping不通的,反过来也是。

下面先介绍一下基本的Docker网络模式

工作模式

1. Private

    private模式下于VEPA模式类似,都是各个子设备之间不可用进行通讯,而此模式不同的是,也不能使用外部交换机链接进行通讯,是完全隔离的!

2. Virtal Ethernet Port Aggregator

    各个子设备无法直接进行通讯,需要外部交换机支持(需支持802.1Qbg/VPEA功能——数据可从接口接受并且可以回传),外部通信正常。

3. Bridge

    桥接模式,各个虚拟的子网卡都被链接到一个虚拟网桥上面可以进行相互通讯,不需要外部交换机支持(内部虚拟)。

4. Passthrough

    这种模式下会完全接管父接口的所有流量信息,并且每个父接口只允许一个macvlan设备进行连接。并且主接口必须改为混杂模式!

Tips-利用Macvlan与宿主机通讯

解决方案:可以在宿主机上建立一个macvlan链接,这样就可以通过宿主机上的macvlan与容器内部的macvlan进行连接,从而解决了宿主机与macvlan容器之间不能通讯的问题。

创建容器macvlan示例:

1.docker 创建macvlan

  • macvlan_ipv4

docker network create -d macvlan

--subnet=192.168.123.0/24(你的网络子网号)

--gateway=192.168.123.1(你的网关)

-o parent=ovs_eth0(你的父网卡)

macvlan(新的网络名称)

  • macvlan_ipv6

docker network create -d macvlan --ipv6

--subnet=192.168.123.0/24 --gateway=192.168.123.1

--subnet=240e::/60 --gateway=240e::1

-o parent=ovs_eth0

-o macvlan_mode=bridge

macvlan(新的网络名称)

2.docker容器运行macvlan模式

docker run -d

--name=xxxx

--network macvlan(你的macvlan网络名称)

--ip=192.168.0.39(指定macvlan ip地址)

--dns=192.168.0.29(指定容器dns)

--restart=always

--name=movie-robot

......其他docker运行参数

3.宿主机和容器通讯

  • 宿主机创建一个macvlan

ip link add macvlan2(一个网络名称) link ovs_eth0(你的物理网卡) type macvlan mode bridge

  • 设置macvlan ip 并启用

ip addr add 192.168.123.240 dev macvlan2

ip link set macvlan2 up #启用新建网络

  • 增加路由表

ip route add 目的ip(需要建立通讯的macvlan容器 ip) dev macvlan(刚宿主机建立的macvlan)

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
目录
10
扫一下,分享更方便,购买更轻松