OpenStack Networking Kurulumu – Bölüm 8

tarafından 30 Mayıs 2016 tarihinde Openstack kategorisine yazıldı.

Merhaba,

Bu bölümde OpenStack için gerekli olan Networking’in kurulumunu yapacağız. OpenStack’de networking 2’ye ayrılıyor. Nova ve Neutron. Makalenin ilk başlarında zaten nova ve neutron ile ilgili detaylı bilgi vermiştim. Oyuzden bu bölümde bu servisin işleyişi hakkında çok bilgi vermeyip direk kuruluma geçeceğim. Ben bu kurulumda Neutron’un kurulumunu yapacağım.

Controller node üzerinde yapılacak işlemler:

İlk olarak bir database oluşturmamız gerekiyor.

mysql -u root -p

Yukarıdaki komut ile database’e login oluyoruz.

MariaDB [(none)]> CREATE DATABASE neutron;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
->   IDENTIFIED BY 'Password1';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
->   IDENTIFIED BY 'Password1';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'controller' \
->   IDENTIFIED BY 'Password1';

Database’imizi oluşturuyoruz ve o database’e yetki veriyoruz. İşlemleri tamamladıktan sonra exit ile buradan çıkabilirsiniz.

source admin-openrc.sh

User’imizi oluştururken kullanacağımız credentials’ları yüklüyoruz.

openstack user create --password-prompt neutron
User Password:
Repeat User Password:
+----------+----------------------------------+
| Field    | Value                            |
+----------+----------------------------------+
| email    | None                             |
| enabled  | True                             |
| id       | 8590c74101dd42c5a00e0c497f6d78b2 |
| name     | neutron                          |
| username | neutron                          |
+----------+----------------------------------+

Neutron için gerekli olan user’ı oluşturuyoruz.

root@controller:/home/tayfun# openstack role add --project service --user neutron admin
+-------+----------------------------------+
| Field | Value                            |
+-------+----------------------------------+
| id    | b5a70251e6e645dabdabea75e44ddeeb |
| name  | admin                            |
+-------+----------------------------------+

neutron user’ına admin role’u ekliyoruz.

root@controller:/home/tayfun# openstack service create --name neutron \
>   --description "OpenStack Networking" network
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Networking             |
| enabled     | True                             |
| id          | 7f7ec054932645038fa45da1b10a6ee7 |
| name        | neutron                          |
| type        | network                          |
+-------------+----------------------------------+

neutron service’i oluşturuyoruz.

root@controller:/home/tayfun# openstack endpoint create \
>   --publicurl http://controller:9696 \
>   --adminurl http://controller:9696 \
>   --internalurl http://controller:9696 \
>   --region RegionOne \
>   network
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| adminurl     | http://controller:9696           |
| id           | 6d78969e9bf54bfcbf30d7a5986334d2 |
| internalurl  | http://controller:9696           |
| publicurl    | http://controller:9696           |
| region       | RegionOne                        |
| service_id   | 7f7ec054932645038fa45da1b10a6ee7 |
| service_name | neutron                          |
| service_type | network                          |
+--------------+----------------------------------+

Openstack networking için gerekli olan API endpoint’leri oluşturuyoruz.

Tüm işlemleri tamamladıktan sonra artık networking component’lerini yükleyebiliriz.

apt-get install neutron-server neutron-plugin-ml2 python-neutronclient

Yukarıdaki komut ile networking component’lerini install ediyoruz. Install işlemi tamamlandıktan sonra neutron.conf dosyasını editlememiz gerekiyor.

vi /etc/neutron/neutron.conf

Yukarıdaki komut ile neutron.conf dosyasını editliyoruz.

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

Neutron için oluşturmuş olduğumuz database’i tanımlıyoruz. Burada NEUTRON_DBPASS yazan bölüme Neutron için oluşturmuş olduğumuz database’in password bilgisini yazıyoruz.

[DEFAULT]
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS

RabbitMQ için oluşturmuş olduğumuz user’ın password’unu RABBIT_PASS yazan bölüme ekliyoruz.

[DEFAULT]
...
auth_strategy = keystone
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = neutron
password = NEUTRON_PASS

NEUTRON_PASS yazan bölüme Identity service için oluşturmuş olduğumuz neutron user’ının şifresini yazıyoruz.

[DEFAULT]
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True

Modular Layer 2 plug-in, router service ve overlapping IP address’i enable etmek için yukarıdaki parametreleri ekliyoruz.

[DEFAULT]
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = http://controller:8774/v2
[nova]
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS

NOVA_PASS yazan bölüme nova user’ı için oluşturmuş olduğumuz şifreyi yazıyoruz.

[DEFAULT]
...
verbose = True

Opsiyonel, troubleshooting işlemlerini kolaylaştırmak için verbose logging’i enable duruma getirebilirsiniz.

Tüm işlemleri tamamladıktan sonra buradan çıkıyoruz.

Modular Layer 2 yani ML2 plug-in’i konfigure etmek için m12_conf.ini dosyasını editlememiz gerekiyor. ML2 plug-in Open vSwitch mekanizmasını kullanır. Böylece virtual networking’i instance’lara kullandırır. Yanlız controller node’da OVS’e ihtiyaç bulunmamaktadır çünkü herhangi bir instance’in network trafiği buradan geçmeyecektir.

vi /etc/neutron/plugins/ml2/ml2_conf.ini

Yukarıdaki komut ile m12_conf.ini dosyasının içerisine giriş yapıyoruz.

[ml2]
...
type_drivers = flat,vlan,gre,vxlan
tenant_network_types = gre
mechanism_drivers = openvswitch

m12 bölümünde flat, VLAN, generic routing encapsulation (GRE) ve VXLAN’ı enable duruma getiriyoruz. Burada type_drivers seçeneğindeki değerleri değiştirmemeniz öneriliyor. Aksi halde database’de inconsistency durumu yaşayabilirsiniz.

[ml2_type_gre]
...
tunnel_id_ranges = 1:1000

Tunnel identifier range’i belirtiyoruz.

[securitygroup]
...
enable_security_group = True
enable_ipset = True
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver

security groups’u ve ipset’i enable ediyoruz. Ayrıca OVS iptables’i konfigure ediyoruz.

Tüm işlemleri tamamladıktan sonra kayıt ediyoruz ve çıkıyoruz.

Compute servisi üzerinde networking’i ayarlamak için nova.conf dosyasını editlememiz gerekiyor. İşlemleri yine controller üzerinde yapmaya devam ediyoruz.

vi /etc/nova/nova.conf
[DEFAULT]
...
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver

API ve driver’ları configure ediyoruz. Default olarak Compute, internal firewall service’i kullanır.

[neutron]
...
url = http://controller:9696
auth_strategy = keystone
admin_auth_url = http://controller:35357/v2.0
admin_tenant_name = service
admin_username = neutron
admin_password = NEUTRON_PASS

Neutron’un erişimi için gerekli olan parametreleri ekliyoruz. NEUTRON_PASS yazan bölüme neutron user’ın şifresini yazıyoruz. İşlemleri tamamladıktan sonra kayıt ediyoruz ve çıkıyoruz.

Bu aşamadan sonra artık controller üzerinde işlemlerimiz yavaş yavaş bitiyor.

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

Yukarıdaki komut ile database migration işlemini yapıyoruz.

service nova-api restart
service neutron-server restart

Compute ve Networking servislerini restart ediyoruz.

rm -f /var/lib/neutron/neutron.sqlite

Default ubuntu paketleri ile gelen SQLite database file’ini remove ediyoruz.

root@controller:/home/tayfun# source admin-openrc.sh
root@controller:/home/tayfun# neutron ext-list
+-----------------------+-----------------------------------------------+
| alias                 | name                                          |
+-----------------------+-----------------------------------------------+
| security-group        | security-group                                |
| l3_agent_scheduler    | L3 Agent Scheduler                            |
| net-mtu               | Network MTU                                   |
| ext-gw-mode           | Neutron L3 Configurable external gateway mode |
| binding               | Port Binding                                  |
| provider              | Provider Network                              |
| agent                 | agent                                         |
| quotas                | Quota management support                      |
| subnet_allocation     | Subnet Allocation                             |
| dhcp_agent_scheduler  | DHCP Agent Scheduler                          |
| l3-ha                 | HA Router extension                           |
| multi-provider        | Multi Provider Network                        |
| external-net          | Neutron external network                      |
| router                | Neutron L3 Router                             |
| allowed-address-pairs | Allowed Address Pairs                         |
| extraroute            | Neutron Extra Route                           |
| extra_dhcp_opt        | Neutron Extra DHCP opts                       |
| dvr                   | Distributed Virtual Router                    |
+-----------------------+-----------------------------------------------+
root@controller:/home/tayfun#

Son olarak neutron ext-list ile yaptığımız işlemleri doğruluyoruz. Tabi bu komutu çalıştırmadan önce openrc.sh’ı çalıştırmayı unutmayın.

Network Node üzerinde yapılacak işlemler:

vi /etc/sysctl.conf

Yukarıdaki komut ile conf dosyasını editlemeye başlıyoruz.

net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

sysctl.conf dosyası içerisine yukarıdaki parametreleri giriyoruz ve kayıt edip çıkıyoruz.

sysctl -p

Yapmış olduğumuz değişiklikleri yukarıdaki komut ile görebiliriz.

apt-get install neutron-plugin-ml2 neutron-plugin-openvswitch-agent \
neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent

Yukarıdaki komut ile gerekli paketleri yüklemeye başlıyoruz. Kurulum tamamlandıktan sonra neutron.conf dosyasını editlememiz gerekiyor.

vi /etc/neutron/neutron.conf

Yukarıdaki komut ile neutron.conf dosyasını editlemeye başlıyoruz.

[DEFAULT]
verbose = True
rpc_backend = rabbit
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
auth_strategy = keystone
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = neutron
password = NEUTRON_PASS

Yukarıdaki gibi editliyoruz. RABBIT_PASS yazan bölüme RabbitMQ için oluşturmuş olduğumuz user’ın password’unu yazıyoruz. NEUTRON_PASS bölümünede neutron için oluşturmuş olduğumuz user’ın password’unu yazıyoruz. Tüm işlemleri tamamladıktan sonra kayıt ediyoruz ve çıkıyoruz.

vi /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
type_drivers = flat,vlan,gre,vxlan
tenant_network_types = gre
mechanism_drivers = openvswitch
[ml2_type_flat]
flat_networks = external
[ml2_type_gre]
tunnel_id_ranges = 1:1000
[securitygroup]
enable_security_group = True
enable_ipset = True
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
[ovs]
local_ip = INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS
bridge_mappings = external:br-ex
[agent]
tunnel_types = gre

Yukarıdaki şekilde ml2_conf.ini dosyasını editliyoruz ve kayıt edip çıkıyoruz.

vi /etc/neutron/l3_agent.ini
[DEFAULT]
verbose = True
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
external_network_bridge =
router_delete_namespaces = True

l3_agent.ini dosyasınıda editliyoruz ve kayıt edip çıkıyoruz. external_network_bridge ‘i boş bırakmalısınız.

vi /etc/neutron/dhcp_agent.ini

dhcp_agent.ini içerisini editlemeye başlıyoruz.

[DEFAULT]
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
dhcp_delete_namespaces = True
verbose = True

DHCP agent’ı için yukarıdaki parametreleri ekliyoruz.

vi /etc/neutron/metadata_agent.ini

Yukarıdaki komut ile metadata_agent.ini dosyası içerisine giriş yapıyoruz.

[DEFAULT]
nova_metadata_ip = controller
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_region = RegionOne
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = neutron
password = NEUTRON_PASS
metadata_proxy_shared_secret = METADATA_SECRET
verbose = True

Yukarıdaki parametreleri ekliyoruz. Burada NEUTRON_PASS yazan bölüme neutron user’ının password’unu yazıyoruz. Ayrıca Metadata_SECRET yazan bölüme ise herhangi bir şifre belirtebilirsiniz. Daha sonra bunu controller’da kullanacağız. İşlemleri tamamlayıp kayıt ediyoruz ve çıkıyoruz.

controller node’u üzerinde nova.conf dosyasına aşağıdaki parametreleri eklememiz gerekiyor.

vi /etc/nova/nova.conf

Giriş yapıyoruz.

[neutron]
...
service_metadata_proxy = True
metadata_proxy_shared_secret = METADATA_SECRET
[php]
Yukarıdaki parametreleri ekliyoruz. Network node'u üzerinde metadata_secret'e belirtmiş olduğumuz şifreyi buraya yazıyoruz.
Kayıt ediyoruz ve çıkıyoruz. Bu işlemden sonra nova-api 'i restart etmemiz gerekiyor.
[php]
service nova-api restart

Yukarıdaki komut ile nova servislerini restart ediyoruz. Servis restart işlemlemini tamamladıktan sonra network node’u üzerindeki servisleri restart ediyoruz.

service neutron-plugin-openvswitch-agent restart
service neutron-l3-agent restart
service neutron-dhcp-agent restart
service neutron-metadata-agent restart

Tüm servisleri restart ettikden sonra artık neutron agent’ının düzgün çalışıp çalışmadığını kontrol edebiliriz.

root@controller:/home/tayfun# source admin-openrc.sh
root@controller:/home/tayfun# neutron agent-list
+--------------------------------------+--------------------+---------+-------+----------------+---------------------------+
| id                                   | agent_type         | host    | alive | admin_state_up | binary                    |
+--------------------------------------+--------------------+---------+-------+----------------+---------------------------+
| 5a296010-6518-4c3f-8b98-c228a2fa62a4 | Metadata agent     | network | 🙂   | True           | neutron-metadata-agent    |
| 8db2a40a-566a-4ade-83ce-161220cf8880 | Open vSwitch agent | network | 🙂   | True           | neutron-openvswitch-agent |
| 9e9980ac-42fc-4759-96dd-4223596db601 | DHCP agent         | network | 🙂   | True           | neutron-dhcp-agent        |
| b9090f3b-b776-45c1-a07f-d9accdff2bf5 | L3 agent           | network | 🙂   | True           | neutron-l3-agent          |
+--------------------------------------+--------------------+---------+-------+----------------+---------------------------+

Compute node üzerinde yapılacak işlemler:

Compute node’umuza bağlanıyoruz.

vi /etc/sysctl.conf

Yukarıdaki komut ile dosyanın içerisine giriş yapıyoruz.

net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1

Yukarıdaki parametreleri ekliyoruz ve kayıt edip çıkıyoruz.

sysctl -p

Değişiklikleri görmek için yukarıdaki komutu çalıştırıyoruz.

Compute node’a networking component’lerini kurmak için aşağıdaki komutu çalıştırıyoruz.

apt-get install neutron-plugin-ml2 neutron-plugin-openvswitch-agent

Yukarıdaki komut ile component’lerin kurulumunu tamamlıyoruz.

vi /etc/neutron/neutron.conf

Yukarıdaki komut ile neutron.conf dosyasını içerisine giriş yapıyoruz.

[DEFAULT]
rpc_backend = rabbit
auth_strategy = keystone
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
verbose = True
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = neutron
password = NEUTRON_PASS

Yukarıdaki parametreleri ekliyoruz. Burada RABBIT_PASS yazan bölüme RabbitMQ için oluşturmuş olduğumuz user’ın password’unu yazıyoruz. NEUTRON_PASS bölümüne ise neutron için oluşturmuş olduğumuz user’ın password’unu yazıyoruz. İşlemleri tamamladıktan sonra kayıt ediyoruz ve çıkıyoruz.

vi /etc/neutron/plugins/ml2/ml2_conf.ini

Yukarıdaki komut ile dosya içerisine giriş yapıyoruz.

[ml2]
type_drivers = flat,vlan,gre,vxlan
tenant_network_types = gre
mechanism_drivers = openvswitch
[ml2_type_gre]
tunnel_id_ranges = 1:1000
[securitygroup]
enable_security_group = True
enable_ipset = True
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
[ovs]
local_ip = INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS
[agent]
tunnel_types = gre

INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS yazan bölüme compute node’u üzerinde ayırmış olduğumuz tunnel network’unu yazıyoruz. İşlemleri tamamladıktan sonra kayıt ediyoruz ve çıkıyoruz.

service openvswitch-switch restart

Yukarıdaki komut ile openvswitch servislerini restart ediyoruz.

vi /etc/nova/nova.conf

Yukarıdaki komut ile nova.conf dosyasını editlemeye başlıyoruz.

[DEFAULT]
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[neutron]
url = http://controller:9696
auth_strategy = keystone
admin_auth_url = http://controller:35357/v2.0
admin_tenant_name = service
admin_username = neutron
admin_password = NEUTRON_PASS

Yukarıdaki parametreleri nova.conf içerisine yazıyoruz ve kayıt edip çıkıyoruz. NEUTRON_PASS bölümüne neutron user’ının password’unu yazıyoruz.

service nova-compute restart
service neutron-plugin-openvswitch-agent restart

Compute ve Open vSwitch Agent’ı restart ediyoruz.

Compute node üzerindeki işlemleri tamamladık. Artık controller node’una girip gerekli kontrolleri yapabiliriz.

source admin-openrc.sh

Yukarıdaki komut ile admin credentials’ları yüklüyoruz.

neutron agent-list

Yukarıdaki komutu çalıştırdığımızda karşımıza aşağıdaki gibi bir çıktı gelmelidir.

+--------------------------------------+--------------------+----------+-------+----------------+---------------------------+
| id | agent_type | host | alive | admin_state_up | binary |
+--------------------------------------+--------------------+----------+-------+----------------+---------------------------+
| 30275801-e17a-41e4-8f53-9db63544f689 | Metadata agent | network | 🙂 | True | neutron-metadata-agent |
| 4bd8c50e-7bad-4f3b-955d-67658a491a15 | Open vSwitch agent | network | 🙂 | True | neutron-openvswitch-agent |
| 756e5bba-b70f-4715-b80e-e37f59803d20 | L3 agent | network | 🙂 | True | neutron-l3-agent |
| 9c45473c-6d6d-4f94-8df1-ebd0b6838d5f | DHCP agent | network | 🙂 | True | neutron-dhcp-agent |
| a5a49051-05eb-4b4f-bfc7-d36235fe9131 | Open vSwitch agent | compute1 | 🙂 | True | neutron-openvswitch-agent |
+--------------------------------------+--------------------+----------+-------+----------------+---------------------------+

Networking’i yani neutron’u başarılı bir şekilde kurduk. Bir sonraki bölümde dashboard’ın kurulumunu yapacağız.

Umarım faydalı olmuştur.

İyi çalışmalar.

 

Bu yazı blog üzerinde Tayfun DEĞER tarafından paylaşılmıştır. 2009 yılında açılan blog kısa zaman içerisinde büyük bir izleyici kitlesine sahip olmuştur.Tayfun DEĞER danışmanlık ve eğitimler vermektedir. vExpert 2013-2015, VCP5, VCP5-DT, VCP-Cloud ve MCSE sertifikalarına sahiptir.Twitter 'dan @tayfundeger veya RSS ile sitedeki değişiklikleri takip edebilirsiniz.

  • Can

    Selamlar hocam diger bolumler ne zaman gelir

    • Merhaba,

      Bu hafta içerisinde bu serinin devamını yayınlayacağım.