参考地址:https://docs.openstack.org/neutron/rocky/install/controller-install-rdo.html

一、neutron的组件  

参考地址:https://www.lmlphp.com/user/10662/article/item/536915/

与 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 等

二、network

  local:只能与位于同一个宿主机内的虚拟机通信

  flat:虚拟机可以跨宿主机通信,必须在同一个网络段

  vlan:划分网络,用于网络隔离

  vxlan:基于隧道模式,overlay网络,将二层的mac地址封装在三层传输

  gre:使用IP包而非UDP包进行封装

三、subnet(子网)

  subnetA-a 10.10.1.0/24 [起:10.10.1.0 止:10.10.1.50]

  subnetA-b 10.10.2.0/24 [起:10.10.2.0 止:10.10.2.50]  (正确)

  subnetA-c 10.10.1.0/24[起:10.10.1.51止:10.10.1.100] (错误,在同一network是不能有cidr重叠,不同network可以)

四、port

  可以看作虚拟交换机的一个端口,port定义了MAC地址和IP地址

五、neutron的功能

  二层交换机、三层路由、负载均衡、防火墙

六、架构模式

  方案一:控制节点+计算节点

  控制节点:neutron server、core plugin的agent、service plugin的agent

  计算节点:core plugin的agent,负载提供二层网络功能

  方案二:控制节点+网络节点+计算节点

  控制节点:部署neutron server服务

  网络节点:部署core plugin的agent和service plugin的agent

  计算节点:部署core plugin 的agent,负责二层的网络功能

七、部署安装-部署控制节点
  需要另一块网卡-租户网(可以不用与外界通信)

  创建数据库

  [root@mon01 ~]# mysql -uroot -p

  MariaDB [(none)]> CREATE DATABASE neutron;

  MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost'    IDENTIFIED BY 'NEUTRON_DBPASS';

  MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%'   IDENTIFIED BY 'NEUTRON_DBPASS';

  创建用户

  [root@mon01 ~]# openstack user create --domain default --password=neutron neutron

  [root@mon01 ~]#  openstack role add --project service --user neutron admin

  创建服务端点

  [root@mon01 ~(keystone_admin)]# openstack service create --name neutron   --description "OpenStack Networking" network

  [root@mon01 ~(keystone_admin)]# openstack service create --name neutron   --description "OpenStack Networking" network

  [root@mon01 ~(keystone_admin)]# openstack endpoint create --region RegionOne   network public http://mon01:9696

  [root@mon01 ~(keystone_admin)]# openstack endpoint create --region RegionOne   network internal http://mon01:9696

  [root@mon01 ~(keystone_admin)]# openstack endpoint create --region RegionOne   network admin http://mon01:9696

  配置含有路由的元数据agent

  [root@mon01 ~(keystone_admin)]# yum install openstack-neutron openstack-neutron-ml2   openstack-neutron-linuxbridge ebtables -y

  编辑配置文件/etc/neutron/neutron.conf

复制代码
[DEFAULT]
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
transport_url = rabbit://openstack:admin@mon01
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[agent]
[cors]
[database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@mon01/neutron
[keystone_authtoken]
www_authenticate_uri = http://mon01:5000
auth_url = http://mon01:5000
memcached_servers = mon01:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron
[matchmaker_redis]
[nova]
auth_url = http://mon01:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = nova
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_messaging_zmq]
[oslo_middleware]
[oslo_policy]
[quotas]
[ssl]
复制代码

  编辑ml2的插件文件/etc/neutron/plugins/ml2/ml2_conf.ini

复制代码
[DEFAULT]
[l2pop]
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security
[ml2_type_flat]
flat_networks = provider
[ml2_type_geneve]
[ml2_type_gre]
[ml2_type_vlan]
vni_ranges = 1:1000
[ml2_type_vxlan]
[securitygroup]
enable_ipset = true
复制代码

  配置linux bridge的agent

复制代码
[DEFAULT]
[agent]
[linux_bridge]
physical_interface_mappings = provider:ens36
[network_log]
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
[vxlan]
enable_vxlan = true
local_ip = 192.168.40.120
l2_population = true
复制代码

  永久开启路由转发-编辑配置文件/etc/sysctl.conf

net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1

  [root@mon01 ~(keystone_admin)]# sysctl -p

  配置l3 agent文件/etc/neutron/l3_agent.ini

[DEFAULT]
interface_driver = linuxbridge
[agent]
[ovs]

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

[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
[agent]
[ovs]

  配置元数据的agent文件/etc/neutron/metadata_agent.ini

[DEFAULT]
nova_metadata_host = mon01
metadata_proxy_shared_secret = METADATA_SECRET
[agent]
[cache]

  配置计算服务使用网络服务

  编辑/etc/nova/nova.conf 文件中的neutron模块

复制代码
[neutron]
url = http://mon01:9696
auth_url = http://mon01:5000
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 = METADATA_SECRET
复制代码

  完成安装

  [root@mon01 ~(keystone_admin)]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

  [root@mon01 ~(keystone_admin)]# 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

  [root@mon01 ~(keystone_admin)]# systemctl restart openstack-nova-api.service

  [root@mon01 ~(keystone_admin)]# systemctl enable neutron-server.service   neutron-linuxbridge-agent.service neutron-dhcp-agent.service   neutron-metadata-agent.service

  [root@mon01 ~(keystone_admin)]# systemctl start neutron-server.service   neutron-linuxbridge-agent.service neutron-dhcp-agent.service   neutron-metadata-agent.service

  [root@mon01 ~(keystone_admin)]# systemctl enable neutron-l3-agent.service

  [root@mon01 ~(keystone_admin)]#  systemctl start neutron-l3-agent.service

八、安装计算节点

  [root@mon02 ~]# yum install openstack-neutron-linuxbridge ebtables ipset -y

  配置公共组件

    编辑/etc/neutron/neutron.conf

复制代码
[DEFAULT]
transport_url = rabbit://openstack:admin@mon01
auth_strategy = keystone
[agent]
[cors]
[database]
[keystone_authtoken]
www_authenticate_uri = http://mon01:5000
auth_url = http://mon01:5000
memcached_servers = mon01:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron
[matchmaker_redis]
[nova]
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_messaging_zmq]
[oslo_middleware]
[oslo_policy]
[quotas]
[ssl]
复制代码

    配置linux birdge agent文件/etc/neutron/plugins/ml2/linuxbridge_agent.ini

复制代码
[DEFAULT]
[agent]
[linux_bridge]
physical_interface_mappings = provider:ens36
[network_log]
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
[vxlan]
enable_vxlan = true
local_ip = 192.168.40.130
l2_population = true
复制代码

    永久开启路由转发-编辑配置文件/etc/sysctl.conf

net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1

    配置计算服务使用网络服务

复制代码
[neutron]
url = http://mon01:9696
auth_url = http://mon01:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron
复制代码

    完成安装

    [root@mon02 ~]# systemctl restart openstack-nova-compute.service

    [root@mon02 ~]# systemctl enable neutron-linuxbridge-agent.service

    [root@mon02 ~]# systemctl start neutron-linuxbridge-agent.service

九、验证

 

 

 

 

 

 

 

 

 

 

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

internal