OpenStack点滴03-Neutron

时间:2023-03-08 17:12:21

OpenStack Neutron是一个比较复杂的组件,如果说OpenStack安装部署过程哪一个组件最麻烦,那就肯定是网络组件Neutron了。

因为我对OpenStack网络这块也不是很熟,就把我所了解的记录一下。

典型的OpenStack网络分为管理网络、数据网络、外部网络,以下是一个图例:

OpenStack点滴03-Neutron

外部网络:用户调用Openstack的API;虚拟机要访问外网;外网要ssh到虚拟机。

数据网络:虚拟机之间的数据传输;虚拟机连接到虚拟路由。

管理网络:各模块之间交互;Message Queue。

在安装部署方面,Neutron分成多个模块分布在3个节点上。

Controller节点

neutron-server,用于接收API请求。

Network节点

neutron-l3-agent,用于创建和管理虚拟路由、namespace、iptables。

neutron-dhcp-agent,创建和管理DHCP服务器,每个虚拟网络都有一个DHCP服务器。

neutron-openvswitch-agent,创建虚拟的L2 switch,Router和DHCP Server都会连接到二层的switch上。

Compute节点

neutron-openvswitch-agent,创建虚拟的L2的switch的,虚拟机的网卡连接到二层的switch上。

下图是一个简单的场景:1个租户,2个网络和1个路由。

OpenStack点滴03-Neutron

分析Compute Host和Network Host上网络虚拟化的实现:

Compute Host

OpenStack点滴03-Neutron

TAP device:KVM和Xen等hypervisor实现的虚拟网卡(eg VIF、vNIC),比如图中的vnet0。发送到TAP设备的frame会被guest OS收到。

veth pair:一对直接连接的虚拟网络接口。以太网帧发送到其中一个veth pair,另一个veth pair就会收到。

Linux Bridge:就像一个简单的交换机。

Open vSwitch:一个虚拟交换机软件,网络接口连接到openvswitch的port,port可以像物理交换机一样配置,包括VLAN配置。

Integration bridge

  br-int:所有guest都连接到br-int,通过配置br-int ports可以实现网络隔离。

Physical connectivity bridge

  br-eth1:提供到物理网卡eth1的连接,通过veth pair连接br-int。

VLAN translation

  net01和net02各自有VLAN ID号 1 和 2,分别对应物理网络VLAN ID 101和102,openvswitch agent负责在br-int和br-eth1上配置flow rule,使其对应上。

Security groups: iptables and Linux bridges

  理想情况下,TAP device直接连接到br-int,但是为了实现安全组,所以中间加了linux bridge以及其他。因为OpenStack在TAP device(比如vnet0)上实现了安全组,但是带安全组的TAP device不能直接连接到openvswitch端口。

Network Host

OpenStack点滴03-Neutron

br-ex:和连接到外网的网卡(eth0)连接。

Open vSwitch internal ports

  openvswitch internal ports使得可分配多个地址给openvswitch。

DHCP agent

  DHCP agent用dnsmasq进程来提供DHCP服务。每个需要DHCP服务的网络都会有一个internal port,并且attach 一个dnsmasq进程给这个port。在之前的例子中,tapXXX对应net01_subnet01,tapWWW对应net02_subnet01。

L3 agent (routing)

  上例中,qr-YYY接口对应net01_subnet01,IP地址为192.168.101.1/24。qr-ZZZ对应net02_subnet01,IP地址为192.168.102.1/24。qg-VVV的IP地址为10.64.201.254/24。每个接口操作系统可见的,网络节点可以转发这个packets。

  L3 agent用iptables实现floating IP network address translation(NAT)。

Overlapping subnets and network namespaces

  有一个问题,就是如果管理网络也用了192.168.101.0/24地址段,那么host就会区分不开。所以通过namespaces来避免冲突,这里的namespace和编程语言中的作用空间有类似的效果。

  下图有三个namespace。分别是qdhcp-aaaa、qrouter-bbbb和qdhcp-cccc

  OpenStack点滴03-Neutron