一、openstack网络概述
- openstack网络服务提供一个API让用户在云中建立和定义网络连接。该网络服务的项目名称是neutron。
- openstack所在的整个物理网络都会由neutron“池化”为网络资源池,neutron对这些网络资源进行处理,为项目(租户)提供独立的虚拟化环境。neutron创建各种资源对象并进行连接和整合。从而形成项目(租户)的私有网络。
二、网络基本概念
1、网络
- 类似于实际的物理环境中的网络,OpenStack网络用于连接云主机或路由器。除此之外,还包含子网、网关以及DHCP服务等。OpenStack网络分为内部网络和外部网络,内部网络一般用于连接虚拟机,而外部网络一般用于连接宿主机外面的网络。
2、子网
- OpenStack中的子网是一个IP地址段,用于定义实际的IP地址范围
3、端口
- 端口类似于实际网络中的网络接口,用于连接终端设备或另外一个网络。不同的是,OpenStack中端口连接的一般都是虚拟设备接口,如虚拟机的虚拟网卡或者路由器的虚拟接口等。端口还描述了相关的网络配置,例如可以在端口上配置MAC地址和IP地址。
4、路由器
- 路由器用于连接 OpenStack的内部网络和外部网络。类似实际路由器功能,支NAT功能,通过绑定浮动IP地址还可以实现地址映射
- Neutron分别提供了二层(L2)交换和三层(L3)路由抽象的功能,对应于物理网络环境中的交换机和路由器
三、网络模型
Neutron两种网络类型:
1、租户网络,内部网络,用于连接虚拟机
2、供应商网络,内部网络,用于连接虚拟机
Neutron 支持多种类型的 network,包括 local, flat, VLAN, VxLAN 和 GRE
local
- 所有组件装在一台机器上,多用于测试环境
flat
- 没有路由,没有隔离
vlan
- 具有802.1q tagging的网络,头部12字节,有隔离,支持租户数量4k
vxlan
- 隧道技术,有隔离,vxlan 中数据包会通过 VNI 封装成 UDP 包进行传输,租户内部通信可以跨越任意网络,头部封装24字节,可用租户数量多
gre
- gre 是与 vxlan 类似的一种 overlay 网络。主要区别在于使用 IP 包而非 UDP 进行封装
四、neutron基本架构
流程简介:
1、neutron运行在控制节点上,对外提供api接口(core和Extension)
2、当收到请求后会通过消息队列把请求交给插件neuron-plugin处理
3、插件会把请求的信息存储在数据库中,并通过消息队列通知各个节点上的代理
4、代理根据需求开始工作
五、neutron主要组件
Neutron-Server
- 对外提供 OpenStack 网络 API,接收请求,并调用 Plugin 处理请求。
Plugin
- 处理 Neutron Server 发来的请求,维护 OpenStack 逻辑网络状态, 并调用 Agent 处理请求。
Agent
- 处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能。
network-provider
- 提供网络服务的虚拟或物理网络设备,例如 Linux Bridge,Open vSwitch 或者其他支持 Neutron 的物理交换机。
Database
- 存放 OpenStack 的网络状态信息,包括 Network, Subnet, Port, Router 等。
六、组件详解
Neutron-server
neutron-server提供一组API来定义网络连接和IP地址,供Nova等客户端调用,它本身也是分层设计,其结构如下
Neutron-server包括4个层次,自上而下依次说明:
-
ResetfulAPI:属于最前端的API,包括CoreAPI和ExtensionAPI两种类型
(1)CoreAPI(核心api):提供网络,子网,端口的API
(2)ExetnsionAPI(扩展api):提供路由,负载均衡,fw,安全组的API -
Commnon Server:处理认证和校验 API 请求。
-
Neutron Core:Neutron server 的核心处理程序,通过调用相应的 Plugin 处理请求。
-
Core Plugin API:定义了 Core Plgin 的抽象功能集合,Neutron Core 通过该 API 调用相应的Core Plgin;
-
Extension Plugin API:定义了 Service Plgin 的抽象功能集合,Neutron Core 通过该 API调用相应的 Service Plugin;
Plugin
插件是neutron的一种api的后端实现,目的是增强扩展性。插件按照功能可分为core plugin和service plugin两种
(1)Core-plugin:Neutron中即为ML2,负责管理L2的网络连接,优点:在不同节点实现不同网络机制,只需要开发机制驱动,实现了网络子网和端口核心资源的同时,也实现了端口绑定,安全组等扩展资源
类型驱动:对应网络类型,flat local vlan vxlan gre
机制驱动:获取类型驱动维护网络的状态,确保在相应的网络设备上实现这现状态,目前基于代理的网络机制有2种,Linux bridge和Opens vSwitch
(2)Service Plugin:包括l3 router、firewall、loadbalancer、v*n、实现L3-L7的网络服务
Agent
Neuron-agent:处理plugin请求,负责在 network provider 上真正实现各种网络功能。和 plugin 是一一对应的关系
基于ML2插件网络机制的代理:
Linux bridge代理:二层网络虚拟化技术,支持local、vlan、vxlan、flat不支持GRE,虚拟机之间没有隔离。
如果选择linux bridge代理,如图所示:
计算节点上的数据需要到物理网卡需要经过:
- tap接口
- linux网桥:作为二层交换机
- vlan接口:用于连接linux网桥
- vxlan接口
- 物理网络接口:用于连接到物理网络
Opens vSwitch代理:支持local、flat、vlan、vxlan、gre等所有网络模型
如果选择linux bridge代理,如图所示:
如果选择ovs代理,计算节点上的数据需要到物理网卡需要经过:
- tap接口
- linux网桥
- veth对:用来连接2个虚拟网桥
- ovs网桥:ovs的核心设备,包括一个ovs集成网桥和ovs物理连接网桥
- 集成网桥(int-br):所有计算节点上运行的虚拟机都链接到集成网桥,neutron通过配置集成网桥上的端口实现虚拟机网络隔离。
- 物理网桥:链接物理网卡,在flat和vlan中使用provider
bridge,命名为br-ethx,在vxlan中使用ovs隧道网桥,命名为br-tun
基于Service Plugin插件的代理:
dhcp代理:虚拟机需要获取ip地址
主要组件:
1、DHCP代理(neutron-dhcp-agent),提供dhcp功能,提供元数据请求,提供2个接口,报告dhcp代理的网络状态,启动dnsmasq进程,检测DHCPdiscover请求
2、DHcp驱动:管理dhcp服务器,默认为DNSmasq,提供dns和dhcp,一个dnsmasq进程,能为同一网段中所有启动dhcp的子网服务
3、dhcp调度器:负责dhcp代理和网络(network)的调度
如图所示:
dhcp代理工作流程:
创建实例时,此实例的mac地址和ip会存在dnsmasq的hosts文件中
实例发出dhcpdiscover请求,dnsmasq检测到后会检查hosts文件,把对应项通过dhcpoffer消息将ip和网关给实例
实例发出dhcprequest
dnsmasq回复dhcpack
L3代理
每个L3代理运行在一个网络空间中,提供虚拟路由器,也支持物理路由通过iptables提供地址转换(snat,dnat)、浮动路由(floating)安全组(securitygroup)使不同网络的实例通信
dnat:目的地址转换 外到内
snat :内到外
浮动ip :静态映射,一对一,配在路由器提供网关的外网接口上。不再实例上。写在名称空间中的iptables中
neutron-l3-aget-float-snat比neutron-l3-agent-snat更早执行
网络名称空间
简介:
内核级别隔离网络的一种方法
Linux network namespace 可以将一个物理三层网络分割成
几个独立的虚拟三层网络,用能够实现dhcp隔离:可以同一网段重复使用
命令:
ip netns add---------创建网络名称空间
ip netns list -------查看所有的网络名称空间
ip netns exec +名称 ----进入指定的网络名称空间
ip netns exec netns0 ip address add 10.0.0.1/24 eth0—为netns0空间的eth0网卡添加ip地址
不同网络名称空间之间通信:用VETH对
命令:
ip link add veth1 type veth peername veth2 --------创建VETH对
ip link set veth1 netns netns1 -------将veth1放到netns1中
ip link set veth2 netns netns2 --------将veth2放到netns2中