标签:网络服务 plugin 网络 agent neutron openstack Neutron network
云计算openstack核心组件——neutron网络服务(8)
一、neutron 介绍: Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备;而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能需要创建、修改和删除网络,网络的连通性和隔离不已经太可能通过手工配置来保证了。 如何快速响应业务的需求对网络管理提出了更高的要求。传统的网络管理方式已经很难胜任这项工作,而“软件定义网络(software-defined networking, SDN)”所具有的灵活性和自动化优势使其成为云时代网络管理的主流。 Neutron 的设计目标是实现“网络即服务(Networking as a Service)”。为了达到这一目标,在设计上遵循了基于 SDN 实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术。 SDN 模式服务— NeutronSDN( 软件定义网络 ), 通过使用它,网络管理员和云计算操作员可以通过程序来动态定义虚拟网络设备。Openstack 网络中的 SDN 组件就是 Quantum.但因为版权问题而改名为Neutron 。 Neutron网络基本概念 (1)neutwork 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对多 关系。 (2)subnet subnet 是一个 IPv4 或者 IPv6 地址段。instance 的 IP 从 subnet 中分配。每个 subnet 需要定义 IP 地址的范围和掩码。 network 与 subnet 是 1对多 关系。一个 subnet 只能属于某个 network;一个 network 可以有多个 subnet,这些 subnet 可以是不同的 IP 段,但不能重叠。下面的配置是有效的: network A subnet A-a: 10.10.1.0/24 {"start": "10.10.1.1", "end": "10.10.1.50"} subnet A-b: 10.10.2.0/24 {"start": "10.10.2.1", "end": "10.10.2.50"} 但下面的配置则无效,因为 subnet 有重叠 network A subnet A-a: 10.10.1.0/24 {"start": "10.10.1.1", "end": "10.10.1.50"} subnet A-b: 10.10.1.0/24 {"start": "10.10.1.51", "end": "10.10.1.100"} 这里不是判断 IP 是否有重叠,而是 subnet 的 CIDR 重叠(都是 10.10.1.0/24)。但是,如果 subnet 在不同的 network 中,CIDR 和 IP 都是可以重叠的,比如 network A subnet A-a: 10.10.1.0/24 {"start": "10.10.1.1", "end": "10.10.1.50"} network B subnet B-a: 10.10.1.0/24 {"start": "10.10.1.1", "end": "10.10.1.50"} 这里大家不免会疑惑: 如果上面的IP地址是可以重叠的,那么就可能存在具有相同 IP 的两个 instance,这样会不会冲突? 简单的回答是:不会! 具体原因: 因为 Neutron 的 router 是通过 Linux network namespace 实现的。network namespace 是一种网络的隔离机制。通过它,每个 router 有自己独立的路由表。上面的配置有两种结果: 1. 如果两个 subnet 是通过同一个 router 路由,根据 router 的配置,只有指定的一个 subnet 可被路由。 2. 如果上面的两个 subnet 是通过不同 router 路由,因为 router 的路由表是独立的,所以两个 subnet 都可以被路由。 (3)port port 可以看做虚拟交换机上的一个端口。port 上定义了 MAC 地址和 IP 地址,当 instance 的虚拟网卡 VIF(Virtual Interface) 绑定到 port 时,port 会将 MAC 和 IP 分配给 VIF。 subnet 与 port 是 1对多 关系。一个 port 必须属于某个 subnet;一个 subnet 可以有多个 port。 小结: 下面总结了 Project,Network,Subnet,Port 和 VIF 之间关系。 Project 1 : m Network 1 : m Subnet 1 : m Port 1 : 1 VIF m : 1 Instance Neutron 功能 Neutron 为整个 OpenStack 环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和 VPN 等。Neutron 提供了一个灵活的框架,通过配置,无论是开源还是商业软件都可以被用来实现这些功能。 二层交换switching: Nova 的 Instance 是通过虚拟交换机连接到虚拟二层网络的。Neutron 支持多种虚拟交换机,包括 Linux 原生的 Linux Bridge 和 Open vSwitch。 Open vSwitch(OVS)是一个开源的虚拟交换机,它支持标准的管理接口和协议。 利用 Linux Bridge 和 OVS,Neutron 除了可以创建传统的 VLAN 网络,还可以创建基于隧道技术的 Overlay 网络,比如 VxLAN 和 GRE(Linux Bridge 目前只支持 VxLAN)。在后面章节我们会学习如何使用和配置 Linux Bridge 和 Open vSwitch。 三层路由routing: Instance 可以配置不同网段的 IP,Neutron 的 router(虚拟路由器)实现 instance 跨网段通信。router 通过 IP forwarding,iptables 等技术来实现路由和 NAT。我们将在后面章节讨论如何在 Neutron 中配置 router 来实现 instance 之间,以及与外部网络的通信。 负载均衡Load-Balancing: Openstack 在 Grizzly 版本第一次引入了 Load-Balancing-as-a-Service(LBaaS),提供了将负载分发到多个 instance 的能力。LBaaS 支持多种负载均衡产品和方案,不同的实现以 Plugin 的形式集成到 Neutron,目前默认的 Plugin 是 HAProxy。我们会在后面章节学习 LBaaS 的使用和配置。 防火墙Firewalling: Neutron 通过下面两种方式来保障 instance 和网络的安全性。 (1) Security Group 通过 iptables 限制进出 instance 的网络包。 (2) Firewall-as-a-Service FWaaS,限制进出虚拟路由器的网络包,也是通过 iptables 实现。 Neutron 优点: Openstack 中的 SDN 组件架构也属于可插拔类型。通过各种插件可以管控不同种类的交换机、路由器、防火墙、负载均衡器并实现 firewall as a service 等许多功能。通过软件来定义的网络,可以对整个云计算设施进行更为精细的掌控。 Neutron 部署方案 方案1:控制节点 + 计算节点: 控制节点:部署的服务包括:neutron server, core plugin 的 agent 和 service plugin 的 agent。 计算节点:部署 core plugin 的agent,负责提供二层网络功能。 这里有几点需要说明: 1. core plugin 和 service plugin 已经集成到 neutron server,不需要运行独立的 plugin 服务。 2. 控制节点和计算节点都需要部署 core plugin 的 agent,因为通过该 agent 控制节点与计算节点才能建立二层连接。 3. 可以部署多个控制节点和计算节点。 方案2:控制节点 + 网络节点 + 计算节点 在这个部署方案中,OpenStack 由控制节点,网络节点和计算节点组成。 控制节点:部署 neutron server 服务。 网络节点:部署的服务包括:core plugin 的 agent 和 service plugin 的 agent。 计算节点:部署 core plugin 的agent,负责提供二层网络功能。 这个方案的要点是将所有的 agent 从控制节点分离出来,部署到独立的网络节点上。- 控制节点只负责通过 neutron server 响应 API 请求。
- 由独立的网络节点实现数据的交换,路由以及 load balance等高级网络服务。
- 可以通过增加网络节点承担更大的负载。
- 可以部署多个控制节点、网络节点和计算节点。
- 为了支持各种现有或者将来会出现的优秀网络技术。
- 支持分布式部署,获得足够的扩展性。
- Neutron Server 接收到创建 network 的请求,通过 Message Queue(RabbitMQ)通知已注册的 Linux Bridge Plugin。
- Plugin 将要创建的 network 的信息(例如名称、VLAN ID等)保存到数据库中,并通过 Message Queue 通知运行在各节点上的 Agent。
- Agent 收到消息后会在节点上的物理网卡(比如 eth2)上创建 VLAN 设备(比如 eth2.100),并创建 bridge (比如 brqXXX) 桥接 VLAN 设备。
- plugin 解决的是 What 的问题,即网络要配置成什么样子?而至于如何配置 How 的工作则交由 agent 完成。
- plugin,agent 和 network provider 是配套使用的,比如上例中 network provider 是 linux bridge,那么就得使用 linux bridge 的 plungin 和 agent;如果 network provider 换成了 OVS 或者物理交换机,plugin 和 agent 也得替换。
- plugin 的一个主要的职责是在数据库中维护 Neutron 网络的状态信息,这就造成一个问题:所有 network provider 的 plugin 都要编写一套非常类似的数据库访问代码。为了解决这个问题,Neutron 在 Havana 版本实现了一个 ML2(Modular Layer 2)plugin,对 plgin 的功能进行抽象和封装。有了 ML2 plugin,各种 network provider 无需开发自己的 plugin,只需要针对 ML2 开发相应的 driver 就可以了,工作量和难度都大大减少。ML2 会在后面详细讨论。
- plugin 按照功能分为两类: core plugin 和 service plugin。core plugin 维护 Neutron 的 netowrk, subnet 和 port 相关资源的信息,与 core plugin 对应的 agent 包括 linux bridge, OVS 等; service plugin 提供 routing, firewall, load balance 等服务,也有相应的 agent。后面也会分别详细讨论。
- vlan type driver 会确保将 vlan100 的信息保存到 Neutron 数据库中,包括 network 的名称,vlan ID 等。
- linux bridge mechanism driver 会确保各节点上的 linux brige agent 在物理网卡上创建 ID 为 100 的 vlan 设备 和 brige 设备,并将两者进行桥接。
- Firewall 安全策略位于 router,保护的是某个 project 的所有 network。
- Security Group 安全策略位于 instance,保护的是单个 instance。
- Neutron 通过 plugin 和 agent 提供的网络服务。
- plugin 位于 Neutron server,包括 core plugin 和 service plugin。
- agent 位于各个节点,负责实现网络服务。
- core plugin 提供 L2 功能,ML2 是推荐的 plugin。
- 使用最广泛的 L2 agent 是 linux bridage 和 open vswitch。
- service plugin 和 agent 提供扩展功能,包括 dhcp, routing, load balance, firewall, vpn 等。
一 neutron 控制节点 部署
1. 3 网卡(eth0, eth1, eth2),计算节点 2 网卡(eth0, eth1)
nmtui 图形化界面设置 第三块网卡不启动
vim /etc/sysconfig/network-scripts/ifcfg-ens38 不设置ip地址
2 node1 登录数据库
mysql -uroot -p123
3 创立neutron数据库
CREATE DATABASE neutron;
4 设置密码 本地登录
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \ IDENTIFIED BY 'NEUTRON_DBPASS';
设置密码 远程登录 GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \ IDENTIFIED BY 'NEUTRON_DBPASS';
5 创建neutron用户
openstack user create --domain default --password=nettron neutron
6 创建neutron角色
openstack role add --project service --user neutron admin
7 创建neutron服务
openstack service create --name neutron \
--description ''openstack networking" network
8 创建端口
openstack endpoint create --region RegionOne \ network public http://node1:9696
openstack endpoint create --region RegionOne \ network internal http://node1:9696 openstack endpoint create --region RegionOne \ network admin http://node1:9696 9 安装软件包
yum install openstack-neutron openstack-neutron-ml2 \ openvswith openstack-neutron-openvswitch ebtables -y openstack-neutron-openvswitch 简称ovs
10 配置文件 neutron.conf
备份
cp neutron.conf neutron.conf.beifen
配置
cd /etc/neutron/
ls
vim neutron.conf 删除文件原有内容
文件内容在下一章的末尾配置文件
11 配置文件 ml2
cd /etc/neutron/plugins/ml2
vim ml2_conf.ini
[DEFAULT]
[ml2]
type_drivers = flat,vxlan 网络类型
tenant_network_types = vxlan 租户网络类型
mechanism_drivers = openvswitch,l2population 机制驱动
extension_drivers = port_security 端口安全策略
[ml2_type_flat]
[ml2_type_geneve]
[ml2_type_gre]
[ml2_type_vlan]
[ml2_type_vxlan]
vni_ranges = 1:1000 vxlan范围
[securitygroup]
enable_ipset = true
文件内容在下一章的末尾配置文件
12 配置文件
vim openvswitch_agent.ini
[DEFAULT]
[agent]
tunnel_types = vxlan
l2_population = True
[ovs]
tunnel_bridge = br-tun
local_ip = 192.168.254.63
bridge_mappings =
[securitygroup]
firewall_driver = iptables_hybrid
enable_security_group = true
[xenapi]
13 配置文件
cd /etc/neutron
ls
vim l3_agent.ini
[DEFAULT]
interface_driver = openvswitch
external_network_bridge = br-ex
[agent]
[ovs]
14 配置文件
cd /etc/neutron
ls
vim dhcp_agent.ini
[DEFAULT]
interface_driver = openvswitch
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
[agent]
[ovs]
15 配置文件
cd /etc/neutron
ls
vim metadata_agent.ini
[DEFAULT]
nova_metadata_ip = controller
metadata_proxy_shared_secret = METADATA_SECRET
[agent]
[cache]
16 修改nova 配置文件
cd /etc/nova/
vim nova.conf
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
17 建立软连接
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
18 同步数据库
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
19 启动nova api
systemctl restart openstack-nova-api.service
20 启动5项服务
systemctl start neutron-server.service \ neutron-dhcp-agent.service \ neutron-metadata-agent.service \
neutron-openvswitch-agent \
openvswitch
开机自启
systemctl enable neutron-server.service \ neutron-dhcp-agent.service \ neutron-metadata-agent.service \
neutron-openvswitch-agent \
openvswitch
21 布置外网用的网桥 连接第三块网卡 没有ip
vim l3_agent.ini
[DEFAULT]
interface_driver = openvswitch
external_network_bridge = br-ex 路由连接到br-ex上面 br-ex连接到第3块网卡
[agent]
[ovs]
ovs-vsctl add-br br-ex 创建br-ex的网桥
ovs-vsctl del-br br-ex 删除br-ex的网桥
ovs-vsctl show 显示查看
ovs-vsctl add-port br-ex ens38 br-ex 端口连接到第三块网卡ens38
ovs-vsctl show 显示查看 连接到一起了
22 开启路由agent
systemctl enable neutron-l3-agent.service
systemctl start neutron-l3-agent.service
查看状态
neutron agent-list
openstack network agent list
openstack compute service list 查看计算服务
nova service-list
openstack network service list
控制节点部署完成
二 neutron 计算节点 部署
1 下载包
yum install openvswitch openstack-neutron-openvswitch ebtables ipset -y
2 配置文件
vim /etc/neutron/neutron.conf 没有备注的注释掉
[DEFAULT] transport_url = rabbit://openstack:RABBIT_PASS@controller
[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
[oslo_concurrency] lock_path = /var/lib/neutron/tmp
3 配置文件
cd /etc/neutron/plugins/ml2/
vim openvswitch_agent.ini
[DEFAULT]
[agent]
tunnel_types = vxlan
l2_population = True
[ovs]
tunnel_bridge = br-tun
local_ip = 192.168.254.63 改成节点的第2个ip
bridge_mappings =
[securitygroup]
firewall_driver = iptables_hybrid
enable_security_group = true
[xenapi]
4 配置文件
vim /etc/nova/nova.conf
[neutron]
url = http://node1:9696 auth_url = http://node1:35357 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password =neutron
5 启动服务
systemctl restart openstack-nova-compute.service
6开启 neutron 服务
systemctl enable openvswitch neutron-openvswitch-agent
systemctl start openvswitch neutron-openvswitch-agent
在第一台控制节点查看
继续配置其他计算节点
标签:网络服务,plugin,网络,agent,neutron,openstack,Neutron,network 来源: https://www.cnblogs.com/it-peng/p/11363388.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。