网络虚拟化 SDN (2)

Trunk 口:有两个交换机 A 和 B。 如何让 AB 上相同 VLAN 之间能够通信呢?办法是将 A 和 B 连起来。这样的端口就是Trunk口了。 VLAN1、2、3 的数据包在通过 Trunk 口到达对方交换机的过程中始终带着自己的 VLAN 标签。

物理交换机有VLAN的功能,那么Linux Bridge中又是如何实现VLAN的呢?

网络虚拟化 SDN

该图实际上就是在物理服务器中实现了一个虚拟交换机,该交换机具有VLAN的功能 。凡是连接在brvlan10(网桥)上的虚拟机,共同组建成一个局域网,id为10;凡是连接在brvlan20上的虚拟机,共同组建成一个局域网,id为20。eth0相当于是Trunk口,与外界交换信息。这样,

VM1发出的数据包,会打上tag为10的标签,并且只会在id为10的局域网中产生广播风暴,而不会转发到id为20的局域网中,它们之间是相互隔离开来的。如果现在有多台物理服务器,那么它们之间就通过trunk口相连接,里面的虚拟机,就可以在id相同的局域网中通信了。

Linux Bridge + VLAN = 虚拟交换机

三.Neutron    

“软件定义网络(software-defined networking, SDN)”是当今云时代网络管理的主流。Neutron 的设计目标是实现“网络即服务(Networking as a Service)”。Neutron 为 OpenStack 的整个环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和 VPN 等,Neutron 提供了一个灵活的框架。Neutron有如下几个重要功能:

1.二层交换(Switching):Nova 的 Instance 是通过虚拟交换机构建局域网的。Neutron 支持多种虚拟交换机,包括 Linux 原生的 Linux Bridge 和 OpenvSwitch。 OpenvSwitch(OVS)是一个开源的虚拟交换机,利用 Linux Bridge 和 OVS,Neutron 除了可以创建传统的 VLAN 网络,还可以创建基于隧道技术的 Overlay 网络,比如 VxLAN 和 GRE。

2.三层路由(routing):Instance 可以配置不同网段的 IP,即不同网段的虚拟机实现互相通信。Neutron 的 router(虚拟路由器)实现 instance 跨网段通信。router 通过 IP forwarding,iptables 等技术来实现路由和 NAT。

3.负载均衡:Load-Balancing-as-a-Service(LBaaS),提供了将负载分发到多个 instance 的能力。LBaaS 支持多种负载均衡产品和方案,不同的实现以 Plugin 的形式集成到 Neutron,目前默认的 Plugin 是 HAProxy。

4.要保证物理服务器的安全性,可以配一台防火墙。那么如何保证虚拟机的安全呢?

Neutron 通过下面两种方式来保障 instance 和网络的安全性。

Security Group 安全组:通过 iptables 限制进出 instance 的网络包。

Firewall-as-a-Service:FWaaS,限制进出虚拟路由器的网络包,也是通过 iptables 实现。

Neutron 管理的网络资源包括 Network,subnet 和 port

一个网络可以包含多个子网,一个子网会存在多个端口。port 可以看做虚拟交换机上的一个端口。port 上定义了 MAC 地址和 IP 地址,当 instance 的虚拟网卡 VIF(Virtual Interface) 绑定到 port 时,port 会将 MAC 和 IP 分配给该虚拟网卡。

network 是一个隔离的二层广播域。Neutron 支持多种类型的 network,包括 local, flat, VLAN, VxLAN 和 GRE。

flat:flat 网络是无 vlan tagging 的网络。flat 网络中的 instance 能与位于同一网络的 instance 通信,并且可以跨多个节点。

vlan:vlan 网络是具有 802.1q tagging 的网络。vlan 是一个二层的广播域,同一 vlan 中的 instance 可以通信,不同 vlan 只能通过 router 通信。

subnet 是一个 IPv4 或者 IPv6 地址段。instance 的 IP 从 subnet 中分配。每个 subnet 需要定义 IP 地址的范围和掩码

Neutron的架构:

与 OpenStack 的其他服务的设计思路一样,Neutron 也是采用分布式架构,由多个组件(子服务)共同对外提供网络服务。

网络虚拟化 SDN

Neutron 由如下组件构成:

Neutron Server:对外提供 OpenStack 网络 API,接收请求,并调用 Plugin 处理请求。

Plugin:处理 Neutron Server 发来的请求, 并调用 Agent 去处理请求。plugin 解决的是 What 的问题,即网络要配置成什么样子?而至于如何配置 How 的工作则交由 agent 完成。        

Agent:真正的处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能。

network provider:提供网络服务的虚拟或物理网络设备,例如 Linux Bridge,Open vSwitch 

Queue:Neutron Server,Plugin 和 Agent 之间通过 Messaging Queue 通信和调用(解耦)

Database:存放 OpenStack 的网络状态信息,包括 Network, Subnet, Port, Router 等。

以创建一个 VLAN100 的 network 为例,假设 network provider 是 linux bridge, 流程如下:

Neutron Server 接收到创建 network 的请求,通过 Message Queue(RabbitMQ)通知已注册的 Linux Bridge Plugin。

Plugin 将要创建的 network 的信息(例如名称、VLAN ID等)保存到数据库中,并通过 Message Queue 通知运行在各节点上的 Agent。

Agent 收到消息后会在物理节点的网卡(比如 eth0)上创建 VLAN 设备(比如 eth2.100),并创建 bridge (比如 brqXXX) 桥接 VLAN 设备。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwxdxz.html