热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

centos7下安装docker(15.3跨主机网络-macvlan)

除了ovrlay,docker还开发了另一个支持跨主机容器的driver:macvlanmacvlan本身是linukernel模块,其功能是允许在同一物理网卡上配置多了MAC地址,即:多

 

除了ovrlay,docker还开发了另一个支持跨主机容器的driver:macvlan

macvlan本身是linu kernel模块,其功能是允许在同一物理网卡上配置多了MAC地址,即:多个interface,每个interface可以配置自己的ip。macvlan本身是一种网卡虚拟化技术,Docker用macvlan实现容器网络就不奇怪了

 

macvlan最大的优点是性能极好,相比其他方案,macvlan不需要创建Linux bridge,而是直接通过以太interface连接到物理网络

 

准备实验环境:

我们会使用docker1和docker2上单独的网卡ens192和ens160创建macvlan。为保证多个MAC地址网络包都可以从ens190或者ens160通过,我们需要打开网卡的混杂模式

 

因为docker1号docker2是虚拟机,所以在网卡配置选项中设置混杂模式(注:我使用的是esxi的虚拟机,没有做这一步也可以)

当前试验环境如下:盗图

 

 

 

创建macvlan网络

docker network create -d macvlan --subnet 192.168.2.1/24 --gateway 192.168.2.1 -o parent=ens160 macnet1

 

注:macvlan网络是local网络,为了保证跨主机能够通信,用户需要自己管理IP subnet

      与其他网络不同,docker 不会为macvlan网络创建网关,这里的网关应该是真实存在的,否则路由无法通

     -o parent指定使用的网络interface

在docker2中也要执行相同的命令:docker network create -d macvlan --subnet 192.168.2.1/24 --gateway 192.168.2.1 -o parent=ens160 macnet1

 

 

在docker1中运行容器

docker network create -d macvlan --subnet 192.168.2.1/24 --gateway 192.168.2.1 -o parent=ens160 macnet1

在docker2中执行同样的操作:

验证docker1上的mac1与docker2上的mac2的连通性

两个不同主机之间的容器可以相互ping通,但是不能解析容器的主机名,可见docker没有为macvlan提供dns服务,这点与overlay是不同的

注:macvlan是物理中实实在在存在的网络,macvlan实际就是我们常用的网卡的子接口,类似于:eth0:1

 

 

macvlan网络结构分析:

macvlan不依赖linux bridge,brctl show可以确认macvlan没有创建新的bridge

查看一下容器mac1的网络设备:

除了lo,容器只有一个eth0,请注意:eth0后面还有@if2,表明该网卡有一个对应的interface,全局编号为2,。根据macvlan的原理,我们猜测这个interface就是ens192,

确认如下:

可见,容器的eth0就是ens192通过macvlan虚拟出来的interface。容器的interface直接与主机的网卡连接,这种方案是的容器无需通过NAT和端口映射就能与外网直接通信(只要有网关)在网络上与其他独立的主机没有区别

当前网络如图所示:

 

 

 

用sub-interface实现多macvlan网络

macvlan会独占主机的网卡,也就是说一个网卡只能创建一个macvlan网络,否则会报错:

但是主机host的网卡是有限的,如何支持更多的macvlan呢?

 

 

好在macvlan不仅可以连接到interface(如ens192)还可以连接到sub-interface(如:ens192.xxx)

VLAN是现代网络常用的网络虚拟化技术,它可以将物理的二层网络划分成多达4094个逻辑网络,这些网络在二层上是隔离的,每个逻辑网络(即VLAN)由VLAN ID区分,VLAN ID的取值唯1-4094

 

linux的网卡也能支持VLAN,同一个interface可以收发多个VLAN数据包,不过前提是要创建VLAN的sub-interface

 

比如:希望ens192同时支持VLAN10和VLAN20,则需要创建sub-interface ens192.10和ens192.20

在交换机上,如果某个port只能收发单个VLAN数据,该port为Access模式,如果支持多VLAN,则为trunk模式,因为我们在虚拟机上,所以无需配置

 

下面演示如何在ens192.10和ens192.20上创建macvlan网络

1.首先在docker1和docker2上创建vlan

2.创建网络

3.运行容器,分别使用macnet1和macnet2网络

4.验证网络的连通性

 

在mac1去ping mac2无法ping通,毕竟他们不在同一个网段 ,下面我们在docker1上做同样的操作

1.配置vlan

2.创建macvlan网络

3.运行容器,分别使用macnet3和macney4

4.验证容器的连通性

macnet3ping不通macnet4

我们再来试试docker1上的macnet3能不能ping通docker2上的macnet1,因为他们是在同一个网段

按正常来说他们是能够正常进行通信的,但是由于我的是在esxi的虚拟机上面做的实验,需要在esxi中设置ens192为trunk口,允许所有vlan通过后试验才会生效

即:同一个macvlan下的网络能ping通,不同的macvlan网络之间不能通信。但是更准确的说法是:不同的macvlan网络不能在二层上通信。在三层可以通过网关进行通信

现在的拓扑如下:盗图

 

 

 

下面测试通过启用网关的形式,使不同网段的macvlan打通

1.先将192。168.7.222配置成一个虚拟记得路由,设置网关并转发VLAN10和VLAN20的流量。当然使用物理路由也可以达到这种效果

确保192.168.7.222的IP Forwarding已经启用

sysctl net.ipv4.ip_forward查看是否开启转发,1表示开启,0表示没有开启

sysctl -w net.ipv4.ip_forward=1设置开启

2.在/etc/sysconfig/network-scripts/下设置192.168.7.222的sub-interface

3.将网关的IP配置到sub-interface:

ifconfig ens192.10 192.168.10.1 netmask 255.255.255.0 up

ifconfig ens192.10 192.168.20.1 netmask 255.255.255.0 up

4.设置防火墙规则;

iptables -t nat -A POSTROUTING -o eth2.10 -j MASQUERADE

iptables -t nat -A POSTROUTING -o eth2.20 -j MASQUERADE

iptables -A FORWARD -i eth2.10 -o eth2.20 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth2.20 -o eth2.10 -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A FORWARD -i eth2.10 -o eth2.20 -j ACCEPT
iptables -A FORWARD -i eth2.20 -o eth2.10 -j ACCEPT

5.当前的网络拓扑:盗图

现在不同的macvlan之间也可以进行通信

下面的图是容器之间的通信过程:盗图

1.因为容器在不同的网段,所以使用路由进行转发

 

 

 

macvlan网络的连通性和隔离性完全依赖VLAN,IP subnet和路由,docker 本身不做任何限制,用户可以像管理传统VLAN网络那样管理macvlan

 


推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 选择适合生产环境的Docker存储驱动
    本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ... [详细]
  • 配置多VLAN环境下的透明SQUID代理
    本文介绍如何在包含多个VLAN的网络环境中配置SQUID作为透明网关。网络拓扑包括Cisco 3750交换机、PANABIT防火墙和SQUID服务器,所有设备均部署在ESXi虚拟化平台上。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • Docker 自定义网络配置详解
    本文详细介绍如何在 Docker 中自定义网络设置,包括网关和子网地址的配置。通过具体示例展示如何创建和管理自定义网络,以及容器间的通信方式。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有