Openstack Networking VLAN , sadece cli !

Openstack Provider Network olarak gecen , bildigimiz vlan’in Openstack ortaminda nasil kullanildigina bakacagiz.

Bizim icin onemli olan konfigrasyon dosyalari var, bunlara bakmadan once mechanism_driver olarak veya yapimizda Open vSwitch oldugun belirtmeliyim ;

  • ml2_conf.ini
  • ML2 –> Modular Layer 2 Plugin
    • [ml2] –> Kisminda
      • type_drivers : vlan (Openstack destekleyecegi network suruculeri)
      • tenant_network_types : vlan (Organizasyonlari atanacak network tipleri bu sekilde birden fazla aralarinda virgul kullanilarak burada tanimlaniyor)
    • [ml2_type_vlan]
      • network_vlan_ranges = physnet1
        • Burada dokumantasyona baktigimizda “<physical_network>:<vlan_min>:<vlan_max> or <physical_network>” seklinde bir kullanimdan bahsediyor.
        • physnet1 bir alias , kisaca fiziksel ethernet kartini belirtiyor , birden fazla belirtilebilir.
        • istenir ise physnet1:300:1000 –> Seklinde yazilabilir yani uzerinde 300 ‘den baslayip 1000’e kadar butun vlan’lar gececek demek oluyor, birden fazla belirtilebilir.
    •  [OVS]
      • bridge_mappings = physnet1:br-bond0
        • Burada daha onceden provider networks yani vlan’larin gececegi interface olarak br-bond0 tanimlanmis bir interface veriyoruz , burada fiziksel bir interface de olabilir , eth0 gibi , bond edilmis bir interface olabilir veya OVS uzerinde yaratilmis bir bridge port olabilir keze br-bond0 bir bridge port
  • Bundan sonra yapmamiz gereken sey arka tarafin yani network switch vlan konfigrasyonlarinin , sunucu port vlan konfigrasyonlarinin dogru bir sekilde ayarli olmasi
  • Administrative role’e sahip bir kullanicinin ilgili network’u olusturup , sanal makineye atanmasi
    • Komut satirinda ilgili Openstack RC dosyasini calistirin (ilgili proje, kullanici bilgilerini environment variables olarak atanmasi)
      • Kisaca komut satirinda
        • stack@helion-cp1-c0-m1-mgmt:~$ source service.osrc
        • stack@helion-cp1-c0-m1-mgmt:~$ export OS_PROJECT_NAME=”demo” veya hangi proje ise
    • stack@helion-cp1-c0-m1-mgmt:~$ neutron net-list  –> Diyerek isinalim
    • Network tipi vlan olan bir network yaratalim
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron net-create vlan185 –provider:network_type vlan –provider:physical_network physnet1 –provider:segmentation_id 185 –router:external false
      • Burada –router:external onemli , eger true derseniz bu degere bu durumda ilgili IP blogu floating IP icin kullanilacagini , herhangi VM’e set edilemeyecegini, yeni router yaratilip bu network’e baglayabileceginizi gosteriyor
    • Subnet yaratalim, yaratirken gw adresini set edelim
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron subnet-create –name subnetvlan185 vlan185 212.58.25.160/28 –gateway 212.58.25.161
      • Subnet yarattiktan sonra DHCP aktive olacagindan siradan iki ip yani 212.58.25.162 ve 212.58.25.163 devreye girecektir.
      • Eger DHCP kullanmak istemiyorsaniz –disable-dhcp diyebilirsiniz.
    • Port yaratalim , dikkat tenant ve daha onceden yarattigim network’u kullandim
      • stack@helion-cp1-c0-m1-mgmt:~$ neutron port-create –tenant-id 48bf85bade894282a9f8c44d7802f4e7 –name vlantestport vlan185
      • Port-ID not edin (358a66d9-258a-42db-93c3-2e978259858c)
      • Ayni zamanda port-id’nin ilk 11 hanesini (358a66d9-25)
      • Ek olarak network_id not edin (2bd6c596-df9b-4beb-abfb-69f8995104d2)
      • Birde security_groups degerini not edin (0101df20-a25d-48ae-a6f7-0a9b2149f217)
    • Instance yaratalim
      • nova boot –flavor m1.tiny –image cirros-0.3.3-x86_64 –nic port-id=358a66d9-258a-42db-93c3-2e978259858c vlantestvm
      • Yarattigimiz instance hangi host uzerinde yaratildigina bakalim
      • stack@helion-cp1-c0-m1-mgmt:~$ nova show 15114f09-030f-44f8-ae33-1543b518c613
        • OS-EXT-SRV-ATTR:hypervisor_hostname  | helion-cp1-compute0002-mgmt
        • OS-EXT-SRV-ATTR:instance_name | instance-0000003c
      • Host’a baglanip kontrol edin/dogrulayin
        • stack@helion-cp1-compute0002-mgmt:~$ sudo virsh list
        • 5     instance-0000003c              running
      • Simdi openvswitch kullandigimizi soylemistik, bakalim oradan neler olmus, ovs-vsctl komutunu calistirin instance’in acildigi host uzerinde.
        • stack@helion-cp1-compute0002-mgmt:~$ sudo ovs-vsctl show | grep 358a66d9-25
          • veya
        • stack@helion-cp1-compute0002-mgmt:~$ sudo ovs-vsctl show | sed -n “/358a66d9-25/,/358a66d9-25/p”
        • br-int altinda ilgili bilgiler goreceksiniz, burada tag 6 diyor , aslinda bizim vlan185 idi
        • Port “qvo358a66d9-25”tag: 6Interface “qvo358a66d9-25”
        • Artik hardware degil software switch kullaniyoruz ve arp / switching tablosu degil flow tablosu ile ilgileniyoruz, bunun icin br-int bridge interface’ine ait tanimlanmis flow’lari listelemeliyiz
        • ovs-ofctl dump-flow komutunu flow bilgisin almak icin kullanacagiz
        • mod_vlan_id, openvswitch’in kendi icinde kullandigi bir etiketleme , dis dunyada VLAN icinde ise farkli bir vlan kosuyor.
        • dl_vlan ise dis dunyada kullanilan vlan , yani instance disari cikmak veya disardan instance’i bulmak istenildiginde 185 vlan’ina gelen paketler 6 vlan’ina , instance’da disari biryere paket gonderilmek isteniyor ise 6 vlan’indan 185 vlan’ina iletiliyor paketler
        • stack@helion-cp1-compute0002-mgmt:~$ sudo ovs-ofctl dump-flows br-int | grep mod_vlan_vid:6
        •  cookie=0x9dfdd283abb52bc6, duration=3143.625s, table=0, n_packets=7, n_bytes=420, idle_age=1971, priority=3,in_port=1,dl_vlan=185 actions=mod_vlan_vid:6,NORMAL
      • Birde Openstack’de network sanallastirma nasil yapiliyor’a bakalim , benim kurulumumda 3 adet Network Node’u var, ben ucune birden baglandim cunku networkler bu node’lar arasinda loadbalance edildiginden hangisinde acildigini bilmiyorum (Eger subnet yaratirken bu –disable-dhcp kullandiysaniz bundan sonrasi isinize yaramayacak)
        • Burada bilmemiz gereken sey Linux ve Namespaces , network sanallastirma network namespace’den geliyor ve ip netns komutuyla gorebiliyorsunuz. Bunun disinda mount , Cgroup , User , pid gibi namespaces’lar var. Ornegin Pid Namespace , container’lari dusunun her bir container’in kendine ait calisan process’leri mevcut ve bunlar birbirinden izole.
        • Openstack ve network sanallastirma adina konusursak , her bir network icin tum TCP/IP katmaninin bir klonu aliniyor bunun icinde interface/nic ve routing table’larin oldugunu dusunun boylece istenir ise her bir network ayni IP blogu ile calisabiliyor , mesela herkesin 10.0.0.0/24 network’unu kullaniyor gibi ama birbirlerine karismiyorlar, izole sekildeler.
        • stack@helion-cp1-c1-m1-mgmt:~$ sudo ip netns | grep 2bd6c596-df9b-4beb-abfb-69f8995104d2
        • qdhcp-2bd6c596-df9b-4beb-abfb-69f8995104d2
        • qdhcp , dhcp interface’inin baglandigi sanal bir network ve bir interface iceriyor , bakalim nasil bisiy
        • stack@helion-cp1-c1-m1-mgmt:~$ sudo ip netns exec qdhcp-2bd6c596-df9b-4beb-abfb-69f8995104d2 ifconfig
          • Ciktisinda tap interface olarak gordugunuz dhcp interface’i ve ip’si
        • Ayni network nodu uzerinde tap device’in bilgisini not alarak calisan dnsmasq uygulamasini kontrol edelim
        • stack@helion-cp1-c1-m1-mgmt:~$ ps -fe | grep dnsmasq | grep tapa5d7544f-9b
        • nobody    2524     1  0 14:08 ?        00:00:00 dnsmasq –no-hosts –no-resolv –strict-order –except-interface=lo –pid-file=/var/run/neutron/dhcp/2bd6c596-df9b-4beb-abfb-69f8995104d2/pid –dhcp-hostsfile=/var/run/neutron/dhcp/2bd6c596-df9b-4beb-abfb-69f8995104d2/host –addn-hosts=/var/run/neutron/dhcp/2bd6c596-df9b-4beb-abfb-69f8995104d2/addn_hosts –dhcp-optsfile=/var/run/neutron/dhcp/2bd6c596-df9b-4beb-abfb-69f8995104d2/opts –dhcp-leasefile=/var/run/neutron/dhcp/2bd6c596-df9b-4beb-abfb-69f8995104d2/leases –dhcp-match=set:ipxe,175 –bind-interfaces –interface=tapa5d7544f-9b –dhcp-range=set:tag0,212.58.25.160,static,172800s –dhcp-lease-max=16 –conf-file=/opt/stack/service/neutron-20160722T142043Z/etc/dnsmasq/dnsmasq-neutron.conf –domain=openstacklocal
        • Simdi ovs-vsctl show ve ovs-oflow dump-flows komutlari ile sizdeki tap portunu bulmaya calisin.
    • DHCP icin atanan ip adreslerini ping’leyip test edelim
      • PING 212.58.25.162 (212.58.25.162): 56 data bytes64 bytes from 212.58.25.162: icmp_seq=0 ttl=60 time=12.641 ms
    • Instance ping’lenmeyecek , instance yarattigimizda default security-group atandi instance’a
      • default security-group disari any, iceri dogru ise hicbir erisime izin vermez
      • Iceriye dogru All ICMP izni verin ve test edin
      • 64 bytes from 212.58.25.164: icmp_seq=90 ttl=60 time=0.840 ms

 

Posted on 11/11/2016, in Openstack and tagged , . Bookmark the permalink. Leave a comment.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: