OpenStack实战七——Neutron网络服务部署

1. Neutron服务介绍

OpenStack Networking Service (Neutron) 是 OpenStack 核心项目之一,提供云计算环境下的虚拟网络功能。Neutron组件的各个服务进程也是以数据库和队列为中心进行通信的,它的相关运行进程与数据库和消息队列都有交互,并且对外接受其它OpenStack组件进程的访问和调用。

Neutron 网络目的是(为OpenStack云更灵活地)划分物理网络,在多租户环境下提供给每个租户独立的网络环境。另外,Neutron 提供 API 来实现这种目标。

Neutron中“网络”是一个可以被用户创建的对象,如果要和物理环境下的概念映射的话,这个对象相当于一个巨大的交换机,可以拥有无限多个动态可创建和销毁的虚拟端口。在物理网络环境中,端口是用于连接设备进入网络的地方。

Neutron 中的端口起着类似的功能,它是路由器和虚拟机挂接网络的着附点。 路由器 和物理环境下的路由器类似,Neutron 中的路由器也是一个路由选择和转发部件。只不过在 Neutron 中,它是可以创建和销毁的软部件。

OpenStack实战七——Neutron网络服务部署                                                                                                                                                                   

2. Neutron组件介绍

Neutron 作为 OpenStack 的一个独立组件,既可以独立部署在单独的主机上,也能与其它组件组合部署在同一主机上。但大多数情况下,Neutron 组件在 OpenStack 架构中常以单独的 host 形式提供网络服务,作为网络节点,Neutron 提供多种服务,包括:

2.1 Neutron-server 服务

neutron-server 是一个守护进程,用来提供外部调用的 API 和与其它组件交互的接口。
从下面的 Neutron 软件架构图中可看出 Neutron 的交互连接,其中包括 horizon 组件,nova-compute 服务和 keystone 认证服务。因此 Neutron 不可避免的要与消息队列系统和数据库 neutron database 交互。

OpenStack实战七——Neutron网络服务部署

2.2 Neutron agent 服务:

  1. Plug-in Agent(neutron-*-agent) 插件代理,需要部署在每一个运行 hypervisor 的主机上,它提供本地的 vSwitch 配置,更多的时候得依赖你具体所使用的插件类型。 常用的插件是 ML2 pluginOpenvSwitch、Linux Bridge,还包括 Big Switch,Floodinght REST Proxy,Brocade,NSX,PLUMgrid,Ryu 等。

  2. DHCP-Agent(neutron-dhcp-agent) DHCP 代理,给租户网络提供动态主机配置服务,主要用途是为租户网络内的虚拟机动态地分配 IP 地址。

  3. L3 Agent(neutron-l3-agent) L3 代理,提供三层网络功能和网络地址转换(NAT)功能,来让租户的虚拟机可以与外部网络通信。

  4. LBAAS-Agent 负载均衡即服务,提供负载均衡服务。

  5. Metering Agent(neutron-metering-agent) 计量代理,为租户网络提供三层网络流量数据计量服务。一般在私有云中不会使用到。 Neutron服务架构图

OpenStack实战七——Neutron网络服务部署                                                               

3. Neutron控制节点部署

3.1 配置Neutron公共网络

  • 1.在控制节点上安装并配置网络组件

    [root@linux-node1 ~]# yum install -y openstack-neutron openstack-neutron-ml2   openstack-neutron-linuxbridge ebtables

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

    #1.在 [database] 部分,配置数据库访问(无需同步数据库)
    [database]
    ...
    connection = mysql+pymysql://neutron:neutron@192.168.56.11/neutron

    #2.在 [DEFAULT] 和[keystone_authtoken] 部分,配置认证服务访问
    [DEFAULT]
    ...
    auth_strategy = keystone

    [keystone_authtoken]
    ...
    auth_uri = http://192.168.56.11:5000
    auth_url = http://192.168.56.11:35357
    memcached_servers = 192.168.56.11:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = neutron
    password = neutron

    #3.在 [DEFAULT] 和 [oslo_messaging_rabbit] 部分,配置 RabbitMQ 消息队列的连接
    [DEFAULT]
    ...
    rpc_backend = rabbit

    [oslo_messaging_rabbit]
    ...
    rabbit_host = 192.168.56.11
    rabbit_userid = openstack
    rabbit_password = openstack

    #4.在 [DEFAULT] 部分,启用ML2插件并禁用其他插件
    [DEFAULT]
    ...
    core_plugin = ml2
    service_plugins =   #打开注释表示禁用其他插件

    #5.在 [DEFAULT] 和 [nova] 部分,配置网络服务来通知计算节点的网络拓扑变化
    [DEFAULT]
    ...
    notify_nova_on_port_status_changes = True
    notify_nova_on_port_data_changes = True

    [nova]
    ...
    auth_url = http://192.168.56.11:35357
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    region_name = RegionOne
    project_name = service
    username = nova
    password = nova

    #6.在 [oslo_concurrency] 部分,配置锁路径
    [oslo_concurrency]
    ...
    lock_path = /var/lib/neutron/tmp

  • 3.查看/etc/neutron/neutron.conf配置

    [root@linux-node1 ~]# grep "^[a-z]" /etc/neutron/neutron.conf 
    auth_strategy = keystone
    core_plugin = ml2
    service_plugins =
    notify_nova_on_port_status_changes = true
    notify_nova_on_port_data_changes = true
    rpc_backend = rabbit
    connection = mysql+pymysql://neutron:neutron@192.168.56.11/neutron
    auth_uri = http://192.168.56.11:5000
    auth_url = http://192.168.56.11:35357
    memcached_servers = 192.168.56.11:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = neutron
    password = neutron
    auth_url = http://192.168.56.11:35357
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    region_name = RegionOne
    project_name = service
    username = nova
    password = nova
    lock_path = $state_path/lock
    rabbit_host = 192.168.56.11
    rabbit_userid = openstack
    rabbit_password = openstack

3.2 配置 Modular Layer 2 (ML2) 插件

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

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

    #1.在 [ml2] 部分,启用flat和VLAN网络
    [ml2]
    ...
    type_drivers = flat,vlan,gre,vxlan,geneve

    #2.在 [ml2] 部分,启用Linuxbridge机制来创建网络,列表类型可以写多个
    [ml2]
    ...
    mechanism_drivers = linuxbridge,openvswitch

    #3.在 [ml2] 部分,设置租户网络类型,禁用私有网络
    [ml2]
    ...
    tenant_network_types =

    #4.在 [ml2] 部分,启用端口安全扩展驱动
    [ml2]
    ...
    extension_drivers = port_security

    #5.在 [ml2_type_flat] 部分,配置公共虚拟网络为flat网络
    [ml2_type_flat]
    ...
    flat_networks = public

    #6.在 [securitygroup] 部分,启用 ipset 增加安全组规则的高效性
    [securitygroup]
    ...
    enable_ipset = True

  • 2.查看ml2插件配置

    [root@linux-node1 ~]# grep "^[a-z]" /etc/neutron/plugins/ml2/ml2_conf.ini 
    type_drivers = flat,vlan,gre,vxlan,geneve
    tenant_network_types = 
    mechanism_drivers = linuxbridge,openvswitch
    extension_drivers = port_security
    flat_networks = public
    enable_ipset = true

3.3 配置Linuxbridge代理

Linuxbridge代理为实例建立layer-2虚拟网络并且处理安全组规则。

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

    #1.在``[linux_bridge]``部分,将公共虚拟网络和公共物理网络接口对应起来:
    [linux_bridge]
    physical_interface_mappings = public:eth0
    将 PUBLIC_INTERFACE_NAME 替换为底层的物理公共网络接口。请查看:ref:environment-networking for more information。

    #2.在 [vxlan] 部分,禁止VXLAN覆盖网络:
    [vxlan]
    enable_vxlan = False

    #3.在 [securitygroup] 部分,启用安全组并配置 Linuxbridge iptables firewall driver
    [securitygroup]
    ...
    enable_security_group = True    
    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

  • 2.查看Linuxbridge配置

    [root@linux-node1 ~]# grep "^[a-z]" /etc/neutron/plugins/ml2/linuxbridge_agent.ini
    physical_interface_mappings = public:eth0   #将ml2中创建的public网络映射到eth0
    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
    enable_security_group = true
    enable_vxlan = false

3.4 配置DHCP代理

The DHCP agent provides DHCP services for virtual networks.

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

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

    [DEFAULT]
    ...
    #使用linuxbridge作为linux接口驱动
    interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
    dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq  #使用dnsmasq管理dhcp和dns
    enable_isolated_metadata = True     #刷新路由

  • 2.查看DHCP配置

    [root@linux-node1 ~]# grep '^[a-z]' /etc/neutron/dhcp_agent.ini 
    interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
    dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
    enable_isolated_metadata = true

3.5 配置元数据代理

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

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

    在 [DEFAULT] 部分,配置元数据主机以及共享密码:
    [DEFAULT]
    ...
    nova_metadata_ip = 192.168.56.11
    metadata_proxy_shared_secret = anzhihe  #共享密钥就是个字符串
    #用你为元数据代理设置的密码替换 METADATA_SECRET。

  • 2.查看元数据代理配置

    [root@linux-node1 ~]# grep '^[a-z]' /etc/neutron/metadata_agent.ini 
    nova_metadata_ip = 192.168.56.11
    metadata_proxy_shared_secret = anzhihe

4. Nova-api配置网络服务

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

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

    [neutron]
    url = http://192.168.56.11:9696     #9696为neutron端口
    auth_url = http://192.168.56.11:35357
    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 = anzhihe

5. 完成安装

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

5.1 创建软链接

[root@linux-node1 ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

5.2 同步数据库:

[root@linux-node1 ~]# 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

注意:数据库的同步发生在 Networking 之后,因为脚本需要完成服务器和插件的配置文件。

5.3 重启计算API 服务:

[root@linux-node1 ~]# systemctl restart openstack-nova-api.service

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

#开机启动
[root@linux-node1 ~]# systemctl enable neutron-server.service   neutron-linuxbridge-agent.service neutron-dhcp-agent.service   neutron-metadata-agent.service

#启动neutron
[root@linux-node1 ~]#  systemctl start neutron-server.service   neutron-linuxbridge-agent.service neutron-dhcp-agent.service   neutron-metadata-agent.service

6. Neutron服务注册Keystone

6.1 创建neutron服务

[root@linux-node1 ~]#  openstack service create --name neutron   --description "OpenStack Networking" network
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Networking             |
| enabled     | True                             |
| id          | 144b2eeafb9248b4ad7247318cdbd219 |
| name        | neutron                          |
| type        | network                          |
+-------------+----------------------------------+

6.2 创建Neutron服务API端点

[root@linux-node1 ~]# openstack endpoint create --region RegionOne   network public http://192.168.56.11:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | c9ab5d468d8940af958201d0d65816ba |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 144b2eeafb9248b4ad7247318cdbd219 |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://192.168.56.11:9696        |
+--------------+----------------------------------+

[root@linux-node1 ~]# openstack endpoint create --region RegionOne   network internal http://192.168.56.11:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 60c9f4d22f534a52a290895307b073e7 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 144b2eeafb9248b4ad7247318cdbd219 |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://192.168.56.11:9696        |
+--------------+----------------------------------+

[root@linux-node1 ~]# openstack endpoint create --region RegionOne   network admin http://192.168.56.11:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 51471dfe465445c6b66684d02f93f1f8 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 144b2eeafb9248b4ad7247318cdbd219 |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://192.168.56.11:9696        |
+--------------+----------------------------------+

7. 验证Neutron服务

能看到Metadata、DHCP、Linux bridge agent,说明创建成功,后边会有三个笑脸哦。

[root@linux-node1 ~]# neutron agent-list
+--------------------+--------------------+--------------------+-------------------+-------+----------------+-----------------------+
| id                 | agent_type         | host               | availability_zone | alive | admin_state_up | binary                |
+--------------------+--------------------+--------------------+-------------------+-------+----------------+-----------------------+
| 359b9e64-5cd1      | Metadata agent     | linux-             |                   | :-)   | True           | neutron-metadata-     |
| -499d-             |                    | node1.example.com  |                   |       |                | agent                 |
| 8f94-5da454944257  |                    |                    |                   |       |                |                       |
| bca4f7fc-9c45-4ba2 | DHCP agent         | linux-             | nova              | :-)   | True           | neutron-dhcp-agent    |
| -83b6-5f5f9d1974e2 |                    | node1.example.com  |                   |       |                |                       |
| c549a7a4-2c0d-4842 | Linux bridge agent | linux-             |                   | :-)   | True           | neutron-linuxbridge-  |
| -9620-9b1e19625947 |                    | node1.example.com  |                   |       |                | agent                 |
+--------------------+--------------------+--------------------+-------------------+-------+----------------+-----------------------+

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/2072.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注