OpenStack Networking Kurulumu – Bölüm 8
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.
Selamlar hocam diger bolumler ne zaman gelir
Merhaba,
Bu hafta içerisinde bu serinin devamını yayınlayacağım.