Сервис, отвечающий за работу сети в кластере.
Создаём базу для neutron и заводим сервис в keystone
# openstack user create --domain owlhost --password-prompt neutron # openstack role add --project service --user neutron admin # openstack service create --name neutron --description "OpenStack Networking" network # openstack endpoint create --region RegionOne network public http://mgt1.cloud.ow1.in:9696 # openstack endpoint create --region RegionOne network internal http://mgt1.cloud.ow1.in:9696 # openstack endpoint create --region RegionOne network admin http://mgt1.cloud.ow1.in:9696
Neutron умеет работать в двух режимах - Provider network (когда всё управление сетями и роутингом отдаётся на откуп провайдеру, зато нет network ноды и весь траффик с виртуалок тэгируется и льётся непосредственно в l2 провайдера) и Self-Serviced network (в этом варианте вся сетевая инфраструктура строится внутри серверов - появляется network нода, как выходная точка для всего траффика, строятся туннели между серверами, в общем провайдерская сеть оверлеится как может). Ниже описан второй вариант. Если дойдут руки - опишу и первый, там вроде не рокет саенс.
Устанавливаем пакеты
# yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
Собственно настройка этой запчасти будет много сложнее пушо возможных реализаций множество, мы возьмём самую простую с linuxbridges, хотя в моём опыте есть и модный OpenVSwitch. Возможно я напишу и про него, но потом. Итак конфиг:
[database] connection = postgresql+psycopg2://openstack:DBPASS@mgt1.cloud.ow1.in/neutron [DEFAULT] core_plugin = ml2 service_plugins = router allow_overlapping_ips = true transport_url = rabbit://openstack:RABBIT_PASS@mgt1.cloud.ow1.in auth_strategy = keystone notify_nova_on_port_status_changes = true notify_nova_on_port_data_changes = true [keystone_authtoken] www_authenticate_uri = http://mgt1.cloud.ow1.in:5000 auth_url = http://mgt1.cloud.ow1.in:5000 memcached_servers = mgt1.cloud.ow1.in:11211 auth_type = password project_domain_name = owlhost user_domain_name = owlhost project_name = service username = neutron password = NEUTRON_PASS [nova] auth_url = http://mgt1.cloud.ow1.in:5000 memcached_servers = mgt1.cloud.ow1.in:11211 auth_type = password project_domain_name = owlhost user_domain_name = owlhost project_name = service username = nova password = NOVA_PASS [oslo_concurrency] lock_path = /var/lib/neutron/tmp
[DEFAULT] nova_metadata_host = mgt1.cloud.ow1.in metadata_proxy_shared_secret = METADATA_SECRET
В настройках ml2 нужно выбрать какие драйверы будем использовать. Поддерживаются:
[ml2] type_drivers = vlan, vxlan mechanism_drivers = linuxbridge,l2population extension_drivers = port_security tenant_network_types = vxlan # по дефолту создаются vxlan сети [ml2_type_vxlan] vni_ranges = 1:1000 [ml2_type_vlan] network_vlan_ranges = provider:10:20 [securitygroup] enable_ipset = true
В блоке physical_interface_mappings указываем соответствие названию в openstack (provider) и реальному интерфейсу (ens3)2)
[linux_bridge] physical_interface_mappings = provider:ens3 [securitygroup] enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver [vxlan] enable_vxlan = true local_ip = 10.22.1.1 # ip адрес ноды l2_population = true
И переходим к настройке L3 и dhcp агента
[DEFAULT] interface_driver = linuxbridge
[DEFAULT] interface_driver = linuxbridge dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq enable_isolated_metadata = true
Делаем симлинк /etc/neutron/plugins/ml2/linuxbridge_agent.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
И теперь пробуем со всем этим взлететь
# systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service # systemctl start neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service
Проверить работу можно следующим образом
[root@mgt1 sysconfig]# openstack network agent list +--------------------------------------+--------------------+-------------------+-------------------+-------+-------+---------------------------+ | ID | Agent Type | Host | Availability Zone | Alive | State | Binary | +--------------------------------------+--------------------+-------------------+-------------------+-------+-------+---------------------------+ | 9618dcc5-94a8-420c-a880-8ba7c51f30bf | L3 agent | mgt1.cloud.ow1.in | nova | :-) | UP | neutron-l3-agent | | ad7cccb8-2986-41af-93df-0c50937fabd7 | DHCP agent | mgt1.cloud.ow1.in | nova | :-) | UP | neutron-dhcp-agent | | e05ec147-a10c-4adc-8ff9-8738c9ce4e97 | Metadata agent | mgt1.cloud.ow1.in | None | :-) | UP | neutron-metadata-agent | | 64f4e588-2679-474e-a1f6-5f5044ab7181 | Linux bridge agent | mgt1.cloud.ow1.in | None | :-) | UP | neutron-linuxbridge-agent | +--------------------------------------+--------------------+-------------------+-------------------+-------+-------+---------------------------+
В принципе настраивается всё точно так же, как и на менеджмент, только в /etc/neutron/neutron.conf отсутствуют секции nova и database, а в DEFAULT только упоминание о RabbitMQ
[database] connection = postgresql+psycopg2://openstack:DBPASS@mgt1.cloud.ow1.in/neutron [DEFAULT] transport_url = rabbit://openstack:RABBIT_PASS@mgt1.cloud.ow1.in [keystone_authtoken] www_authenticate_uri = http://mgt1.cloud.ow1.in:5000 auth_url = http://mgt1.cloud.ow1.in:5000 memcached_servers = mgt1.cloud.ow1.in:11211 auth_type = password project_domain_name = owlhost user_domain_name = owlhost project_name = service username = neutron password = NEUTRON_PASS [oslo_concurrency] lock_path = /var/lib/neutron/tmp
На считалке запускаем только агента
# systemctl enable neutron-linuxbridge-agent.service # systemctl start neutron-linuxbridge-agent.service
Теперь на менеджменте можно проверить, что запчасть появилась
[root@mgt1 sysconfig]# openstack network agent list +--------------------------------------+--------------------+-------------------+-------------------+-------+-------+---------------------------+ | ID | Agent Type | Host | Availability Zone | Alive | State | Binary | +--------------------------------------+--------------------+-------------------+-------------------+-------+-------+---------------------------+ | 9618dcc5-94a8-420c-a880-8ba7c51f30bf | L3 agent | mgt1.cloud.ow1.in | nova | :-) | UP | neutron-l3-agent | | ad7cccb8-2986-41af-93df-0c50937fabd7 | DHCP agent | mgt1.cloud.ow1.in | nova | :-) | UP | neutron-dhcp-agent | | e05ec147-a10c-4adc-8ff9-8738c9ce4e97 | Metadata agent | mgt1.cloud.ow1.in | None | :-) | UP | neutron-metadata-agent | | 64f4e588-2679-474e-a1f6-5f5044ab7181 | Linux bridge agent | mgt1.cloud.ow1.in | None | :-) | UP | neutron-linuxbridge-agent | | 68fc40d5-a5d7-4def-8c85-d59cf620a395 | Linux bridge agent | cmp1.cloud.ow1.in | None | :-) | UP | neutron-linuxbridge-agent | +--------------------------------------+--------------------+-------------------+-------------------+-------+-------+---------------------------+
В deb-based системах вместо обычного ebtables используется новомодный, что напрочь убивает работу neutron. Для восстановления работоспособности требуется сменить alternatives на старый ebtables
# update-alternatives --set ebtables /usr/sbin/ebtables-legacy