Openstack入门篇(十一)之neutron服务(控制节点)的部署与测试

  • 1.Neutron的介绍

  Neutron 为整个 OpenStack 环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和 *** 等。Neutron 提供了一个灵活的框架,通过配置,无论是开源还是商业软件都可以被用来实现这些功能。
Openstack的设计理念是把所有的组件当做服务来注册的。 Neutron就是网络服务。它将网络、子网、端口和路由器抽象化,之后启动的虚拟主机就可以连接到这个虚拟网络上,最大的好处是这些都可视化的在Horizon里得到了实现,部署或者改变一个SDN变得非常简单。
我们先通过如下一个简单的流程来了解客户机如何连接到网络上

  • 租户创建了一个网络,比方说net
  • 租户为此网络分配一个子网,比如192.168.56.0/24
  • 租户启动一个客户机,并指明一个网口连接到net
  • Nova通知Neutron并在net上创建一个端口,如port1
  • Neutron选择并分配一个IP给port1
  • 客户机通过port1就连接到了net上

  • 2.Neutron的架构

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

Neutron 由如下组件构成:

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

Plugin:处理 Neutron Server 发来的请求,维护 OpenStack 逻辑网络的状态, 并调用 Agent 处理请求。

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

network provider :提供网络服务的虚拟或物理网络设备,例如 Linux Bridge,Open vSwitch 或者其他支持 Neutron 的物理交换机。

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 设备(比如 eth0.100),并创建 bridge (比如 brqXXX) 桥接 VLAN 设备。

  • 3.flat network原理

flat network 是不带 tag 的网络,要求宿主机的物理网卡直接与 linux bridge 连接,这意味着: 
每个 flat network 都会独占一个物理网卡。

上图中 eth1 桥接到 brqXXX,为云主机提供 flat 网络。 
如果需要创建多个 flat network,就得准备多个物理网卡,如下图所示。

  • 4.neutron服务的部署与测试

 (1)编辑配置neutron.conf

编辑/etc/neutron/neutron.conf 文件并完成如下操作:
在 [database] 部分,配置数据库访问:

[database]
...
connection = mysql+pymysql://neutron:[email protected]/neutron
在[DEFAULT]部分,启用ML2插件并禁用其他插件:

[DEFAULT]
...
core_plugin = ml2
service_plugins =
在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:

[DEFAULT]
...
auth_strategy = keystone

[keystone_authtoken]
...
auth_uri = http://192.168.56.11:5000
auth_url = http://192.168.56.11:35357
memcached_servers = 192.168.56.11:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron
在[DEFAULT]部分,配置RabbitMQ消息队列访问权限:

[DEFAULT]
...
transport_url = rabbit://openstack:[email protected]
在[DEFAULT]和[nova]部分,配置网络服务来通知计算节点的网络拓扑变化:

[DEFAULT]
...
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True

[nova]
...
auth_url = http://192.168.56.11:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = nova
在 [oslo_concurrency] 部分,配置锁路径:

[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp
查看neutron所有配置项:

[[email protected]-node1 ~]# grep "^[a-z]" /etc/neutron/neutron.conf
auth_strategy = keystone
core_plugin = ml2
service_plugins =
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
transport_url = rabbit://openstack:[email protected]
connection = mysql+pymysql://neutron:[email protected]/neutron
auth_uri = http://192.168.56.11:5000
auth_url = http://192.168.56.11:35357
memcached_servers = 192.168.56.11:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron
auth_url = http://192.168.56.11:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = nova
lock_path = /var/lib/neutron/tmp

(2)配置 Modular Layer 2 (ML2) 插件

编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件并完成以下操作:
在[ml2]部分,启用flat和VLAN网络:

[ml2]
...
type_drivers = flat,vlan
在[ml2]部分,禁用私有网络:

[ml2]
...
tenant_network_types =
在[ml2]部分,启用Linuxbridge机制:

[ml2]
...
mechanism_drivers = linuxbridge
在[ml2] 部分,启用端口安全扩展驱动:

[ml2]
...
extension_drivers = port_security
在[ml2_type_flat]部分,配置公共虚拟网络为flat网络:

[ml2_type_flat]
...
flat_networks = public       <==指定普通用户创建的网络类型为 public
在 [securitygroup]部分,启用 ipset 增加安全组的方便性:

[securitygroup]
...
enable_ipset = True

(3)配置Linuxbridge代理

编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并且完成以下操作:

在[linux_bridge]部分,将公共虚拟网络和公共物理网络接口对应起来:

[linux_bridge]
physical_interface_mappings = public:eth0     <==指明 public 网络与物理网卡的对应关系
在[vxlan]部分,禁止VXLAN覆盖网络:

[vxlan]
enable_vxlan = False
在 [securitygroup]部分,启用安全组并配置 Linux 桥接 iptables 防火墙驱动:

[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

tips:理解此处的public与 eth0 的关系

public是 flat 网络的标识,在创建 flat 时需要指定 label(标识)。label 的名字可以是任意字符串,这里创建的标识为public。只要确保各个节点 ml2_conf.ini 中的 label 命名一致就可以了。

各个节点中 label 与物理网卡的对应关系可能不一样。这是因为每个节点可以使用不同的物理网卡将云主机连接到 flat network。

支持多个flat网络
如果要创建多个 flat 网络,需要定义多个 label,用逗号隔开,当然也需要用到多个物理网卡,如下所示:

[ml2_type_flat]
flat_networks = flat1,flat2

[linux_bridge]
physical_interface_mappings = flat1:eth1,flat2:eth2

(4)配置DHCP代理

编辑/etc/neutron/dhcp_agent.ini文件并完成下面的操作:

在[DEFAULT]部分,配置Linuxbridge驱动接口,DHCP驱动并启用隔离元数据,这样在公共网络上的实例就可以通过网络来访问元数据

[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver     <==使用 linux bridge 连接 DHCP                                                                                                                                          namespace interface。
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq           <==使用 dnsmasq 实现 DHCP。
enable_isolated_metadata = True
当创建 network 并在 subnet 上 enable DHCP 时,网络节点上的 DHCP agent 会启动一个 dnsmasq 进程为该 network 提供 DHCP 服务。

(5)配置元数据代理

编辑/etc/neutron/metadata_agent.ini文件并完成以下操作:

在[DEFAULT] 部分,配置元数据主机以及共享密码:

[DEFAULT]
...
nova_metadata_ip = 192.168.56.11
metadata_proxy_shared_secret = nobody

(6)配置计算服务来使用网络服务

编辑/etc/nova/nova.conf文件并完成以下操作:

[[email protected]-node1 ~]# vim /etc/nova/nova.conf
在[neutron]部分,配置访问参数,启用元数据代理并设置密码:

[neutron]
...
url = http://192.168.56.11:9696
auth_url = http://192.168.56.11:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron
service_metadata_proxy = True
metadata_proxy_shared_secret = nobody

(7)完成安装

①网络服务初始化脚本需要一个超链接 /etc/neutron/plugin.ini指向ML2插件配置文件/etc/neutron/plugins/ml2/ml2_conf.ini。如果超链接不存在,使用下面的命令创建它:

[[email protected]-node1 ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
②同步数据库

[[email protected]-node1 ~]# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
③重启计算API服务

[[email protected]-node1 ~]# systemctl restart openstack-nova-api.service
④当系统启动时,启动Networking服务并配置它启动

[[email protected]-node1 ~]# systemctl enable neutron-server.service   neutron-linuxbridge-agent.service neutron-dhcp-agent.service   neutron-metadata-agent.service
[[email protected]-node1 ~]# systemctl start neutron-server.service   neutron-linuxbridge-agent.service neutron-dhcp-agent.service   neutron-metadata-agent.service    

(8)创建“neutron”服务实体以及API端点

[[email protected] ~]# openstack service create --name neutron    --description "OpenStack Networking" network

[[email protected]-node1 ~]# openstack endpoint create --region RegionOne   network public http://192.168.56.11:9696

[[email protected]-node1 ~]# openstack endpoint create --region RegionOne   network internal http://192.168.56.11:9696

[[email protected]-node1 ~]# openstack endpoint create --region RegionOne   network admin http://192.168.56.11:9696

[[email protected]-node1 ~]# neutron agent-list

出现图中的3个笑脸,代表网络服务的成功了!!!

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

以下为网络底层变化原理的介绍:

  • 5.底层网络的变化

执行 brctl show,查看控制节点当前的网络结构。

Neutron 自动新建了public 对应的网桥brqc39c1348-5a,以及 dhcp 的 tap 设备tapae04cfac-d0。 
另外,tapae04cfac-d0 和物理网卡 eth0都已经连接到 bridge。
此时,flat network(public)网络结构如图:

  • 6.DHCP服务解析

DHCP agent 的配置文件位于 /etc/neutron/dhcp_agent.ini。

dhcp_driver 
使用 dnsmasq 实现 DHCP。

interface_driver 
使用 linux bridge 连接 DHCP namespace interface。

当创建 network 并在 subnet 上 enable DHCP 时,网络节点上的 DHCP agent 会启动一个 dnsmasq 进程为该 network 提供 DHCP 服务。

dnsmasq 是一个提供 DHCP 和 DNS 服务的开源软件。 
dnsmasq 与 network 是一对一关系,一个 dnsmasq 进程可以为同一 netowrk 中所有 enable 了 DHCP 的 subnet 提供服务。

网络创建完成,我们可以在linux-node1上进行查看dnsmasq的进程

dnsmasq 重要的启动参数:
--dhcp-hostsfile 
存放 DHCP host 信息的文件,这里的 host 在我们这里实际上就是 instance。 
dnsmasq 从该文件获取 host 的 IP 与 MAC 的对应关系。 
每个 host 对应一个条目,信息来源于 Neutron 数据库。

--interface 
指定提供 DHCP 服务的网络接口。 
dnsmasq 会在该网络接口上监听云主机的 DHCP 请求

思考:
从上面可以看到DHCP 的网络接口是tapae04cfac-d0,并非是ns-ae04cfac-d0,这是怎么一回事?
Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 如何独立的为每个 network 服务呢?
答案:是通过 Linux Network Namespace 隔离

每个 dnsmasq 进程都位于独立的 namespace, 命名为 
qdhcp-<\network id>

[[email protected] ~]# neutron net-list
+--------------------------------------+--------+------------------------------------------------------+
| id                                   | name   | subnets                                              |
+--------------------------------------+--------+------------------------------------------------------+
| c39c1348-5a8f-4291-9772-b03a22b085df | public | df82f43f-97fe-41d0-bdbd-933565102598 192.168.56.0/24 |
+--------------------------------------+--------+------------------------------------------------------+

[[email protected]-node1 ~]# ip netns list
qdhcp-c39c1348-5a8f-4291-9772-b03a22b085df (id: 0)

ip netns list 命令列出所有的 namespace。
qdhcp-c39c1348-5a8f-4291-9772-b03a22b085df就是public的namespace

其实,宿主机本身也有一个 namespace,叫 root namespace,拥有所有物理和虚拟 interface device。 
物理 interface 只能位于 root namespace。

新创建的 namespace 默认只有一个 loopback device。 
管理员可以将虚拟 interface,例如 bridge,tap 等设备添加到某个 namespace。

对于 public的 DHCP 设备tapae04cfac-d0,需要将其放到 namespaceqdhcp-c39c1348-5a8f-4291-9772-b03a22b085df 中,但这样会带来一个问题: 
tapae04cfac-d0 将无法直接与 root namespace 中的 bridge 设备brqc39c1348-5a连接。

Neutron 使用 veth pair 解决了这个问题。

veth pair 是一种成对出现的特殊网络设备,它们象一根虚拟的网线,可用于连接两个 namespace。向 veth pair 一端输入数据,在另一端就能读到此数据。

tapae04cfac-d0与ns-ae04cfac-d0 就是一对 veth pair,它们将 qdhcp-c39c1348-5a8f-4291-9772-b03a22b085df 连接到brqc39c1348-5a。如下图所示:

原文地址:https://www.cnblogs.com/linuxk/p/9454972.html

时间: 2024-11-03 21:03:19

Openstack入门篇(十一)之neutron服务(控制节点)的部署与测试的相关文章

Python学习(二):入门篇:python中流程控制与函数编写

python中流程控制与函数编写 Last Eidt 2014/5/2 转载请注明出处http://blog.csdn.net/jxlijunhao 一,流程控制 1)布尔逻辑 Python中利用True来表示逻辑真,False来逻辑假 not :非 and:与 or   :或 ==  :逻辑等 >>> False==True False >>> False==False True >>> not False True >>> Fal

OpenStack入门篇(九)之nova服务(控制节点)的部署与测试

1.Nova介绍 Nova是openstack最早的两块模块之一,另一个是对象存储swift.在openstack体系中一个叫做计算节点,一个叫做控制节点.这个主要和nova相关,我们把安装为计算节点成为:nova-compute,把除了nova-compute叫做控制节点.nova-compute是创建虚拟机的,只是创建虚拟机,所有的控制都在另一台上.OpenStack计算组件请求OpenStack Identity服务进行认证:请求OpenStack Image服务提供磁盘镜像:为OpenS

openstack M版安装 network(neutron)服务篇

安装配置network(neutron) 服务 Mitaka版本网络有两个选择,Provider network 和Self-service network,这里我们选择第二种. controller 节点 一.创建数据库 [[email protected] ~]# mysql -u root -p >>CREATE DATABASE neutron; >>GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost'   I

Ubuntu搭建Openstack平台(kilo)(五.neutron(一)控制节点)

一.neutron环境 参考文档:http://www.aboutyun.com/thread-13108-1-1.html http://docs.openstack.org/mitaka/install-guide-ubuntu/neutron-controller-install.html 1.创建neutron数据库并授权 创建 mysql -u root -p CREATE DATABASE neutron; 授权 GRANT ALL PRIVILEGES ON neutron.* T

OpenStack入门篇(七)之认证服务Keystone

一.Keystone的概述 Keystone是Openstack的组件之一,用于为Openstack家族中的其它组件成员提供统一的认证服务,包括身份验证,令牌的发放和校验,服务列表,用户权限的定义等.Openstack中任何组件均依赖与Keystone提供的服务. 二.Keystone的功能 用户与认证 用户权限与用户行为追踪. 服务目录 为每个组件服务提供一个可用的服务目录和相应的API入口端点. 三.Keystone基本概念 User 使用服务的用户,可以是人,服务或者系统,只要是使用了op

8.CentOS7下Openstack-Train版本安装--网络服务neutron(控制节点)

1.创建neutron数据库 [[email protected] ~]# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 918 Server version: 10.3.10-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, Maria

OpenStack入门篇(四)之KVM虚拟机介绍和管理

1.查看虚拟机,启动虚拟机 [[email protected] ~]# virsh list --all Id Name State ---------------------------------------------------- - CentOS-7-x86_64 shut off [[email protected]-node1 ~]# virsh start CentOS-7-x86_64 通过TightVNC连接,修改网络vi /etc/sysconfig/network-sc

OpenStack入门篇(一)之云计算的概念

1.云计算 云计算是一种按使用量付费的模式,这种模式提供可用的.便捷的.按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互. 2.IT系统架构的发展到目前为止大致可以分为3个阶段: 物理机架构 这一阶段,应用部署和运行在物理机上. 比如企业要上一个ERP系统,如果规模不大,可以找3台物理机,分别部署Web服务器.应用服务器和数据库服务器. 如果规模大一点,各种服务器可以采用集群架

OpenStack入门篇(五)之KVM性能优化及IO缓存介绍

1.KVM的性能优化,介绍CPU,内存,IO性能优化 KVM CPU-->qemu进行模拟ring 3-->用户应用 (用户态,用户空间)ring 0-->操作系统 (内核态,内核空间)虚拟化难题?(1)CPU优化:上下文切换:宿主机ring 0ring 3虚拟机ring 0ring 3处理器设置-->Inter VT-x/EPT或AMD-V/RVI(V)缓存:L1-->静态内存L2.L3-->动态内存虚拟机在宿主机上是一个进程,受进程调度器的管理.容易导致Cache