使用ovs构建docker网络,实现跨主机通信与网络隔离
一、Open VSwitch简介
OVS简介
OpenvSwitch,简称OVS是一个虚拟交换软件,主要用于虚拟机VM环境,作为一个虚拟交换机,支持Xen/XenServer, KVM, and VirtualBox多种虚拟化技术。虽然是虚拟交换机,但是其工作原理与物理交换机类似。在虚拟交换机的实现中,其两端分别连接着物理网卡和多块虚拟网卡,同时虚拟交换机内部会维护一张映射表,根据MAC地址寻找对应的虚拟机链路进而完成数据转发。
OpenvSwitch是实现虚拟化网络的重要基础组件,在OpenStack中利用OpenvSwitch作为底层部件来完成虚拟网络提供和租户网络管理。OpenvSwitch可以实现访问控制功能,通过转发规则,可以实现简单的安全行为,包括通过、禁止等。
OVS组件

ovsdb-sever: OVS的数据库服务器,用来存储虚拟交换机的配置信息。它于manager和ovs-vswitchd交换信息使用了OVSDB(JSON-RPC)的方式。
ovs-vswitchd: OVS的核心部件,实现switch的daemon,包括一个支持流交换的Linux内核模块;和上层controller通信遵从OPENFLOW协议,与ovsdb-server通信使用OVSDB协议,和内核模块通过netlink通信,支持多个独立的datapath(网桥)。
ovs kernel module: OVS的内核模块,处理包交换和隧道,缓存flow,如果在内核的缓存中找到转发规则则转发,否则发向用户空间去处理。
ovs-vsctl: 查询和更新ovs-vswitchd的配置(通过对ovsdb进行配置)。
ovs-ofctl: 查询和控制OpenFlow交换机。
ovs-appctl: 发送命令消息,对daemon进行控制、查询ovs-dpctl 用来配置switch内核模块,一些Scripts and specs 辅助OVS安装在Citrix XenServer上,作为默认switch;
ovs-brcompatd 让ovs-vswitch替换Linuxbridge,包括获取bridge ioctls的Linux内核模块。
ovsdbmonitor GUI工具: 可以远程获取OVS数据库和OpenFlow的流表。
此外,OVS也提供了支持OpenFlow的特性实现,包括
ovs-openflowd:一个简单的OpenFlow交换机。
ovs-controller:一个简单的OpenFlow控制器。
ovs-pki:OpenFlow交换机创建和管理公钥框架。
ovs-tcpundump:tcpdump的补丁,解析OpenFlow的消息。
工作流程
支持OpenFlow的OVS核心架构主要包括OpenFlow协议支持和数据转发通路等两个部分。OVS的数据转发通路(datapath)主要用于执行数据交换工作,即负责从设备入端口接收数据包并依据流表信息对其进行管理,例如将其转发至出端口、丢弃或者进行数据包修改。而OVS的OpenFlow协议支持则用于实现交换策略,即通过增加、删除、修改流表项的方式告诉数据转发通路针对不同的数据流采用不同的动作。

报文从端口上来(1),在datapatch中转发,查询Flow Table(6),如果查到了直接转出去(7)。
如果未查询到,送到用户态(2),在vswitchd中查询软表,生成精确的flow table下发到kernel(4),然后报文被送回kernel继续转发(5),此时会再查询flow table(6),然后转发出去(7)。
·Datapath是在kernel mode。
·Datapath里是精确匹配,计算报文头的hash与流表进行匹配,匹配到了进行转发。
·Datapath里未匹配时,送到userspace进行软件查找转发,并在datapath里添加精确匹配流表。
·Datapath里的流会老化。
二、初始化环境
systemctl stop firewalld.service && systemctl disable firewalld.service
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
升级内核:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg

本文详细介绍了如何在CentOS7上利用Open VSwitch(OVS)构建Docker网络,实现跨主机通信与网络隔离。首先,文章介绍了OVS的基本概念、组件及工作流程。接着,讲述了初始化环境的步骤,包括禁用firewalld、更新内核和安装Docker与OVS。然后,通过实例展示了如何在单节点上使用OVS的VLAN划分网络,实现容器间的网络隔离。最后,讲解了如何利用Vxlan实现跨主机的容器通信,包括在两台主机上创建vxlan端口和验证通信过程。
最低0.47元/天 解锁文章
28

被折叠的 条评论
为什么被折叠?



