Docker Macvlan技术
1 默认Docker桥接模式

优点:兼容性好,是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本质上是一种网卡虚拟化技术。


3 Macvlan操作步骤
3.1 确认网卡名称
ifconfig

3.2 开启混杂模式
ip link set enx000ec638bfde promisc on
ifconfig enx000ec638bfde promisc
3.3 创建Macvlan网络
- -d macvlan 指定网络模式
- --subnet=192.168.124.0/24 设置子网掩码

- --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的哪些端口允许外界访问,哪些不允许
评论区