在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
基本概念:
当容器需要直连入物理网络时,可以使用Macvlan。Macvlan本身不创建网络,本质上首先使宿主机物理网卡工作在‘混杂模式',这样物理网卡的MAC地址将会失效,所有二层网络中的流量物理网卡都能收到。接下来就是在这张物理网卡上创建虚拟网卡,并为虚拟网卡指定MAC地址,实现一卡多用,在物理网络看来,每张虚拟网卡都是一个单独的接口。 使用Macvlan需要注意以下几点:
项目环境:
项目操作: 实例一:macvlan跨主机单网络解决方案: docker01: (1)开启ens33网卡的混杂模式,开启网卡的多个虚拟interface(接口) [root@sqm-docker01 ~]# ip link set ens33 promisc on ##查看网卡的状态: [root@sqm-docker01 ~]# ip link show ens33 (2)创建macvlan网络: [root@sqm-docker01 ~]# docker network create -d macvlan --subnet 172.16.100.0/24 --gateway 172.16.100.1 -o parent=ens33 mac_net1
(3)基于刚创建的网络运行一个容器: [root@sqm-docker01 ~]# docker run -itd --name box1 --ip 172.16.100.10 --network mac_net1 busybox docker02:(与docker01相同操作) 开启混杂模式 [root@sqm-docker02 ~]# ip link set ens33 promisc on [root@sqm-docker02 ~]# ip link show ens33 //创建macvlan网络 [root@sqm-docker02 ~]# docker network create -d macvlan --subnet 172.16.100.0/24 --gateway 172.16.100.1 -o parent=ens33 mac_net1 //运行一个容器: [root@sqm-docker02 ~]# docker run -itd --name box2 --network mac_net1 --ip 172.16.100.20 busybox (4)测试两个主机间的两个容器相互通信: 注意事项: 能ping通的原因是两个容器都是基于真实的ens33网卡的,所以宿主机上的ens33网卡必须能够相互通信。这种方式只能够ping通ip地址,是无法ping通容器名的。 实例二:macvlan跨主机多网络解决方案: (1)首先查看主机内核的8021q模块: [root@sqm-docker01 ~]# modinfo 8021q ##如果没有查看到该模块,需要执行以下命令进行加载: [root@sqm-docker01 ~]# modprobe 8021q 开启路由转发: [root@sqm-docker01 ~]# echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf [root@sqm-docker01 ~]# sysctl -p net.ipv4.ip_forward = 1 (2)修改网络配置信息: docker01: [root@sqm-docker01 ~]# cd /etc/sysconfig/network-scripts/ [root@sqm-docker01 network-scripts]# ls
[root@sqm-docker01 network-scripts]# vim ifcfg-ens33 基于ens33网卡进行创建子网卡: [root@sqm-docker01 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33.10 #网卡名称自定义 [root@sqm-docker01 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33.20 -p:表示保留原有属性(权限) //修改ens33.10网卡: [root@sqm-docker01 network-scripts]# vim ifcfg-ens33.10 ##只保留以下选项: //修改ens33.20网卡: [root@sqm-docker01 network-scripts]# vim ifcfg-ens33.20 配置与ens33.10相同,只需修改ip地址: (3)启动子网卡: [root@sqm-docker01 network-scripts]# ifup ifcfg-ens33.10 [root@sqm-docker01 network-scripts]# ifup ifcfg-ens33.20 //查看网络信息 [root@sqm-docker01 network-scripts]# ifconfig (4)基于ens33.10和ens33.20创建macvlan网络: 注意:网段不同,网络名称不同 [root@sqm-docker01 ~]# docker network create -d macvlan --subnet 172.16.200.0/24 --gateway 172.16.200.1 -o parent=ens33.10 mac_net10 [root@sqm-docker01 ~]# docker network create -d macvlan --subnet 172.16.210.0/24 --gateway 172.16.210.1 -o parent=ens33.20 mac_net20 (5)基于以上网络分别运行2个容器: [root@sqm-docker01 ~]# docker run -itd --name test1 --ip 172.16.200.10 --network mac_net10 busybox [root@sqm-docker01 ~]# docker run -itd --name test2 --ip 172.16.210.10 --network mac_net20 busybox 部署docker02: 基本与docker01操作相同,注意网段的相同,但主机ip得不同。 #以下操作将不做解释: 开启路由转发: [root@sqm-docker01 ~]# echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf [root@sqm-docker01 ~]# sysctl -p net.ipv4.ip_forward = 1 [root@sqm-docker02 network-scripts]# pwd /etc/sysconfig/network-scripts [root@sqm-docker02 network-scripts]# vim ifcfg-ens33 [root@sqm-docker02 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33.10 [root@sqm-docker02 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33.20 [root@sqm-docker02 network-scripts]# vim ifcfg-ens33.10
[root@sqm-docker02 network-scripts]# vim ifcfg-ens33.20 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持极客世界。
(6)测试容器之间能够跨主机通信:(注意:如果你是vmware环境的话,由于VMware虚拟机的原因,必须将两台主机默认的NAT模式修改为桥接模式才能够正常通信) test4与test2通信(相同网段):
----------------------macvlan多网络跨主机实现通信部署完毕--------------------- 扩展知识点:
以上就是部署网络栈的基本内容,自己也不是经常用到,就是为了实现其他容器能够共享其中一个容器中的资源。 |
请发表评论