neutron网络服务
一.neutron
1.概述
neutron:网络服务
- openstack的网络服务最主要的功能:为了虚拟机实例提供网络连接(最初由nova-compute实现,现在被专门的网络服务neutron取代)
- neutron为整个openstack环境提供软件定义网络支持(二层交换、三层路由、防火墙、VPN、负载均衡)
2.linux网络虚拟化
1.一台宿主机/操作系统中,模拟多个相同或不同的操作系统
2.虚拟化可以以软件的形式模拟硬件的功能
openstack网络服务最核心的是对二层物理网络进行抽象和管理
- 多个物理服务器可被虚拟机取代,部署在同一台物理服务器
虚拟机由虚拟机管理器(Hypervisor)实现,通常采用kvm,对服务器进行虚拟化的同时,网络也进行虚拟化 - 虚拟机管理器(Hypervisor)为虚拟机创建一个或多个虚拟网卡
虚拟网卡等同于虚拟机的物理网卡
物理交换机在虚拟网络中被虚拟为虚拟交换机
3.Linux虚拟网桥
与物理网卡相连(与交换机功能类似)
-
与物理机不同,虚拟机没有硬件设备,需要和物理机和其他虚拟机进行通信,可提供虚拟网桥设备,与物理交换机类似,在网桥上创建多个虚拟网络接口,每个网络接口与kvm虚拟机网卡相连
-
在KVM虚拟系统中,为支持虚拟机的网络通信,网桥接口的名称通常为vnet开头
-
veth对,成对出现,一组虚拟的网络接口,连接机器和网桥
4.虚拟局域网
一个网桥可桥接若干虚拟机,每个虚拟机发出广播会引发广播风暴,影响虚拟机网络性能
将多个虚拟机划分到不同的vlan中,同一vlan的虚拟机相当于连接同一网桥上
虚拟环境中,将vlan与网桥对应起来
将网桥划分到不同的vlan
- vlan作用:
1.划分广播域
2.安全(隔离,避免信息通过广播域的方式暴漏、泄露)
3.集中化管理
4.节省IP地址
基于什么方式进行划分:
vlan标签的方式打标签的vlan技术
5.开放虚拟交换机(ovs)
OVS定义: 分布式虚拟交换机
OVS特性:
1.跨平台移植
2.具有产品级质量
3.可以轻松实现物理交换机的各项功能
4.跨服务器,进行管理(基于分布式特性)可形成大规模虚拟网络,便于统计/集中化管理
1.兼容性
2.跨平台
-
与硬件交换机具有相同特性
可在不同虚拟平台之间移植
具有产品级质量的虚拟交换机
适合在生产环境中部署 -
交换设备在虚拟化对虚拟网络至关重要(二层交换的作用)
1.管理员可对物理交换机进行配置
2.控制服务器的网络接入
3.实现网络隔离,流量监控,QOS配置,流量优化
QOS:网络利用基础技术,安全机制,解决网络延迟和阻塞的一种技术
OVS优势:采用openvswitch(OVS)技术的虚拟机 可使用虚拟网络的管理、网络状态和流量的监控得以轻松实现
openswitch在云环境终端阿虚拟化平台上实现分布式虚拟交换机,可将不同主机上openswitch交换连接起来,形成一个大规模的虚拟网络
6.openstack网络基础服务
openstack网络服务提供一个API让用户在云中建立和定义网络连接,该网络服务的项目名称Neutron
openstack网络负责创建和管理虚拟网络基础架构(网络、交换机、子网和路由器)由openstack计算服务nova管理
1.openstack提供网络连接,相关网络技术,拓扑接受的服务是neutron
2.neutron可以提高基础网络服务和高级网络服务,但都是由nova进行管理
3.neutron 会为其他组件、服务、设备提供服务(集成)
二.netron网络结构
1.概述
简化neutron网络结构包括:一个外部网络、一个内部网络和一个路由器
- 默认情况下:项目之间的内部网络是相互隔离的,不能共享
- neutron内部访问:直接负责的区域,外部访问内部,不是由netron直接负责,属于个人,或者租户
netron需要实现内部网和路由器
2.网络子网与端口
网路:隔离的二层广播域,类似交换机中的vlan(netron支持多种类型网络flat、vlan、vxlan)
子网:一个IPV4或者IPV6地址段及相关配置状态,虚拟机实例的IP地址从子网中分配(DHCP地址池,netron的dhcp代理来实现的ip分配)
端口:连接设备的连接点,类似虚拟交换机上的网络端口,路由器、交换机、mac地址表 路由表接口:IP MAC 接口名称
- 通常可创建和配置网络、子网和端口来搭建虚拟网络,网络必须属于项目,一个项目可创建多个网络,一个子网可有多个端口
3.网络拓扑类型
flat
local
vlan
vxlan
GRE
local: 生产环境不用,测试使用
flat:同一局域网方式(一种简单的扁平网络拓扑)不适用vlan,没有多数据打vlan标签,无法进行网络隔离
vlan:主要由二层交换机来实现
支持802.1q协议的虚拟局域网,使用vlan标签数据包,实现网络隔离,同一vlan中
vxlan(虚拟扩展局域网):隧道技术
1.是vlan的一种扩展,提高瓶颈的一种解决方案,它有更大的扩展性和灵活性
2.STP防止环路(阻塞端口)vxlan的数据包封装到UDP通过传输和转发,可以完整利用三层路由
3.vxlan的数据包是分装的(快速和安全)
GRE:隧道技术IP over IP IP封装IP,支持全部的路由协议
总结:
网络虚拟化技术趋势在传统单层网络基础上叠加的一层逻辑网络
虚拟或逻辑的接口的连接,每一个虚拟或者逻辑的连接对于Underlay(承载)网络的一条路径
由多个前后连接的组成,不会关心底层基础网络进行大规模修改
vxlan、GRE、GENEVE都是基于隧道技术的叠加网络
4.网络基本架构
-
1.neutron-server 监听API接受/响应请求
-
2.根据请求类型,分配给对应的插件
插件---->控制对应的代理---->实现网络需求
代理:会需要要网络提供者给他技术/功能支持
1)neutron-server
- restful API:直接对客户端提供API服务
- common service:通用服务,负责对API请求进行检验,认证,并授权
- neutron core:核心处理程序,调用响应的插件API来处理API请求
5.典型的主节点部署
1)控制节点和计算节点结合
控制节点和计算节点都需要部署core plugin代理,因为控制节点与计算节点通过该代理,来能建立二层连接
2)控制节点和网络节点的结合
通过增加节点承担更大的负载,将所有的代理主键从上述控制节点分离出来,部署到独立的网络节点上
6.neutron主要插件、代理与服务
-
插件:管理代理
-
代理:负责具体的实现,为实例提供二三层连接,负责物理与虚拟网络的转换,处理元数据
-
二层:以太网与交换机)
-
三层:ip与路由
- L3:osi七层模型的三层
- DHCP:为实例分配IP地址
1)ML2插件
ML2插件诞生的原因:
1.缺陷:一个实列的网络中,只支持一种网络代理 linux bridge
2.缺陷:精细化控制(集中化管理),维护和开发新的插件,对于开发而言,难度会不断提高,运维难度也会提高
解决:允许在openstack网络中同时使用二层网络技术,不同的节点
类型驱动:负责维护网络类型的状态,验证验证,创建网络等工作
机制驱动:二层网络技术的控制
2)linux BRidge代理
linux BRidge代理
是neuton二层网络虚拟化技术
linux bridge可将一台主机上多个网卡连接起来,可桥接物理网卡,可是虚拟网卡
选择linux bridge代理,在计算节点上数据包从虚拟机发生到物理网卡需要经过设备
tap接口 | 用于网桥连接的虚拟网卡 |
---|---|
linux网桥 | 作为二层交换机 |
vlan接口 | 在vlan网络中用于连接网桥 |
vxlan接口 | 在vxlan网络中用于连接网桥 |
物理网络接口 | 用于连接到物理网络 |
3)Open vSwitch代理
与linux Bridge相比,ovs具有集中管理控制功能,而且性能优化,支持更多的功能
设备类型:
tap设备 | 用于网桥连接虚拟机网卡 |
---|---|
linux网桥 | 桥接网络接口 |
VETH对 | 直接相连的一对虚拟网络接口,用来连接两个虚拟网桥 |
OVS网桥 | 物理连接网桥直接连接到物理网卡,两个OVS网桥通过一个VETH对来对接 |
三
四.openstack_neutron部署
配置接着:nova部署
CT控制节点
CT VM:192.168.153.10 NAT:192.168.133.70
1.创建数据库neutron,并进行授权
mysql -u root -p
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';
flush privileges;
exit
2.创建用户、服务并赋权
创建neutron用户,用于在keystone做认证
openstack user create --domain default --password NEUTRON_PASS neutron
将neutron用户添加到service项目中拥有管理员权限
openstack role add --project service --user neutron admin
创建network服务,服务类型为network
openstack service create --name neutron --description "OpenStack Networking" network
3.注册API
注册API到neutron服务,给neutron服务关联端口,即添加endpoint
openstack endpoint create --region RegionOne network public http://ct:9696
openstack endpoint create --region RegionOne network internal http://ct:9696
openstack endpoint create --region RegionOne network admin http://ct:9696
4.安装提供者网络(桥接)并修改相关配置文件
1)ebtables包是用来管理iptables规则的
yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables conntrack-tools
2)修改主配置文件neutron.conf
cp -a /etc/neutron/neutron.conf{,.bak}
grep -Ev '^$|#' /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf
3)传参
openstack-config --set /etc/neutron/neutron.conf database connection mysql+pymysql://neutron:NEUTRON_DBPASS@ct/neutron
openstack-config --set /etc/neutron/neutron.conf DEFAULT core_plugin ml2
openstack-config --set /etc/neutron/neutron.conf DEFAULT service_plugins router
openstack-config --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips true
openstack-config --set /etc/neutron/neutron.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct
openstack-config --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
openstack-config --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_status_changes true
openstack-config --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_data_changes true
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken www_authenticate_uri http://ct:5000
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://ct:5000
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_type password
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name default
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name default
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_name service
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken username neutron
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken password NEUTRON_PASS
openstack-config --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp
openstack-config --set /etc/neutron/neutron.conf nova auth_url http://ct:5000
openstack-config --set /etc/neutron/neutron.conf nova auth_type password
openstack-config --set /etc/neutron/neutron.conf nova project_domain_name default
openstack-config --set /etc/neutron/neutron.conf nova user_domain_name default
openstack-config --set /etc/neutron/neutron.conf nova region_name RegionOne
openstack-config --set /etc/neutron/neutron.conf nova project_name service
openstack-config --set /etc/neutron/neutron.conf nova username nova
openstack-config --set /etc/neutron/neutron.conf nova password NOVA_PASS
4)修改 ML2 plugin 配置文件 ml2_conf.ini
cp -a /etc/neutron/plugins/ml2/ml2_conf.ini{,.bak}
grep -Ev '^$|#' /etc/neutron/plugins/ml2/ml2_conf.ini.bak > /etc/neutron/plugins/ml2/ml2_conf.ini
5)传参
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers flat,vlan,vxlan
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types vxlan
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers linuxbridge,l2population
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_flat flat_networks provider
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_vxlan vni_ranges 1:1000
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset true
6)修改 linux bridge network provider 配置文件
cp -a /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak}
grep -Ev '^$|#' /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak > /etc/neutron/plugins/ml2/linuxbridge_agent.ini
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings provider:eth0
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan enable_vxlan true
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan local_ip 192.168.153.10
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan l2_population true
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group true
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
7)修改内核参数
echo 'net.bridge.bridge-nf-call-iptables=1' >> /etc/sysctl.conf
echo 'net.bridge.bridge-nf-call-ip6tables=1' >> /etc/sysctl.conf
modprobe br_netfilter
sysctl -p
8)配置Linuxbridge接口驱动和外部网络网桥
cp -a /etc/neutron/l3_agent.ini{,.bak}
grep -Ev '^$|#' /etc/neutron/l3_agent.ini.bak > /etc/neutron/l3_agent.ini
openstack-config --set /etc/neutron/l3_agent.ini DEFAULT interface_driver linuxbridge
9)修改dhcp_agent 配置文件
cp -a /etc/neutron/dhcp_agent.ini{,.bak}
grep -Ev '^$|#' /etc/neutron/dhcp_agent.ini.bak > /etc/neutron/dhcp_agent.ini
openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT interface_driver linuxbridge
openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT dhcp_driver neutron.agent.linux.dhcp.Dnsmasq
openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT enable_isolated_metadata true
10)配置元数据代理、用于配置桥接与自服务网络的通用配置
cp -a /etc/neutron/metadata_agent.ini{,.bak}
grep -Ev '^$|#' /etc/neutron/metadata_agent.ini.bak > /etc/neutron/metadata_agent.ini
openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_host ct
openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT metadata_proxy_shared_secret METADATA_SECRET
11) 修改CT配置文件/etc/nova/nova.conf,用于neutron交互
openstack-config --set /etc/nova/nova.conf neutron url http://ct:9696
openstack-config --set /etc/nova/nova.conf neutron auth_url http://ct:5000
openstack-config --set /etc/nova/nova.conf neutron auth_type password
openstack-config --set /etc/nova/nova.conf neutron project_domain_name default
openstack-config --set /etc/nova/nova.conf neutron user_domain_name default
openstack-config --set /etc/nova/nova.conf neutron region_name RegionOne
openstack-config --set /etc/nova/nova.conf neutron project_name service
openstack-config --set /etc/nova/nova.conf neutron username neutron
openstack-config --set /etc/nova/nova.conf neutron password NEUTRON_PASS
openstack-config --set /etc/nova/nova.conf neutron service_metadata_proxy true
openstack-config --set /etc/nova/nova.conf neutron metadata_proxy_shared_secret METADATA_SECRET
12)创建ML2插件文件符号连接
网络服务初始化脚本需要/etc/neutron/plugin.ini指向ML2插件配置文件的符号链接
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
13)初始化数据库
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
5.重启相关服务
1)重启计算节点nova-api服务
systemctl restart openstack-nova-api.service
2)开启neutron服务、设置开机自启动
systemctl enable neutron-server.service \
neutron-linuxbridge-agent.service \
neutron-dhcp-agent.service \
neutron-metadata-agent.service
systemctl start neutron-server.service \
neutron-linuxbridge-agent.service \
neutron-dhcp-agent.service \
neutron-metadata-agent.service
netstat -anutp |grep 9696
3)因为配置了第三层L3网络服务、所以需要启动第三层服务
systemctl enable neutron-l3-agent.service
systemctl restart neutron-l3-agent.service
五.C1、C2计算节点操作
C1 VM:192.168.153.20 NAT:192.168.133.80
C2 VM:192.168.153.30 NAT:192.168.133.90
1.部署neutron服务
1)安装neutron即相关服务
yum -y install openstack-neutron-linuxbridge ebtables ipset conntrack-tools
#ipset:iptables的扩展,允许匹配规则的集合而不仅仅是一个IP
2)修改neutron.conf文件
cp -a /etc/neutron/neutron.conf{,.bak}
grep -Ev '^$|#' /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf
openstack-config --set /etc/neutron/neutron.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct
openstack-config --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken www_authenticate_uri http://ct:5000
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://ct:5000
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_type password
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name default
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name default
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_name service
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken username neutron
openstack-config --set /etc/neutron/neutron.conf keystone_authtoken password NEUTRON_PASS
openstack-config --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp
2.配置linux网桥代理
1)修改linuxbridge网桥配置文件
cp -a /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak}
grep -Ev '^$|#' /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak > /etc/neutron/plugins/ml2/linuxbridge_agent.ini
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings provider:eth0
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan enable_vxlan true
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan local_ip 192.168.153.20
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan l2_population true
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group true
openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
2)修改内核
echo 'net.bridge.bridge-nf-call-iptables=1' >> /etc/sysctl.conf
echo 'net.bridge.bridge-nf-call-ip6tables=1' >> /etc/sysctl.conf
#modprobe:用于向内核中加载模块或者从内核中移除模块。modprobe -r 表示移除
modprobe br_netfilter
sysctl -p
3)修改nova.conf配置文件
openstack-config --set /etc/nova/nova.conf neutron auth_url http://ct:5000
openstack-config --set /etc/nova/nova.conf neutron auth_type password
openstack-config --set /etc/nova/nova.conf neutron project_domain_name default
openstack-config --set /etc/nova/nova.conf neutron user_domain_name default
openstack-config --set /etc/nova/nova.conf neutron region_name RegionOne
openstack-config --set /etc/nova/nova.conf neutron project_name service
openstack-config --set /etc/nova/nova.conf neutron username neutron
openstack-config --set /etc/nova/nova.conf neutron password NEUTRON_PASS
4)启动neutron网桥代理服务 设置开机自启动
systemctl enable neutron-linuxbridge-agent.service
systemctl start neutron-linuxbridge-agent.service
六.验证服务组件(CT 节点)
openstack extension list --network
openstack network agent list
- 修改计算节点配置文件----linuxbridge网桥配置文件
vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
总结
三个节点都需要配置neutron网络,以下为部署思路:
配置neutron组件的用户、认证、endpoint
设置提供者provider网络(这里是桥接模式)
① 配置二层网络
② 配置网桥(插件)
③ 优化内核
④ 配置网桥接口与外部对接
⑤ 修改DHCP配置(修改配置文件、代理)
⑥ 配置网桥与内部组件的配置(修改配置文件、代理)
设置neutron与nova对接的配置
其中C1、C2节点配置相同