Category Archives: Neutron Networking

Openstack Networking Router , sadece cli !

Islemlere baslamadan once ilgili komutlari calistiracaginiz sunucuda veya client’da ilgili Openstack RC (environment variables) dosyasini ayarlayin ve calistirin. Daha fazla bilgi icin bakiniz Openstack Networking VXLAN , sadece cli!

Amacimiz elimizdeki VXLAN networklerini internete ve/veya birbirleri arasinda eristirebilmek. Openstack’de bu islem icin Network Node‘lar kullaniliyor. Network Node’lari ile Controller Node’lari ayni yerde kosabildikleri gibi birbirlerinden izole sekildede calisabilirler. DVR (Distributed Virtual Router) olmadan once tum trafigin Network Node’lar uzerinden gecmesi gerekiyor idi fakat DVR’dan sonra Computer Node’larda devreye girdi ve trafik artik dagitik bir sekilde islenmeye basladi fakat burada trafigi SNAT ve DNAT olarak ayirmakta fayda var, SNAT trafigi halen Network Node uzerinden, DNAT trafigi ise Compute Node uzerinden ilerlemekte.

Openstack networking router konusurken ayni zamanda linux networking namespaces hakkinda bilgimiz ve ip netns cli komutlarinin kullanimi bizim icin onemli. Linux Networking Namespace bizim tcp/ip stack’inin ayni isletim sistemi uzerinde clone’lanmasi , bu clone’lari domain olarak nitelendirsek , her domain icersinde overlap networkler gibi tamamen birbirinden bagimsiz , loopback interface’ler , ethernet interface’ler , iptables tablolari ve routing tablolari icermekte , ip komutunun netns parametreside bu farkli domainlerdeki/namespace’lerdeki tcp/ip stack’ini yonetmek icin kullandigimiz cli komutu.

Router diyince artik ML2 scope’undan cikmis oluyoruz , yeni scope’umuz L3. Konfigrasyonlarimiz Neutron Server (neutron.conf) ve L3_Agent(l3_agent.ini) uzerinde olacak.

  • Oncelikle /opt/stack/service/neutron-20160722T142043Z/etc/neutron.conf bakalim
    • Dikkat edilmesi gereken konu l3_router plugin’in set edilmis olmasi
    • [DEFAULT]
      service_plugins = neutron.services.l3_router.l3_router_plugin.L3RouterPlugin
    • Eger service_plugin tanimli degil ise Horizon GUI’de my.sa goremeyebilirsiniz
  • Bir sonraki konfigrasyon dosyasi sudo vi /opt/stack/service/neutron-20160722T142043Z/etc/l3_agent.ini
    • Burada iki onemli parametre var biri interface_driver digeri ise external_network_bridge ek olarak agent_mode‘da bizim icin onemli.
    • interface_driver kullandiginiz mechanism_driver ne ise o set edilmis olmali ornegin linux bridge veya OpenvSwitch(OVS)
    • external_network_bridge onemli cunku sisteme disariya dogru cikisin hangi interface’den yapilacagini belirtiyor
    • agent_mode ile DVR kullanip kullanmayacaginizi belirtiyor
  • Cli’da Router yaratmak icin
    • Oncelikle bir halihazirda elimizde Router var mi bakalim ?
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron router-list
    • Simdi yaratalim bir tane, asagidaki ornekte demo projesi icin bu islem yapilmakta
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron router-create Router1_demoprj –tenant-id 68ca3d8aa2294bc1bc606acbb8b9405a
    • Eger silmek isterseniz router-delete paramteresini kullanabilirsiniz.
    • Bir sonraki adima gecmeden once yarattigimiz router’in id‘sini not edelim neutron router-list komutu ile –> d4fe02b8-0cc0-4662-8573-b3b3f783baaf
  • Yukarda belirttigimiz gibi Router hem farkli network’leri birbiri ile konusturmakta hemde internet’e dogru cikislari saglamakta.
    • Once network’ler arasi konusmayi gorelim. Bir onceki Openstack Networking VXLAN , sadece cli! da sadece Demo-WebServers-Network1 (10.10.1.0/24) networku icin instance yaratmistik, bir tanede Demo-DBServers-Network1(10.10.2.0/24) icin yaratalim. Bu kez port yaratmayacagiz , instance yaratilirken otomatik olarak yaratilacak.
      • Asagidaki komutu calistirmadan once ortam degiskeni olan  OS_PROJECT_NAME ‘i guncelelyin
      • stack@helion-cp1-c0-m1-mgmt:~$ nova boot –flavor m1.tiny –image cirros-0.3.3-x86_64 DBServer1 –nic net-id=bb8dd87f-466e-4082-b69b-c6436bb12a18
      • Elimizde iki adet instance var biri WebServer1 10.10.1.6 digeri ise DBServer1 10.10.2.4
      • Ek olarak daha sonra kullanacagimiz ilgili subnet’lerin id’lerini not edelim neutron subnet-list komutu ile
        • dbsubnet –> fcf2a7da-9cda-45f9-9c9b-51750ca6d1bf
        • web-subnet –> fdb33ffc-43d5-415a-a090-fc8ccb37684d
      • Baslamadan once durumu resmeder isek, iki network var , her ikisine birer instance bagli.
        DUNYA/Internet mevcut , birde biraz once yarattigimiz router’imiz . Bir sonraki adimda router’i DB ve WEB subnet’lerine baglayacagiz
        screen-shot-2016-10-17-at-11-43-57
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron router-interface-add d4fe02b8-0cc0-4662-8573-b3b3f783baaf fcf2a7da-9cda-45f9-9c9b-51750ca6d1bf
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron router-interface-add d4fe02b8-0cc0-4662-8573-b3b3f783baaf fdb33ffc-43d5-415a-a090-fc8ccb37684d
      • Yarattiginiz interface/port’lari silmek icin herzaman router-interface-delete komutunu kullanabilirsiniz.
      • Yeni resim asagidaki gibi oldu ,eger Security Group bazinda bir sikinti yok ise DB ile Web sunuculari birbirleri ile konusabilecekler
        screen-shot-2016-10-17-at-12-01-53
      • Ayni goruntuyu cli’danda alabiliriz
        • stack@helion-cp1-c0-m1-mgmt:~$ neutron router-port-list d4fe02b8-0cc0-4662-8573-b3b3f783baaf
    • Neutron Router sadece neutron networkler arasinda degil ayni zamanda instance’larin internet erisimleri icinde kullanilmakta ki buna Openstack’de external network olarak adlandiriliyor. Genelde bu network daha onceden yaratilmistir , eger hangi network’un external network oldugunu bilmiyorsaniz oncelikle neutron net-list yapip neutron net-show komutu ile router:external parametresi True olan network external network olacaktir.
    • Yukardaki eforu harcamaktansa sadece benim floating ip pool’um var mi acaba diyede bakabiliriz , buda bize ilgili external networkleri direkt verecektir.
    • stack@helion-cp1-c0-m1-mgmt:~$ nova floating-ip-pool-list
      • Simdi yukarda yaptigimiz gibi benzer bir islem yapacagiz , sadece bu kez komut biraz degisecek ama yine bizim router_id‘sine , external_network_id‘sine ihtiyac olacak . Ilgili komutu calistirdigimizda external network’den bir ip adresi alacagiz ve bu ip adresi bizim instance’larimiz icin SNAT konfigrasyonu tanimlanmis olacak fakat bunun disinda internet’den instance’larimiza dogru hicbir erisim acilmayacak
      • Router_id –> d4fe02b8-0cc0-4662-8573-b3b3f783baaf
      • External_Network_id –> efb5448d-7593-46f7-90ad-bd33206c2c7b
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron router-gateway-set d4fe02b8-0cc0-4662-8573-b3b3f783baaf efb5448d-7593-46f7-90ad-bd33206c2c7b
      • Yaptiginiz konfigrasyonu geri almak icin her zaman neutron router-gateway-clear parametresini kullanabilirsiniz.
      • Iste , yeni network baglanti semamiz , time to ping google.comscreen-shot-2016-10-17-at-14-47-51
    • Bu islemlerden sonra sira eger disaridan ilgili instance’a erisilmek istenir ise ne olacak konusu var. Burada floating ip denilen bir kavram isin icine giriyor.
      • Floating IP adresi direkt instance‘a atanabildigi gibi bir proje icin yaratilip instance’a atanmaya hazir halde bulundurulabilir.
      • Once sistem uzerinde halihazirda floating ip var mi bakalim
        • stack@helion-cp1-c0-m1-mgmt:~$ neutron floatingip-list
      • Bir tane yaratalim , ext-net bizim enternal network’un adi
        • stack@helion-cp1-c0-m1-mgmt:~$ neutron floatingip-create ext-net
      • Silmek icin floating ip id’sine ihtiyac var , floatingip-list diyerek elde edebilirsiniz
        • stack@helion-cp1-c0-m1-mgmt:~$ neutron floatingip-delete 89ce7905-0fb5-445c-b8b6-f8f5ff45a166
      • Bundan sonra ilgili floating ip adresini ilgili instance’a atamaya geldi sira. Bunun icin ilgili instance’in hangi port’una karsilik gelen id bilgisini kullanacagiz , diyelimki bizim web server’a floating ip atayacagiz. Ilgili sunucu ip adresi 10.10.1.6 idi, once bu ip adresinin atandigi neutron port id_sini bulalim
        • stack@helion-cp1-c0-m1-mgmt:~$ neutron port-list | grep 10.10.1.6
        • –> 9759d23d-7863-497d-88c3-02067af12714
      • Atayacagimiz floating ip adresinin id’sini bulalim.
        • stack@helion-cp1-c0-m1-mgmt:~$ neutron floatingip-list
        • –> 54096c72-64f2-4133-984c-2061d4ba2b5a
      • Birbirlerine baglayalim
        • stack@helion-cp1-c0-m1-mgmt:~$ neutron floatingip-associate 54096c72-64f2-4133-984c-2061d4ba2b5a 9759d23d-7863-497d-88c3-02067af12714
        • Daha sonra eger security group’lardan ilgili izinler mevcut ise ilgili servis icin ilgili erisimler acilmis olacak.
      • Floating ip baglantisini kaldirmak icin neutron floatingip-disassociate

Kolay gelsin

VM

Openstack Networking VXLAN , sadece cli !

Islemlere baslamadan once ilgili komutlari calistiracaginiz sunucuda veya client’da ilgili Openstack RC (environment variables) dosyasini ayarlayin ve calistirin. Asagida bir ornek mevcut , bunun disinda Horizon’a ilgili kimlik bilgileri ile login olup Project –> Compute –> Access & Security tab’indan indirebilirsiniz.

Cli uzerinden islem yapmak icin Openstack-client kurulu olmali , eger kurulu degil ise kullandiginiz ilgili link’den gerekli paketleri kurabilirsiniz.

Ek olarak asagida calistiracaginiz tum komutlarin parametre bilgilerini vermeden once –debug yazarak calistirdiginizda (ornegin nova –debug list , openstack –debug project list) Openstack REST API‘de kesfetmeniz mumkun.

VXLAN icin on bilgiye ihtiyaciniz var ise bu makaleyi inceleyebilirsiniz , VMware/NSX olmus , OpenvSwitch (OVS), Hyper-V/NVGRE olmus cok onemli degil, prensipte birbirlerine yakin calisiyorlar.

Benim icin ;  Read the rest of this entry

Esitliklerle Openstack Networking – Neutron

Instance = VM = sanal makine

OVS = Open vSwitch = VMware vSS gibi

OVS = Tunneling + QoS + Monitoring (Netflow) + Yonetim + Otomizasyon (Openflow ve OVSDB sayesinde)

OpenFlow = SDN Controller ile OpenFlow switch arasindaki iletisim protokol’u

OpenFlow = Network paketinin izleyecegi yolu belirler ve yaratir

OVSDB = OpenFlow gibi oda bir protokol “OVSDB Protocol” = Yonetim ve Konfigrasyondan sorumlu =  OpenFlow a gore daha uzun metrajli islemleri icin mesela tunel , bridge , port , datapath islemleri yaratma/silme/guncelleme = https://tools.ietf.org/html/draft-pfaff-ovsdb-proto-00

Virtual Switch = OVS = L2 Agent = VM’lerin sanal vNIC leri buraya baglaniyor = vSwitch

Router =  L3 Agent = Virtual Router = Fiziksel router’in sanal hali

Floating IP = VM haberdar olmadigi fakat disardan iceriye erismek icin kullanilan IP adresi

Tenant = Musteri/Organizasyon

Tenant Network = Musteri Network’u = 192.168.0.0/24 = Mesela Web Tier, Database Tier gibi

Flat = untagged = herkez ayni networkde

Local = isolated = VM’in kostugu makine uzerinde networking = disari cikis yok

Tenant Network = Flat + Local + VLAN

GRE/VXLAN = Overlay Networks = Tum tenantlar 192.168.0.0/24 kullaniyorlar , tekrar tekrar tekrar = iletisim noktadan noktaya ve tunelleme kullaniliyor

Provider Network = VLAN ve Flat icin kullaniliyor

Flat Provider Network = Instance/VM leri direkt external networklere baglamak icin = Ornegin Openstack l3-agent degilde halihazirdaki fortinet + netscaller gibi cihazlari kullanmak istiyorsaniz

L3 High Availability = VRRP = Virtual Router / Floating IP leri koruma = Her bir musteri/organizasyon Virtual Router’i farkli bir Network Node uzerinde bulunur/dagitilir = Aktif/Pasif virtual router’lar

Network Node = Routing + DHCP + Metadata

Neutron = OpenStack Networking

Compute = HP = Sanal makinelere CPU/RAM

OVS-Agent = Network ve Compute Node’lar uzerinde calisan bir ajan = L2 Agent = OVS Plugin uzerinden kurulacak tunel ve flow bilgisini alir ve OVS’i programlar

External Network = Internet

Security Group = Firewall Kurallari = Compute Instance uzerinde = SG

Set edilmez ise Default Security kurali uygulanir = Iceri giris yok + Disari cikis any

SG LBaaS VIP , virtual router interface ve instance’a uygulanir

LinuxBridge + OVS + NSX + NEC + Ryu destekler SG (Biraz Master Yoda tarzi dusuk )

OVS = Open vSwitch = Bridging Replace = GRE / VXLAN tunelleme destekler

ML2 = Networking Plugin = Core Plugin

ML2 Onemli = Cunku olmasaydi tum saglayicilar tum servisleri IPAM , DB Access , Virtual Network ID bastan yaratmalari gerekecekti

ML2 Network Type = local + GRE + VLAN + VXLAN + Flat

ML2 Mechanics = OVS , Linuxbridge , Arista , Cisco

Neutron Service Plugins = LBaaS+FWaaS+L3 Agent

Nova Networking = OOOOOOOO Nooooooooooo (kullanima kalkti o/belki vardir hala)

Neden Neutron = Yeni ozellikler LBaaS/FWaaS + ML2 + 16 Milyon Network + Overlapping + network namespaces

Network Namespace = Izolasyon = Farkli network instance’lari = Her bir namespace icin farkli iptables/routing ve ethernet arabirimleri

veth pairs = Iki farkli Namespace’i birbirine baglar

L2Population = No BUM trafik 🙂

BUM = Broadcast + Unicast + Multicast

L3 Agent = virtual layer 3 router = L2 Networklere gw servisi = iptables/NAT/Routing

External IP Range = L3 Agent uzerinde otomatik konfigre ediliyor = IP adresleri virtual layer 3 router’lara assign ediliyor

Neutron DHCP Agent = Tenant networklere DHCP servisi verir = dnsmasq

ovsdb-server = Open vSwitch database server = Konfigrasyon ve durum veritabani = JSON RPC Request/Response = /etc/openvswitch/conf.db

durum = L2 learning table + L3 Forward table + ACL + QoS Policy + Netflow/IPFLEX/sFLOW

ovsdb-tool = Open vSwitch database yonetimi = DB yaratma , sorgulama 🙂

ovs-vswitchd = Lokal sunucu uzerindeki OVS switch lerini yonetir ve kontrol eder = Aciliste tum konfigrasyonu db’den okur ve acar = L2 Switching MAC Learning = VLAN = Port Mirroring

ovs-vswitchd = Flow Table

datapath = Verinin akis yolu

hash lookup table = OVS Kernel Module Flow Cache

Fast Path = OVS Kernel uzerinden

Slow Path = OVS vswitchd user space uzerinden

DPDK = Intel userspace’de Fast Path’den hizli islem yapiyor = OVS Kernel replace for Fast Path

Netlink = ovs-vswitchd ile kernel arasindaki iletisim protokolu burada TCP degil Netlink konusuluyor = Unix domain socket benzeri = kernel <-> userspace arasi baglanti

Package Classifier = Paket islenirken hangi OpenFlow kuralinin uygulanacagini belirler

brt-int = Instance vNIC’ler bu bridge a bagli = vswitch

br-tun = Tuneller uzerinden kosan tenant ve dis baglanti trafigi buradan akiyor

br-ex = Dis baglanti icin kullanilan bridge  = Floating IP ler burada = Network Node uzerinde

qvo = openvswitch tarafindaki veth cifti

qvb = bridge tarafindaki veth cifti

qbr = bridge

qr = l3-agent tarafindan yonetilen port , router tarafinda

qg = l3-agent tarafindan yonetilen port, gw tarafi

patch port = uplink port, birden fazla bridge birbirine patch port ile baglanip tek bir bridge olusturuyor

 

Muhtemelen kacirdigim cok sey vardir , onlarda zamanla eklenecektir buraya.

VM