OpenStack 网络管理
第七章 网络管理
1. Linux 网络虚拟化基础
1.1 物理网络与虚拟化网络
Server 服务 VM 虚拟机
NIC 网卡 vNIC 虚拟网卡
Switch 交换机 vSwitch 虚拟交换机
1.2 Linux网络虚拟化实现技术
1.2.1 网卡虚拟化
Linux网卡虚拟化-TAP/TUN/VETH
**TAP设备:**模拟一个二层的网络设备,可以接收和发送二层网包
**TUN设备:**模拟一个三层的网络设备,可以接收和发送三层网包
**VETH:**虚拟ethernet接口,通常以pair的方式出现,一端发出的网包,会被另一端接收,可以形成两个网桥之间的通道
1.2.2 交换机虚拟化
Linux交换机虚拟化-Linux bridge
Linux bridge:工作于二层的网络设备,功能类似于物理交换机
Bridge可以绑定Linux上的其他网络设备,并将这些设备虚拟化为端口
当一个设备被绑定到bridge时,就相当于物理交换机端口插入了一条连接着终端的网线
使用brctl命令配置Linux bridge:
brctl addbr BRIDGE
brctl addif BRIDGE DEVICE
Linux交换机虚拟化-Open vSwitch
Open vSwitch是产品级的虚拟交换机
Linux bridge更适用于小规模,主机内部间通信场景
Open vSwitch更适合于大规模、多主机间通信场景
Open vSwitch常用的命令:
ovs-vsctl add-br BRIDGE
ovs-vsctl add-port PORT
ovs-vsctl show BRIDGE
ovs-vsctl dump-ports-desc BRIDGE
ovs-vsctl dump-flows BRIDGE
1.2.3 网络隔离
Linux网络隔离-Network Namespace
Network namespace能创建多个隔离的网络空间,它们有独自的网络配置信息,例如网络设备、路由表、iptables等
不同网络空间中的虚拟机运行的时候仿佛自己就在独立的网络中
$ ip netns help
Usage: ip netns list
ip netns add NAME
ip netns delete NAME
ip netns identify PID
ip netns pids NAME
ip netns exec NAME cmd …
ip netns monitor
问题: OpenStack 节点上有哪些Linux虚拟网卡?
enp0s3:主机物理网卡;
tapxxxx: tap设备;
brqxxxx:bridge设备;
vxlan:vxlan子接口。
2. Neutron 简介
Neutron 本身是不依赖任何组件的
OpenStack Neutron是一个SDN网络项目,专注于在虚拟计算环境中提供网络即服务(NaaS)
Neutron允许用户创建由其他OpenStack服务管理的接口设备并将其连接到网络
Neutron作用
Neutron管理OpenStack环境中虚拟网络基础设施(VNI)和物理网络基础设施(PNI)的访问层面的所有网络方面
Neutron提供Network、Subnet、Router作为抽象对象,每个抽象对象都具有模仿其物理对应物的功能:Network包含Subnet,Router在不同Subnet和Network之间路由流量
其中:Internet通过外部网络 --> Router(路由) --> Network(网络)==> Subnet(子网)
Network 包括 Subnet
Neutron与其他服务的交互关系
Neutron 本身是不依赖任何组件的,但是Neutron 调用Nova模块的时候 需要 Keystone 认证服务
3. Neutron 概念
Neutron是一种虚拟网络服务,为OpenStack计算提供网络连通和寻址服务
为了便于操作管理,Neutron对网络进行了抽象,有如下基本管理对象:
- Network
- Subnet
- Port
- Router
- Floating IP
Neutron概念-Network
Network:网络
一个隔离的、虚拟二层广播域,也可看成一个Virtual Switch,或者Logical Switch
Neutron支持多种类型的Network,包括 Local、Flat、 VLAN、 VXLAN 和 GRE
Local:与其他网络和节点隔离。Local网络中的虚拟机只能与位于同一节点上同一网络的虚拟机通信,Local网络主要用于单机测试。
Flat:无VLAN tagging的网络。Flat网络中虚拟机能与位于同一网络的虚拟机通信,并可以跨多个节点。
VLAN:802.1q tagging网络。VLAN是一个二层的广播域,同一VLAN中的虚拟机可以通信,不同VLAN只能通过Router通信。VLAN网络可跨节点,是应用最广泛的网络类型。
VXLAN:基于隧道技术的overlay网络。VXLAN网络通过唯一的segmentation ID(也叫 VNI)与其他VXLAN网络区分。VXLAN中数据包会通过VNI封装成UDP包进行传输。因为二层的包通过封装在三层传输,能够克服VLAN和物理网络基础设施的限制。
GRE:与VXLAN类似的一种overlay网络,主要区别在于使用IP包而非UDP进行封装。
生产环境中,一般使用的是VLAN、VXLAN或GRE网络。
Neutron概念-Subnet
Subnet:子网
一个IPv4或者IPv6地址段。虚拟机的IP从Subnet中分配。每个Subnet需要定义IP地址的范围和掩码
Subnet必须与Network关联
Subnet可选属性:DNS,网关IP,静态路由
Neutron概念-Port
Port:端口
逻辑网络交换机上的虚拟交换端口
虚拟机通过Port附着到Network上
Port可以分配IP地址和Mac地址
Neutron概念-Router
Router:路由器
连接租户内同一Network或不同Network之间的子网,以及连接内外网
Neutron概念-Fixed IP
类似于网关-固定的网关
Fixed IP:固定IP
分配到每个端口上的IP,类似于物理环境中配置到网卡上的IP
Neutron概念-Floating IP
Floating IP:浮动IP
Floating IP是从External Network创建的一种特殊Port,可以将Floating IP绑定到任意Network中的Port上,底层会做NAT转发,将发送给Floating IP的流量转发到该Port对应的Fixed IP上
外界可以通过Floating IP访问虚拟机,虚拟机也可以通过Floating IP访问外界
Neutron概念-Physical Network
Physical Network:物理网络
在物理网络环境中连接OpenStack不同节点的网络,每个物理网络可以支持Neutron中的一个或多个虚拟网络
Neutron概念-Provider Network
Provider Network:
由OpenStack管理员创建的,直接对应于数据中心现有物理网络的一个网段
Provider Network通常使用VLAN或者Flat模式,可以在多个租户之间共享
Neutron概念-Self-service Network
Self-service Network:自助服务网络,也叫租户网络或项目网络
由OpenStack租户创建的,完全虚拟的,只在本网络内部连通,不能在租户间共享
Self-service Network通常使用VXLAN或者GRE模式,可以通过Virtual Router的SNAT与Provider Network 通信
Neutron概念-External Network
External Network:外部网络,也叫公共网络
一种特殊的Provider Network,连接的物理网络与数据中心或Internet相通,网络中的Port可以访问外网
一般将租户的Virtual Router连接到该网络,并创建Floating IP绑定虚拟机,实现虚拟机与外网通信
Neutron概念-Security Group
Security Group:安全组
安全组是作用在neutron port上的一组策略,规定了虚拟机入口和出口流量的规则
安全组基于Linux iptables实现
安全组默认拒绝所有流量,只有添加了放行规则的流量才允许通过
每个OpenStack项目中都有一个default默认安全组,默认包含如下规则:
拒绝所有入口流量、允许所有出口流量
4. Neutron 架构
Neutron 架构图
Neutron 架构原则
- 统一API
- 核心部分最小化
- 可插入式的开放架构
- 可扩展
Message Queue
- Neutron-server使用Message Queue与其他Neutron agents进行交换消息,但是这个Message Queue不会用于Neutron-server与其他OpenStack组件(如nova )进行交换消息。
L2 Agent
- 负责连接端口(ports)和设备,使他们处于共享的广播域(broadcast domain)。通常运行在Hypervisor上。
L3 Agent
- 负责连接tenant网络到数据中心,或连接到Internet。在真实的部署环境中,一般都需要多个L3 Agent同时运行。
DHCP agent
- 用于自动配置虚拟机网络。
Advanced Service
- 提供LB、Firewall和VPN等服务。
Neutron 架构说明
Neutron的架构是基于插件的,不同的插件提供不同的网络服务,主要包含如下组件:
Neutron Server
Core Plugin
Service Plugin
L3 Service Plugin
LB Service Plugin
Firewall Service Plugin
VPN Service Plugin
各种Agent
L2 (ovs-agent)
L3 Agent
DHCP Agent
MetaData Agent
Neutron组件-Neutron Server
Neutron Server = APIs + Plugins
API定义各类网络服务
Plugin实现各类网络服务
Neutron组件-Core Plugin
Core Plugin,主要是指ML2 Plugin(Modular Layer 2。),是一个开放性框架,提供基础的网络功能,使用不同的drivers调用不同的底层网络实现技术。
ML2 Plugin的Drivers主要分为以下两种:
- Type Driver:定义了网络类型,每种网络类型对应一个Type Driver;
- Mechanism Driver:对接各种二层网络技术和物理交换设备,如OVS,Linux Bridge等。Mechanism Driver从Type Driver获取相关的底层网络信息,确保对应的底层技术能够根据这些信息正确配置二层网络。
通过Type Driver和Mechanism Driver调用不同的底层网络技术,实现二层互通
Neutron组件-Service Plugin
Service Plugin用于实现高阶网络服务,例如路由、负载均衡、防火墙和VPN服务等
L3 Service Plugin主要提供路由,浮动IP服务等。
Neutron组件-Agent
Neutron Agent向虚拟机提供二层和三层的网络连接、完成虚拟网络和物理网络之间的转换、提供扩展服务等
5. Neutron 典型操作及流程
Neutron操作——常用命令,
例如:
- neutron net-create,创建网络;
- neutron net-list,查看网络列表信息;
- neutron subnet-list,查看子网列表信息
- neutron agent-list ,查看代理列表信息
- neutron port-create,创建端口;
- neutron router-interface-add,添加路由器接口等。
6. Neutron 网络流量分析
6.1 Linux Bridge + Flat/VLAN 网络
Neutron网络典型场景介绍
Neutron支持多种多样的网络技术和类型,可以自由组合各种网络模型
如下两种网络模型是OpenStack生产环境中常用的:
- Linux Bridge + Flat/VLAN网络
- 仅提供简单的网络互通,虚拟网络、路由、负载均衡等由物理设备提供
- 网络简单、高效,适合中小企业私有云网络场景
- Open vSwitch + VXLAN网络
- 提供多租户、大规模网络隔离能力,适合大规模私有云和公有云网络场景
Linux Bridge + Flat网络
Linux Bridge + VLAN网络