侧边栏壁纸
  • 累计撰写 57 篇文章
  • 累计创建 23 个标签
  • 累计收到 4 条评论

Docker Macvlan技术

cluski
2022-04-09 / 0 评论 / 0 点赞 / 175 阅读 / 1,354 字
温馨提示:
本文最后更新于 2022-04-09,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Docker Macvlan技术

1 默认Docker桥接模式

image-20220409214840586

优点:兼容性好,是Docker默认的通信规则

缺点:主机端口占用严重,无法使用指定端口(如:80)

缺点:无法跨主机容器间通信

2 Macylan是什么?

​ Docker内置的Macvlan驱动(Vindows上是Transparent)就是为此场景而生。通过为容器提供MAC和IP地址,让容器在物理网络上成为"一等公民"。因为无须端口映射或者额外桥接,可以直接通过主机接口(或者子接口)访问容器接口。但是,Macvlan的缺点是需要将主机网卡(NIC)设置为混杂模式。(Promiscuous Mode),这在大部分公有云平台上是不允许的。所以Macvlan对于公司内部的数据中心网络来说很棒(假设公司网络组能接受NIC设置为混杂模式),但是Macvlan在公有云上并不可行。

​ Macvlan本身是linxu kernel模块,其功能是允许在同一个物理网卡上配置多个MAC地址,即多个interface,每个interface可以配置自己的IP。macvlan本质上是一种网卡虚拟化技术。

image-20220409215700698

image-20220409220018996

3 Macvlan操作步骤

3.1 确认网卡名称

ifconfig

image-20220409220213536

3.2 开启混杂模式

ip link set enx000ec638bfde promisc on
ifconfig enx000ec638bfde promisc

3.3 创建Macvlan网络

  • -d macvlan 指定网络模式
  • --subnet=192.168.124.0/24 设置子网掩码

image-20220409220434226

  • --ip-range=192.168.124.0/24 设置容器允许的ip范围
  • --gateway=192.168.124.1 设置网关
  • -o parent=enx000ec638bfde 设置上一级网卡(或虚拟网卡)名称
  • macvlan31 指定当前macvlan网络名称
docker network create -d macvlan \
  --subnet=192.168.124.0/24 \
  --ip-range=192.168.124.0/24 \
  --gateway=192.168.124.1 \
  -o parent=enx000ec638bfde \
  macvlan31 

3.4 加入macvlan网络

docker run -itd --name nginx-test --ip=192.168.124.222 --network macvlan31 nginx

4 Macvlan的问题

  • 优点:
    • 独立IP,维护方便,不占用主机瑞口号,使用容器默认IP
    • 拥有稳定的IP后,容器间跨主机通信成为可能,因为无论是物理机、虚拟机、容器都是物理网络的“一等公民”,容器间通信时直接指定IP即可
  • 缺点:
    • 网络环境需要支持混杂模式,公有云不支持,不过都上公有云了,为什么不用直接用云供应商提供的容器服务呢?
    • 部分大规模应用集群,内网IP地址是稀缺资源,例如阿里云、腾讯云,不适合使用Macvlan
    • 默认容器端口均对外见露,需要在内网构建应用防火墙/网关决定哪些P的哪些端口允许外界访问,哪些不允许
0

评论区