网络服务概览

OpenStack Networking(neutron),允许创建、插入接口设备,这些设备由其他的OpenStack服务管理。插件式的实现可以容纳不同的网络设备和软件,为OpenStack架构与部署提供了灵活性。

它包含下列组件:

  • neutron-server:
    接收和路由API请求到合适的OpenStack网络插件,以达到预想的目的。

  • OpenStack网络插件和代理:
    插拔端口,创建网络和子网,以及提供IP地址,这些插件和代理依赖于供应商和技术而不同,OpenStack网络基于插件和代理为Cisco 虚拟和物理交换机、NEC OpenFlow产品,Open vSwitch,Linux bridging以及VMware NSX 产品穿线搭桥。
    常见的代理L3(3层),DHCP(动态主机IP地址),以及插件代理。

  • 消息队列:
    大多数的OpenStack Networking安装都会用到,用于在neutron-server和各种各样的代理进程间路由信息。也为某些特定的插件扮演数据库的角色,以存储网络状态
    OpenStack网络主要和OpenStack计算交互,以提供网络连接到它的实例。

  • 网络neutron概念:
    OpenStack网络(neutron)管理OpenStack环境中所有虚拟网络基础设施(VNI),物理网络基础设施(PNI)的接入层。OpenStack网络允许租户创建包括像 firewall, :term:load balancer和 :term:virtual private network (×××)等这样的高级虚拟网络拓扑。

网络服务提供网络,子网以及路由这些对象的抽象概念。每个抽象概念都有自己的功能,可以模拟对应的物理设备:网络包括子网,路由在不同的子网和网络间进行路由转发。

对于任意一个给定的网络都必须包含至少一个外部网络。不像其他的网络那样,外部网络不仅仅是一个定义的虚拟网络。相反,它代表了一种OpenStack安装之外的能从物理的,外部的网络访问的视图。外部网络上的IP地址可供外部网络上的任意的物理设备所访问
外部网络之外,任何 Networking 设置拥有一个或多个内部网络。这些软件定义的网络直接连接到虚拟机。仅仅在给定网络上的虚拟机,或那些在通过接口连接到相近路由的子网上的虚拟机,能直接访问连接到那个网络上的虚拟机。
如果外部网络想要访问实例或者相反实例想要访问外部网络,那么网络之间的路由就是必要的了。每一个路由都配有一个网关用于连接到外部网络,以及一个或多个连接到内部网络的接口。就像一个物理路由一样,子网可以访问同一个路由上其他子网中的机器,并且机器也可以访问路由的网关访问外部网络。
另外,你可以将外部网络的IP地址分配给内部网络的端口。不管什么时候一旦有连接连接到子网,那个连接被称作端口。你可以给实例的端口分配外部网络的IP地址。通过这种方式,外部网络上的实体可以访问实例.
网络服务同样支持安全组。安全组允许管理员在安全组中定义防火墙规则。一个实例可以属于一个或多个安全组,网络为这个实例配置这些安全组中的规则,阻止或者开启端口,端口范围或者通信类型。

操作步骤

  • 在controller节点
  • 创建nuetron数据库和授权

    # mysql -u root -p
    > CREATE DATABASE neutron;
    > GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost'   IDENTIFIED BY '123456';
    > GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%'   IDENTIFIED BY '123456';
  • 获得 admin 凭证来获取只有管理员能执行的命令的访问权限:

    # source ~/admin-openrc
  • 创建用户

    # openstack user create --domain default --password-prompt neutron
    User Password:        //密码123456
    Repeat User Password:  //密码123456
  • 添加admin 角色到neutron 用户:

    # openstack role add --project service --user neutron admin
  • 创建neutron服务

    # openstack service create --name neutron   --description "OpenStack Networking" network
  • 创建网络服务端点

    # 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搭建企业私有云 四:Networking服务_第1张图片OpenStack搭建企业私有云 四:Networking服务_第2张图片

  • 在controller节点上安装并配置网络组件

  • 安装组件

    # yum install -y openstack-neutron openstack-neutron-ml2  openstack-neutron-linuxbridge ebtables
  • 修改配置文件

    # vim  /etc/neutron/neutron.conf
    [database]
    //729
    connection = mysql+pymysql://neutron:123456@controller/neutron
    [DEFAULT]
    //27
    auth_strategy = keystone
    //30
    core_plugin = ml2
    //33 不写代表禁用其他插件
    service_plugins =
    //570
    transport_url = rabbit://openstack:RABBIT_PASS@controller
    //98
    notify_nova_on_port_status_changes = true
    //102
    notify_nova_on_port_data_changes = true
    [keystone_authtoken]
    //847
    auth_uri = http://controller:5000
    auth_url = http://controller:35357
    //898
    memcached_servers = controller:11211
    //1005
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = neutron
    password = 123456
    
    [nova]
    //1085
    auth_url = http://controller:35357
    //1089
    auth_type = password
    //1127
    project_domain_name = default
    //1156
    user_domain_name = default
    //1069
    region_name = RegionOne
    //1135
    project_name = service
    //1163
    username = nova
    //1121
    password = 123456
    
    [oslo_concurrency]
    //1179
    lock_path = /var/lib/neutron/tmp
  • 配置网络二层插件
  • 配置 Modular Layer 2 (ML2) 插件

    # vim /etc/neutron/plugins/ml2/ml2_conf.ini
    [ml2]
    //136
    type_drivers = flat,vlan
    //141   设置空是禁用本地网络
    tenant_network_types =
    //145
    mechanism_drivers = linuxbridge
    //150
    extension_drivers = port_security
    
    [ml2_type_flat]
    //186
    flat_networks = provider
    
    [securitygroup]
    //263
    enable_ipset = true
  • 配置Linux网桥

    # vim  /etc/neutron/plugins/ml2/linuxbridge_agent.ini
    [linux_bridge]
    //157
    physical_interface_mappings = provider:ens33
    
    [vxlan]
    //208
    enable_vxlan = false
    
    [securitygroup]
    //193
    enable_security_group = true
    //188
    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
  • 配置DHCP

    # vim /etc/neutron/dhcp_agent.ini
    //16
    interface_driver = linuxbridge
    //28
    dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
    //37
    enable_isolated_metadata = true
  • 配置metadata

    # vim  /etc/neutron/metadata_agent.ini
    [DEFAULT]
    //22
    nova_metadata_host = controller
    //34
    metadata_proxy_shared_secret = 123456
  • 配置计算服务使用网络服务

    # vim /etc/nova/nova.conf
    [neutron]
    //7534
    url = http://controller:9696
    //7610
    auth_url = http://controller:35357
    //7604
    auth_type = password
    //7631
    project_domain_name = default
    //7657
    user_domain_name = default
    //7678
    region_name = RegionOne
    //7625
    project_name = service
    //7651
    username = neutron
    //7660
    password = 123456
    //7573
    service_metadata_proxy = true
    //7584
    metadata_proxy_shared_secret = 123456
  • 建立服务软连接

    # ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
  • 同步数据库

    # 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
  • 重启compute API服务和 启动neutron服务并加入开机自启动

    # systemctl restart openstack-nova-api.service
    
    systemctl enable neutron-server.service   
    systemctl enable neutron-linuxbridge-agent.service 
    systemctl enable neutron-dhcp-agent.service   
    systemctl enable neutron-metadata-agent.service
    
    systemctl start neutron-server.service   
    systemctl start neutron-linuxbridge-agent.service 
    systemctl start neutron-dhcp-agent.service   
    systemctl start neutron-metadata-agent.service

配置compute节点网络服务

    # yum install -y openstack-neutron-linuxbridge ebtables ipset
  • 配置公共组件

    # vim /etc/neutron/neutron.conf
    [DEFAULT]
    //27
    auth_strategy = keystone
    //570
    transport_url = rabbit://openstack:123456@controller
    
    [keystone_authtoken]
    //847
    auth_uri = http://controller:5000
    auth_url = http://controller:35357
    //898
    memcached_servers = controller:11211
    //1005
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = neutron
    password = 123456
    
    [oslo_concurrency]
    //1180
    lock_path = /var/lib/neutron/tmp
  • 配置Linux网桥

    # vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
    [linux_bridge]
    //157
    physical_interface_mappings = provider:ens33
    
    [vxlan]
    //208
    enable_vxlan = false
    
    [securitygroup]
    //193
    enable_security_group = true
    //188
    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
  • 配置计算节点网络服务

    # vim /etc/nova/nova.conf
    [neutron]
    //7534
    url = http://controller:9696
    //7610
    auth_url = http://controller:35357
    //7605
    auth_type = password
    //7631
    project_domain_name = default
    //7657
    user_domain_name = default
    //7678
    region_name = RegionOne
    //7625
    project_name = service
    //7651
    username = neutron
    //7660
    password = 123456
  • 重启计算服务

    # systemctl restart openstack-nova-compute.service
  • 启动Linuxbridge代理并配置它开机自启动

    # systemctl enable neutron-linuxbridge-agent.service
    # systemctl start neutron-linuxbridge-agent.service
  • 验证
  • 列出加载的扩展来验证neutron-server进程是否正常启动:

    # source ~/admin-openrc
    # neutron ext-list

OpenStack搭建企业私有云 四:Networking服务_第3张图片