说明:网络服务的组件特别多,导致网络服务的安装特别灵活,每一个都有一个单独的配置文件,网络有4-5个配置文件

(1)创库和授权

-- mysql -u root -pxxxxxx


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';

(2)创建服务证书

# (1)创建``neutron``用户

openstack user create --domain default --password NEUTRON_ PASS neutron

# (2)添加``admin`` 角色到``neutron`` 用户

openstack role add --project service --user neutron admin

# (3)创建``neutron``服务实体

openstack service create --name neutron \
  --description "OpenStack Networking" network

# (4)创建网络服务API端点-->在keystone上创建服务和API

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

openstack‘底层‘也用到了iptables

(3)openstack网络的组件

neutron-server'969'         接收和响应外部'网络API请求'-->类似'nova-api'

neutron-linuxbridge-agent: '否则创建桥接网卡';虚机启动要连网,用bridge或nat模式,需要'有人帮助创建桥接网卡'

neutron-dhcp-agent:        '默认-->为云主机分配ip';后续也可以固定

neutron-metadata-agent     '配置nova-metadata-api'实现虚拟机的'定制操作'

定制操作:虽然是同一个模板克隆的虚机,'可以让其主机名,ip不同,免秘钥登陆'

################

L3-agent                   '实现三层网络(网络层-VXLAN)'

网络选项1:公共网络           '二层网络'

网络选项2:私有网络           '三层网络'


'开源社区'--->当做社区和新闻来学习

(4)公共网络,先使用两层网络

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

###############(1)  在 [database] 部分,配置数据库访问:

[database]
...
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron



###############(2)   在[DEFAULT]部分,启用ML2插件并禁用其他插件

[DEFAULT]
...
core_plugin = ml2
service_plugins =

由于使用'公有网络'-->二层,所以要'开启这个核心插件';并且要对该插件配置文件进行配置

'service_plugins  服务插件置为空('禁用');只有三层网络的时候开启时,要扩展一些功能,才会开启'


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

[DEFAULT]
...
rpc_backend = rabbit

[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = xxxxxxxx

###############(4)在 "[DEFAULT]" 和 "[keystone_authtoken]" 部分,配置认证服务访问

[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

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

[DEFAULT]
...
notify_nova_on_port_status_changes = True
'当nova的网络端口改变,通知neutrn'
场景:'如果把云主机关了,则应该告诉neutrn,把网络端口关了'
notify_nova_on_port_data_changes = True
'当我有数据转发时,通知neutrn帮我转发下数据'

[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和neutrn相互调用';场景:'如果要删除虚拟机的网络,会查询nova是否在使用,如果使用则无法删除'

'netrun和nova相互配置'

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

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

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

##########(1)  在``[ml2]``部分,启用flat和VLAN网络:

[ml2]
...
type_drivers = flat,vlan

'flat-->虚拟机和宿主机处于同一个平面,就是桥接网速';'别名'

##########(2)  在"[ml2]"部分,禁用私有网络'因为只有三层网络才有租户的概念'

[ml2]
...
tenant_network_types =

##########(3)  在"[ml2]"部分,启用Linuxbridge机制'虚拟机网络的底层机制'

[ml2]
...
mechanism_drivers = linuxbridge
底层的'虚拟网络'的'实现机制'
其他方式:'open vswitch';'centos原生就支持linuxbridge,但是功能没有switch丰富'

##########(4)   在"[ml2]" 部分,启用端口安全扩展驱动-->'类似安全组'

[ml2]
...
extension_drivers = port_security

##########(5)   在"[ml2_type_flat]"部分,配置公共虚拟网络为flat网络

[ml2_type_flat]
...
flat_networks = provider

'仅仅是起一个网络的名字'

'注意':这里如果修改后面也需要修改!

##########(6)   在 "[securitygroup]"部分,启用 ipset 增加安全组规则的高效性

[securitygroup]
...
enable_ipset = True

(6)配置Linuxbridge代理

说明: 'Linuxbridge是真正创建桥接网卡的'

################

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

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

[linux_bridge]
'网络的名字-->provider;PROVIDER_INTERFACE_NAME是实际的网卡名字-->这里是eth0'

physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME

'创建桥接网卡的时候,基于哪个物理网卡创建桥接网卡'

################

在"[vxlan]"部分,禁止VXLAN覆盖网络:'二层网络禁止'

[vxlan]
enable_vxlan = False

################

在 "[securitygroup]"部分,启用安全组并配置 Linuxbridge iptables firewall driver

[securitygroup]
...
enable_security_group = True
'python包的关于防火墙的方法'
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

(7) 配置DHCP代理

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

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

'根据dhcp分配ip'

[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True

说明:到这里为止共有网络已经配置ok了!

(8)通用配置:配置元数据代理

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

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

[DEFAULT]
...
nova_metadata_ip = controller
metadata_proxy_shared_secret = METADATA_SECRET

控制节点配置网络服务

中文翻译文档有坑:'也是在controller节点上执行的'

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

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

[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 agent-list

'启动比较慢';'自动化脚本设置-->40s';正常:'三个微笑';'M版本neutron没有纳入openst管理'
[root@controller ~]# neutron agent-list
+--------------------------------------+--------------------+------------+-------------------+-------+----------------+---------------------------+
| id                                   | agent_type         | host       | availability_zone | alive | admin_state_up | binary                    |
+--------------------------------------+--------------------+------------+-------------------+-------+----------------+---------------------------+
| 19fbb42a-3fca-4124-9f01-391ff0aa8645 | DHCP agent         | controller | nova              | :-)   | True           | neutron-dhcp-agent        |
| 35965192-d5b6-4c8c-a56a-c1d5d45fcf52 | Metadata agent     | controller |                   | :-)   | True           | neutron-metadata-agent    |
| e9d7d6a9-a89b-4939-854e-2901808714ea | Linux bridge agent | controller |                   | :-)   | True           | neutron-linuxbridge-agent |
+--------------------------------------+--------------------+------------+-------------------+-------+----------------+---------------------------+