OpenStack云计算(三)neutron

neutron 介绍:

Neutron 概述传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备;而云环境下的网络已经变得非常复杂,特别是在多户场景里,用户随时都可能需要创建、修改和删除网络,网络的连通性和隔离不已经太可能通过手工配置来保证了。

如何快速响应业务的需求对网络管理提出了更高的要求。传统的网络管理方式已经很难胜任这项工作,而"软件定义网络(softwaredefined networking,SDN)"所具有的灵活性和自动化优势使其成为云时代网络管理的主流。

Neutron的设计目标是实现"网络即服务( Networking as a Service )"。为了达到这一目标,在设计上遵循了基于SDN实现网络虚拟化的原则,在实现上充分利用了Linux系统上的各种网络相关的技术。

SDN模式服务-NeutronSDN(软件定义网络),通过使用它,网络管理员和云计算操作员可以通过程序来动态定义虚拟网络设备。Openstack网络中的SDN组件就是Quantum.但因为版权问题而改名为Neutron .

二.Neutron网络基本概念

(1)Network:

network是一个隔离的二层广播域。Neutron支持多种类型的network ,包括local, flat, VLAN, VxLAN和GRE.

Local:

local网络与其他网络和节点隔离。local网络中的instance只能与位于同一节点上同一网络的instance通信, local网络主要用于单机测试。

Flat:

flat网络是无vlan tagging的网络。flat网络中的instance能与位于同一网络的instance通信,并且可以跨多个节点。

Vlan:

vlan网络是具有802.1q tagging的网络。vlan是一个二层的广播域,同一vlan中的instance可以通信,不同vlan只能通过router通信。vlan网络可跨节点,是应用最广泛的网络类型。

Vxlan:

vxlan是基于隧道技术的overlay网络。vxlan网络通过唯一的segmentation ID (也叫VNI )与其他vxlan网络区分。vxlan中数据包会通过VNI封装成UDP包进行传输。因为二层的包通过封装在三层传输,能够克服vlan和物理网络基础设施的限制。

Gre

gre 是与 vxlan 类似的一种 overlay 网络。主要区别在于使用IP 包而非 UDP 进行封装。不同 network 之间在二层上是隔离的。

以vlan网络为例, network A和network B会分配不同的VLAN ID ,这样就保证了network A中的广播包不会跑到network B中。当然,这里的隔离是指二层上的隔离,借助路由器不同network是可能在三层上通信的。

network必须属于某个Project ( Tenant租户) , Project中可以创建多个network, network与Project之间是1对多关系。

  1. Subnet

subnet是一个IPv4或者IPv6地址段。instance的IP从subnet中分配。每个subnet需要定义IP地址的范围和掩码。

network与subnet是1对多关系。一个subnet只能属于某个network :一个network可以有多个subnet ,这些subnet可以是不同的IP 段,但不能重叠。

  1. Port

port可以看做虚拟交换机上的一个端口。port上定义了MAC地址和IP地址,当instance的虚拟网卡VIF ( Virtual Interface )绑定到port 时,port 会将 MAC 和IP 分配给 VIF.subnet与port是1对多关系。一个port必须属于某个subnet;一个subnet可以有多个port

Neutron 优点:

Openstack中的SDN组件架构也属于可插拔类型。通过各种插件可以管控不同种类的交换机、路由器、防火墙、负载均衡器并实现firewall as a service等许多功能。通过软件来定义的网络,可以对整个云计算设施进行更为精细的掌控。

Neutron由以下组件组成

Neutron Server

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

Lugin

处理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 等。

安装并配置控制节点

完成下面的步骤以创建数据库:

用数据库连接客户端以 root 用户连接到数据库服务器:

java 复制代码
$ mysql -u root -p

创建``neutron`` 数据库:

java 复制代码
CREATE DATABASE neutron;

对``neutron`` 数据库授予合适的访问权限,使用合适的密码替换``NEUTRON_DBPASS``:

java 复制代码
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \  

IDENTIFIED BY 'NEUTRON_DBPASS';

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \  

IDENTIFIED BY 'NEUTRON_DBPASS';

退出数据库客户端。

要创建服务证书,完成这些步骤:

创建``neutron``用户:prompt改为相应的密码

java 复制代码
$ openstack user create --domain default --password-prompt neutron

添加``admin`` 角色到``neutron`` 用户:

java 复制代码
$ openstack role add --project service --user neutron admin

创建``neutron``服务实体:

java 复制代码
$ openstack service create --name neutron \

  --description "OpenStack Networking" network

创建网络服务API端点:controller替换成对应的服务端点名称

java 复制代码
$ openstack endpoint create --region RegionOne \

  network public http://controller:9696

$ openstack endpoint create --region RegionOne \

  network internal http://controller:9696

$ openstack endpoint create --region RegionOne \

  network admin http://controller:9696

安装ovs软件包

java 复制代码
yum install openstack-neutron openstack-neutron-ml2 openvswitch openstack-neutron-openvswitch ebtables -y ebtables

配置服务组件

编辑``/etc/neutron/neutron.conf`` 文件并完成如下操作:

在 [database] 部分,配置数据库访问:controller可以替换为自己的服务端点

java 复制代码
[database]

...

connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron

在``[DEFAULT]``部分,启用Modular Layer 2 (ML2)插件,路由服务和重叠的IP地址:

java 复制代码
[DEFAULT]

...

core_plugin = ml2

service_plugins = router

allow_overlapping_ips = True

在 "[DEFAULT]" 和 "[oslo_messaging_rabbit]"部分,配置 "RabbitMQ" 消息队列的连接:controller可以替换为自己的服务端点

java 复制代码
[DEFAULT]

...

rpc_backend = rabbit

[oslo_messaging_rabbit]

...

rabbit_host = controller

rabbit_userid = openstack

rabbit_password = RABBIT_PASS

用你在RabbitMQ中为``openstack``选择的密码替换 "RABBIT_PASS"。

在 "[DEFAULT]" 和 "[keystone_authtoken]" 部分,配置认证服务访问:controller可以替换为自己的服务端点

java 复制代码
[DEFAULT]

...

auth_strategy = keystone

[keystone_authtoken]

...

auth_uri = http://controller:5000

auth_url = http://controller:35357

memcached_servers = controller:11211

auth_type = password

project_domain_name = default

user_domain_name = default

project_name = service

username = neutron

password = NEUTRON_PASS

将 NEUTRON_PASS 替换为你在认证服务中为 neutron 用户选择的密码。

在``[DEFAULT]``和``[nova]``部分,配置网络服务来通知计算节点的网络拓扑变化:

java 复制代码
[DEFAULT]

...

notify_nova_on_port_status_changes = True

notify_nova_on_port_data_changes = True

[nova]

...

auth_url = http://controller:35357

auth_type = password

project_domain_name = default

user_domain_name = default

region_name = RegionOne

project_name = service

username = nova

password = NOVA_PASS

使用你在身份认证服务中设置的``nova`` 用户的密码替换``NOVA_PASS``。

在 [oslo_concurrency] 部分,配置锁路径:

java 复制代码
[oslo_concurrency]

...

lock_path = /var/lib/neutron/tmp

配置 Modular Layer 2 (ML2) 插件 [++++¶++++](#配置 Modular Layer 2 (ML2) 插件¶)

ML2插件使用Linuxbridge机制来为实例创建layer-2虚拟网络基础设施

编辑``/etc/neutron/plugins/ml2/ml2_conf.ini``文件并完成以下操作

在``[ml2]``部分,启用flat,VLAN以及VXLAN网络:

java 复制代码
[ml2]

...

type_drivers = flat,vlan,vxlan

在``[ml2]``部分,启用VXLAN私有网络:

java 复制代码
[ml2]

...

tenant_network_types = vxlan

在``[ml2]``部分,启用Linuxbridge和layer-2机制:

java 复制代码
[ml2]

...

mechanism_drivers = openvswitch,l2population

在``[ml2]`` 部分,启用端口安全扩展驱动:

java 复制代码
[ml2]

...

extension_drivers = port_security

在``[ml2_type_flat]``部分,配置公共虚拟网络为flat网络

java 复制代码
[ml2_type_flat]

...

flat_networks = provider

在``[ml2_type_vxlan]``部分,为私有网络配置VXLAN网络识别的网络范围:

java 复制代码
[ml2_type_vxlan]

...

vni_ranges = 1:1000

++++``++++[securitygroup]``部分,启用 ++++ipset++++ 增加安全组规则的高效性:

java 复制代码
[securitygroup]

...

enable_ipset = True

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

如果是 Linuxbridge 可以参考官方文档进行相应的配置

OpenStack Docs: 网络选项2:私有网络

java 复制代码
[DEFAULT]

[agent]

 tunnel_types = vxlan

12_population = True

[ovs]

tunnel_bridge = br-tun

local_ip = 192.168.254.63

bridge_mappings =

[securitygroup]

firewa11_driver = iptables_hybrid

 enable_security_group = true

local_ip改为第二块网卡的ip

配置layer-3代理 ++++¶++++

Layer-3代理为私有虚拟网络提供路由和NAT服务

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

在``[DEFAULT]``部分,配置Linuxbridge接口驱动和外部网络网桥:

java 复制代码
[DEFAULT]

...

interface_driver = openvswitch

external_network_bridge =br-ex

配置DHCP代理 ++++¶++++

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

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

java 复制代码
[DEFAULT]

...

interface_driver = openvswitch

dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq

enable_isolated_metadata = True

配置元数据代理 ++++¶++++

The :term:++++`++++metadata agent <Metadata agent>`负责提供配置信息,例如:访问实例的凭证

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

在``[DEFAULT]`` 部分,配置元数据主机以及共享密码:controller替换为自己的服务节点

java 复制代码
[DEFAULT]

...

nova_metadata_ip = controller

metadata_proxy_shared_secret = METADATA_SECRET

用你为元数据代理设置的密码替换 METADATA_SECRET。

为计算节点配置网络服务 ++++¶++++

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

在``[neutron]``部分,配置访问参数,启用元数据代理并设置密码:

java 复制代码
[neutron]

...

url = http://controller:9696

auth_url = http://controller:35357

auth_type = password

project_domain_name = default

user_domain_name = default

region_name = RegionOne

project_name = service

username = neutron

password = NEUTRON_PASS

service_metadata_proxy = True

metadata_proxy_shared_secret = METADATA_SECRET

将 NEUTRON_PASS 替换为你在认证服务中为 neutron 用户选择的密码。

使用你为元数据代理设置的密码替换``METADATA_SECRET``

完成安装 ++++¶++++

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

java 复制代码
# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

同步数据库:

java 复制代码
# 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 服务:

java 复制代码
# systemctl restart openstack-nova-api.service

当系统启动时,启动 Networking 服务并配置它启动。

java 复制代码
systemctl enable neutron-server.service neutron-dhcp-agent.service openvswitch neutron-openvswitch-agent neutron-metadata-agent.service

systemctl start neutron-server.service neutron-dhcp-agent.service openvswitch neutron-openvswitch-agent neutron-metadata-agent.servicel

建立网桥并和网卡相连

java 复制代码
ovs-vsctl add-br br-ex

ovs-vsctl add-port br-ex eth2

启动代理并配置它开机自启动

java 复制代码
systemctl enable neutron-13-agent.service

systemctl start neutron-13-agent.service

查看neutron列表

java 复制代码
Neutron agent-list 或 openstack network agent list

修改对外连接网络配置属性

将etc/sysconfig/network-script/ifcfg-eth2中的配置修改

java 复制代码
BOOTPROTO=none

安装和配置计算节点

安装组件

和官方文档不一样,需注意 ++++))++++****

java 复制代码
yum install openvswitch openstack-neutron-openvswitch ebtables ipset -y

编辑``/etc/neutron/neutron.conf`` 文件并完成如下操作:

在``[database]`` 部分,注释所有``connection`` 项,因为计算节点不直接访问数据库。

在 "[DEFAULT]" 和 "[oslo_messaging_rabbit]"部分,配置 "RabbitMQ" 消息队列的连接:

java 复制代码
[DEFAULT]

...

rpc_backend = rabbit

[oslo_messaging_rabbit]

...

rabbit_host = controller

rabbit_userid = openstack

rabbit_password = RABBIT_PASS

用你在RabbitMQ中为``openstack``选择的密码替换 "RABBIT_PASS"。将controller替换为自己的服务节点

在 "[DEFAULT]" 和 "[keystone_authtoken]" 部分,配置认证服务访问:

java 复制代码
[DEFAULT]

...

auth_strategy = keystone

[keystone_authtoken]

...

auth_uri = http://controller:5000

auth_url = http://controller:35357

memcached_servers = controller:11211

auth_type = password

project_domain_name = default

user_domain_name = default

project_name = service

username = neutron

password = NEUTRON_PASS

将 NEUTRON_PASS 替换为你在认证服务中为 neutron 用户选择的密码。将controller替换为自己的服务节点

在 [oslo_concurrency] 部分,配置锁路径:

java 复制代码
[oslo_concurrency]

...

lock_path = /var/lib/neutron/tmp

配置网络选项 ++++¶++++

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

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

java 复制代码
[DEFAULT]

[agent]

tunnel_types = vxlan

12_population = True

[ovs]

tunnel_bridge = br-tun

local_ip = 192.168.254.62

bridge_mappings =

[securitygroup]

firewa11_driver = iptables_hybrid

enable_security_group = true

[xenapi]

Local_ip替换为第二块网卡

为计算节点配置网络服务 ++++¶++++

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

在``[neutron]`` 部分,配置访问参数

java 复制代码
[neutron]

...

url = http://controller:9696

auth_url = http://controller:35357

auth_type = password

project_domain_name = default

user_domain_name = default

region_name = RegionOne

project_name = service

username = neutron

password = NEUTRON_PASS

将 NEUTRON_PASS 替换为你在认证服务中为 neutron 用户选择的密码。

完成安装 ++++¶++++

重启计算服务:

java 复制代码
# systemctl restart openstack-nova-compute.service

# systemctl status openstack-nova-compute.service

设置openvswitch 为开机自启动

java 复制代码
systemctl start openvswitch neutron-openvswitch-agent

systemctl enable openvswitch neutron-openvswitch-agent

日志位置在var/log/文件夹里

相关推荐
翼龙云_cloud10 小时前
阿里云渠道商:如何手动一键扩缩容ECS实例?
运维·服务器·阿里云·云计算
电商API&Tina11 小时前
京东 API 数据采集接口接入与行业分析
运维·服务器·网络·数据库·django·php
AKAMAI12 小时前
基准测试:Akamai云上的NVIDIA RTX Pro 6000 Blackwell
人工智能·云计算·测试
China_Yanhy15 小时前
AWS EKS三种类别,如何选择
云计算·aws
Sammyyyyy16 小时前
Symfony AI 正式发布,PHP 原生 AI 时代开启
开发语言·人工智能·后端·php·symfony·servbay
xybDIY16 小时前
亚马逊云 Organizations 组织 Link 账号关联与解绑自动化解决方案
运维·自动化·云计算·aws
倪某某16 小时前
阿里云无影GPU部署WAN2.2模型
阿里云·云计算
倪某某17 小时前
阿里云ECS GPU部署WAN2.2
人工智能·阿里云·云计算
码农水水18 小时前
大疆Java面试被问:TCC事务的悬挂、空回滚问题解决方案
java·开发语言·人工智能·面试·职场和发展·单元测试·php
do better myself19 小时前
php 使用IP2Location限制指定的国家访问实现
开发语言·php