OpenStack Neutron

Сервис, отвечающий за работу сети в кластере.

Подготовка

Создаём базу для 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. Возможно я напишу и про него, но потом. Итак конфиг:

/etc/neutron/neutron.conf
[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
/etc/neutron/metadata_agent.ini
[DEFAULT]
nova_metadata_host = mgt1.cloud.ow1.in
metadata_proxy_shared_secret = METADATA_SECRET

В настройках ml2 нужно выбрать какие драйверы будем использовать. Поддерживаются:

  • local - сеть внутри гипервизора, между гиперами связи нет1)
  • flat - траффик просто ходит между нодами напрямую
  • vlan - траффик перед выходом в указанный физический интерфейс тэггируется
  • vxlan - в принципе то же самое, только тэгов на порядок больше (eXtended lan) - использует для взаимодействия туннели между гиперами
  • geneve - модный протокол для построения туннелей
  • gre - модный в прошлом, но всё ещё здравствующий в глубоком интерпрайзе
/etc/neutron/plugins/ml2/ml2_conf.ini
[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)

/etc/neutron/plugins/ml2/linuxbridge_agent.ini
[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 агента

/etc/neutron/l3_agent.ini
[DEFAULT]
interface_driver = linuxbridge
/etc/neutron/dhcp_agent.ini
[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 |
+--------------------------------------+--------------------+-------------------+-------------------+-------+-------+---------------------------+

Установка на compute

В принципе настраивается всё точно так же, как и на менеджмент, только в /etc/neutron/neutron.conf отсутствуют секции nova и database, а в DEFAULT только упоминание о RabbitMQ

/etc/neutron/neutron.conf
[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 |                                                                                          
+--------------------------------------+--------------------+-------------------+-------------------+-------+-------+---------------------------+  
1)
totally useless для продовых сетапов
2)
вестимо интерфейс должен быть реальным, пушо тот же бридж в бридж добавить не получится