Openstack Liberty网络架构实现分析(一)

春节前在研究Openstack最新版本Liberty网络时,发现了一篇较好的介绍Liberty网络实现和一些新技术的文章。经过仔细研究后决定写写研究后的体会。

此系列文章分为7个部分,分别介绍:

1.Liberty网络总览

2.网络架构

3.Neutron配置

4.网络创建

5.添加路由、网络和子网

6.在租户网络启动虚机

7.在FLAT网络启动虚机

文章连接:OpenStack Liberty Neutron Deployment (Part 1-7 Overview) http://www.opencloudblog.com/?p=557

下面我也会分7个部分来写写自己阅读和实验后的一些心得体会。

1、Liberty网络总览

从构架图中可以看到节点、网络和服务的总体架构,其中有一下几点比较重要:

1.在传统三节点(控制、网络、计算)环境中,添加了API节点,API节点暴露给外部网络,保证控制节点不直接对外,以此提高系统的安全性。

2.网络方面涉及以下内容:

1)内网和外网两个路由器,内网路由器单纯跑管理数据,保证各个节点之间通讯。

2)外网路由器包含API访问网络、虚机网络和Vxlan网络

3.各个节点跑的服务分布来看基本和传统Openstack一致,但其中nova-metadata元数据服务,从控制节点挪到了网络节点,此改变会减小虚机访问元数据信息对网络造成的压力。

4.为租户提供的虚拟网络资源

1)每个租户可以添加路由器挂接floating pool浮动ip池网络与租户自身内网实现虚机访问外网

2)为租户提供多个浮动IP池网络,并且浮动IP池网络的gateway可以是一个物理router

3)为租户提供多个flat网络,flat网络提供物理的router,只有虚机能够连接这个网络。

2.网络架构

根据以上节点和网络图可以发现:

1)两个floating网络使用vlan100和vlan101,snat和dnat通过iptables路由

2)两个flat网络使用vlan200和vlan201,虚机不需iptables路由

3)Vxlan网络使用vlan4000

在使用Vxlan和GRE隧道模式时,因为会对IP和UDP报文添加隧道头信息,造成报文MTU超过1500的情况,传统解决方案有通过DHCP下发MTU=1400配置给虚机,降低虚机的MTU数值以达到保证报文小于1500,由于会导致生产环境产生大的问题,作者不推荐降低MTU数值,作者建议修改交换机MTU为1600保证网络包的转发。

具体vlan配置信息:

vlan 100 name Floating-Pool-1

vlan 101 name Floating-Pool-2

vlan 200 name Flat-Net-1

vlan 201 name Flat-Net-2

# set the mtu to 1600 for vlan 4000

vlan 4000 name vxlan mtu 1600

# do not use vlan 1 for untagged packets

vlan 4090 name native vlan

#

############

#

interface vlan 100

description Floating-Network-1

ip address 198.18.0.1/20

interface vlan 101

description Floating-Network-2

ip address 198.18.16.1/20

interface vlan 200

description Flat-Network-1

ip address 198.19.1.1/24

interface vlan 201

description Flat-Network-2

ip address 198.19.2.1/24

# a L3 interface for the vxlan vlan may be added

#

#############

#

# the ports to the nodes (network and compute)

# They use the same config !

# just one link to each node - multiple links using LACP may also be used

interface port1

description to-network-node

mode trunk

trunk native vlan 4090

trunk vlan 100,101,200,201,4000,4090

mtu 1600

interface port2

description to-compute-node

mode trunk

trunk native vlan 4090

trunk vlan 100,101,200,201,4000,4090

mtu 1600

网络节点配置

网络节点和计算节点的配置使用了一个物理口或一个绑定端口实现了虚机流量的传输还是非常有创新的一种配置方式。如果按照官方Openstack的部署方案,可能就需要四个物理网卡来支撑此种网络配置,但按作者的方案,可以通过一个物理网口实现这四个网口的功能,这样还是会大大降低组网的复杂度,也是一种不错的解决方案。

1)Vxlan的物理口可以不需要,因为Vxlan传输需要的是IP层地址,可以在br-uplink上创建internal port(l3vxlan),并给port配置一个IP地址,来实现Vxlan隧道信息的传输。

2)br-uplink是建立在一个物理网口例如eth1上的一个ovs网桥,它实现了隧道网络br-tun和vlan网络br-vlan的上联功能。

3)br-uplink和它与br-int与br-vlan的patch对虚拟网卡设备需要用户自己创建,br-tun、br-vlan和br-int网桥设备由Openstack代码创建和维护。

4)传统Openstack方案两个floating外网池对应两个L3 agent并且分配两个物理网卡配置br-ex外网桥。可实际上L3 agent现在已经足够智能,可以使用任何网桥设备了。任何一个L3 agent可以管理多个floating pools。

5)Liberty Neutron代码已经不必须使用br-ex来实现L3 agent的路由功能

网络节点和计算节点虚拟设备配置:

#

# the bridge, which connects the nodes to the transport network

ovs-vsctl add-br br-uplink

# the bridge used by Openstack Neutron to connect vlans and flatdhcp networks

ovs-vsctl add-br br-vlan

# the integration bridge used by Openstack

ovs-vsctl add-br br-int

#

# add the uplink (with dot1q tags 101,102,...)

# we assume, that eth1 is the uplink interface

ip link set dev eth1 up

# set the mtu of the physical uplink to the switch

ip link set dev eth1 mtu 1600

#

# disable gro and lro !! on the uplink

ethtool -K eth1 gro off

ethtool -K eth1 lro off

#

# enable for intel NICs udp port hashing to distribute traffic to different queues

ethtool -N eth1 rx-flow-hash udp4 sdfn

#

ovs-vsctl add-port br-uplink eth1 -- set port eth1 vlan_mode=trunk trunk=100,101,200,201,4000

#

# patch ports between br-uplink and br-vlan

ovs-vsctl add-port br-vlan patch-to-uplink -- set Interface patch-to-uplink type=patch options:peer=patch-to-vlan

ovs-vsctl add-port br-uplink patch-to-vlan -- set Interface patch-to-vlan type=patch options:peer=patch-to-uplink

#

# !! on br-uplink the allowed vlan tags on the patch port from br-vlan must be filtered using Openflow rules

# !! if this is not done, there is a risk that vlans from the infrastructure may get mixed with local vlans

# !! of br-int, if the neutron Openvswitch agent fails to set up the vlan mapping on br-vlan or br-int

# TBD

###

# create the Linux IP interface required for VXLAN transport

# this interface is attached to vlan 4000 of br-uplink

# XXX = Last octet of the VXLAN interface ip address of the node

ovs-vsctl add-port br-uplink l3vxlan tag=4000 -- set Interface l3vxlan type=internal

ip addr add 10.255.255.XXX/24 dev l3vxlan

ip link set dev l3vxlan up

# set the mtu of the logical vxlan interface

ip link set dev l3vxlan mtu 1600

3.Neutron配置

关于neutron配置项可以参考原文的配置,说几点比较重要的项:

1)在ml2_conf.ini中:

###>>>>>>>>> local_ip is only used on compute and network nodes ###

# local_ip = <ip address of the l3vxlan interface>

local_ip在此处需设置为l3vxlan openvswitch的internal port的ip地址,实现Vxlan隧道的ip

2)在l3_agent.ini中

#

# very important - set the two following entries to an empty string

# do not leave the default values

gateway_external_network_id =

external_network_bridge =

传统l3外部网络需要配置br-ex外网网桥,由于liberty网络的l3 agnet可以不指定外网网桥,外网ip的qg虚拟设备可以建立在网络节点br-int集成网桥中,以实现l3路由的snat和dnat。

metadata_ip = 127.0.0.1

传统openstack的nova-metadata服务部署在控制节点,但此处metadata服务部署在network节点中,因此metadata_ip需配置为127.0.0.1

3)在nova-metadata.conf中

metadata_host = 127.0.0.1

metadata_listen = 127.0.0.1

在此metadata服务只监听本地127.0.0.1

以上步骤基本完成了liberty网络环境准备工作,下一部分将就介绍网络、路由、外网配置与虚机创建。

作者简介:赵俊峰,现为北京新云东方系统科技有限责任公司 云计算部Openstack开发工程师。主要从事Power和x86混合环境下Openstack相关计算、网络、存储相关服务软件开发和系统架构设计工作。

时间: 2024-10-04 11:27:26

Openstack Liberty网络架构实现分析(一)的相关文章

深入理解openstack网络架构(1)

原文地址: https://blogs.oracle.com/ronen/entry/diving_into_openstack_network_architecture 前言 openstack网络功能强大同时也相对更复杂.本系列文章通过Oracle OpenStack TechPreview介绍openstack的配置,通过各种场景和例子说明openstack各种不同的网络组件.本文的目的在于提供openstack网络架构的全景图并展示各个模块是如何一起协作的.这对openstack的初学者

二、OpenStack入门 之 架构分析

OpenStack入门 之 架构分析 写在前面 学习目标: 了解 OpenStack 各组件的逻辑关系: 了解 OpenStack 的各组件的通信和部署关系: 了解 OpenStack 的工作流程: 接下来我会掌握: OpenStack 组件间的逻辑关系: OpenStack 的API: OpenStack 组件间的通信关系: OpenStack 中几种不同的存储: OpenStack 工作流程: OpenStack 的部署架构: OpenStack 各组件之间的关系有:逻辑关系,通信关系,部署

Openstack liberty源码分析 之 云主机的启动过程3

接上篇Openstack liberty源码分析 之 云主机的启动过程2, 简单回顾下:nova-conductor收到nova-scheduler返回的主机列表后,依次发送异步rpc请求给目标主机的nova-compute服务,下面继续来看nova-compute服务的处理过程: nova-compute 根据路由映射,nova-compute中处理云主机启动请求的方法为 nova/compute/manager.py.ComputeManager.py.build_and_run_insta

openstack网络架构 nova-network + neutron

openstack网络架构(nova-network/neutron) openstack网络体系中,网络技术没有创新,但用到的技术点非常庞杂,包括bridge.vlan.gre.vxlan.ovs.openflow.sdn.iptables等,当然这里不会做具体技术介绍,概述技术,主要将其与openstack的结合点做详细分析. nova-network网络架构 在nova-network中,其网络模型包括flat.dhcp flat.vlan,用到的技术主要有bridge.vlan, dhc

OpenStack入门 之 架构分析

学习目标: 了解 OpenStack 各组件的逻辑关系: 了解 OpenStack 的各组件的通信和部署关系: 了解 OpenStack 的工作流程: 接下来我会掌握: OpenStack 组件间的逻辑关系: OpenStack 的API: OpenStack 组件间的通信关系: OpenStack 中几种不同的存储: OpenStack 工作流程: OpenStack 的部署架构: OpenStack 各组件之间的关系有:逻辑关系,通信关系,部署关系- 1. OpenStack组件之间的逻辑关

深入理解openstack网络架构(4)-----连接到public network

原文地址: https://blogs.oracle.com/ronen/entry/diving_into_openstack_network_architecture3 在上一篇文章中,我们介绍了openstack中的路由,了解到openstack如何通过namespace实现的router将两个network连通.本文中,我们进一步分析路由功能,说明实现内部internal network和public network的路由(而不仅仅是internal network之间).我们还会分析n

Jafka源代码分析——网络架构

在kafka中,每一个broker都是一个服务器.按照一般理解,服务器就是一个SocketServer,其不断接收用户的请求并进行处理.在Java中进行网络连接有两种方式一种为阻塞模式一种为非阻塞模式.Jafka采用非阻塞模式进行网络通讯.在Java的非阻塞模式中,建立socket server的一般流程如下: 1.启动ServerSocketChannel并将其绑定到特定的端口. 2.将ServerSocketChannel以及其感兴趣的操作注册到Selector,在这里感兴趣的操作是Acce

深入理解openstack网络架构(2)----Basic Use Cases

原文地址: https://blogs.oracle.com/ronen/entry/diving_into_openstack_network_architecture1 译文转自: http://blog.csdn.net/halcyonbaby/article/details/41578293 在上一篇文章中,我们了解了几个网络组件,如openvswitch/network namespace/Linux bridges/veth pairs.这篇文章中,我们将用3个简单的use case

Openstack liberty 创建实例快照源码分析1

Openstack liberty中也支持对云主机执行快照,快照是备份系统中一种常用的数据保护技术,在生产系统故障后,能通过快照将系统快速恢复到快照时间点:那Openstack中的云主机快照是否也支持这种故障恢复呢?请看下文: Openstack支持对处于运行或者停止状态的云主机执行快照,另外Openstack既可以从镜像启动云主机,也可以从启动磁盘启动云主机,根据条件组合,可以执行下面4中快照: 镜像启动云主机的离线快照 镜像启动云主机的在线快照 磁盘启动云主机的离线快照 磁盘启动云主机的在线