Open vSwitch amblemi

Open vSwitch Nedir ? Nasıl Kullanılır ?

--

Merhabalar bu makalede sistemlerin bir çoğunda kullanılan Open vSwitch konusundan bahsedeceğim. Open vSwitch yazılımın, networkte devrim yaptığı bir proje denilebilir .

Bu makalede Open vSwitch’i docker ve vm ile birlikte kullanarak uygulamalar yapacağız . Network konusunda ne kadar işlevsel olduğunu göreceğiz .

Hadi gelin ayrıntılarına kadar inceleyelim ...

Open vSwitch Nedir ?

Open vSwitch 2009 yılında çıkmış açık kaynak kodlu(Open-source) çok katmanlı(multi-layer) sanal bir switchtir . OVS olarak da kısaltılır.

Daha iyi anlaşılması için, linux server üzerinde sanal bir switch oluşturur diyebiliriz.

Open vSwitch network sistemlerimizin bir çoğunda kullanılmaktadır. Günümüzde VM(VMware, KVM ,Xen gibi sanallaştırma teknolojileri) , Openstack ,Docker , Kubernetes gibi sitemlerin bir çoğunda görmekteyiz. SDN(Software Defined Networking) kısmından hiç bahsetmiyorum bile!! Mesela bir VM açıyorsanız VM in network haberleşmesini Open vSwitch sayesinde yapabiliyorsunuz . Docker , Kubernetes gibi container sistemlerinde kullanabiliyoruz. Openstack ‘te network yapsını Open vSwitchle yapıp Neutron ile de SDN yapısı kurabiliyorsunuz .

Linux, Windows ortamında çalışmaktadır . Malesef Mac OS / OSX desteklememektedir.

Gelin şimdi desteklediği protokoller ile neler yapabildiğini görelim .

Desteklediği Protokoller

  • Netflow
  • sFlow
  • SPAN
  • RSPAN
  • CLI
  • LACP
  • GRE
  • VXLAN

Netflow Cisco tarafından geliştirilen bir switch üzerinden giden veya gelen trafiği toplayarak ağ trafiğini izleme protokolüdür. Protokol Layer 2 den sonra ki katmanları kapsar.

Sflow Netflow gibi switch üzerinden geçen trafiği monitoring yapmamızı sağlar . Sflow netflow gibi stateful yapısı yoktur. Trafiğin tamamını gözlemez sadece örnekleme alır . Trafiğin belli bir istatisliğini çıkarır. Örnekleme alırken rastgele paketler seçer. Örnekleme sistemini kullanması yüksek hızlı veri transferi olan sistemlerde kullanması bir problem çıkarmaz . L2, L3, L4 ve L7 katmanlarında çalışır.

SPAN( Switched Port Analyzer) ve RSPAN( Remote Switched Port Analyzer) bu protokoller networkü gözlemlemek için port veya vlanı kontrol etmek istediğimiz trafiği bir kopyasını bir porta veya vlana göndererek analiz etmek için kullanılır. SPAN tek cihaz üzerinde RSPAN uzaktaki cihazlarda kullanılabilmektedir.

Open vSwitch CLI ile network sistemimizi kontrol edebilir , yönetebiliriz .

LACP(Link Aggregation Control Protocol) Bu protokol sayesinde birden fazla fiziksel bağlantıyı tek bir hatmış gibi gösterir. LACP sayesinde bant genişliğimi artırabilir ve fiziksel bir yedekliliği sağlayabiliriz.

GRE(Generic Routing Encapsulation) Cisco tarafından geliştirilmiş 3. layer katmanda çalışan tünelleme protokolüdür.

VXLAN bir overlay network teknolojisidir. VXLAN geniş çaplı bulut bilişim sistemlerinde ağların ölçeklenebilirlik sorunlarına bir çözüm amacıyla tasarlanan bir ağ sanallaştırma tekniğidir. Vlan 4094(2¹²) adet ölçekleme sağlarken . VXLAN de ise 16777216(2²⁴) adet ölçeklendirme sağlar

OVS gördüğümüz gibi bir çok protokolü destekliyor . Bu protokoller desteklemesi özelliklerini de ortaya çıkarıyor .

Ayrıca bir daha tekrarlıyorum OVS ,SDN(Software-Defined Network) alt yapısında kullanılan önemli birleşenidir. Mesela Netflow protokolü SDN de networkü izlemek için kullanılıyor. SDN konusunu da ilerleyen zamanlarda anlatacağım .

Gelin şimdi OVS yi kuralım ve bir kaç örnek yapalım … !

Open vSwitch Kurulum

Ubuntu için kurulum;

Kuruluma başlamadan güncelleme yapalım .

$ apt update -y

Güncelleme bittiyse o zaman kurulma başlayalım .

$ sudo apt-get install openvswitch-switch

Ubuntu için kurulum bu kadar basit gelin versiyonunu öğrenelim .

root@ubuntu:~# ovs-vsctl --version
ovs-vsctl (Open vSwitch) 2.9.5
DB Schema 7.15.1

RHEL 7.x için kurulumu dokümanlarından yapabilirsiniz; link

Windows için kurulumu dokümanlarından yapabilirsiniz. ; link

Gelelim şimdi en tatlı kısmına bir kaç örnekle pekiştirelim .

1- Docker Örnek

Docker da containerlar da Open vSwitch kullanmak istersek ovs-docker komutunu kullanabiliriz. Gelin öyle bir örnek yapalım ;

Aşağıda br-int adında bir bridge interface oluşturduk .

br-int add

Oluşturduğumuz bridge network e ip verirsek ;

br-int 172.32.1.1/24 bir ip verdik subentinide 24 seçtik .

Şimdi container oluşturalım ve Open vSwitch ile oluşturduğumuz interface i bağlayalım .

Yukarıda busybox containerlarımızı oluşturduk şimdi de Open vSwitch ile oluşturduğumuz br-int i containerlara interface olarak ekleyelim.

İnterfaceleri ek olarak ekledik şimdide arasındaki haberleşmelere bakalım ;

Haberleşmelerini görebiliyoruz.

Bu kısmı anladıysak , biraz daha zor bir örneğe geçelim o zaman !!

2- Docker Örnek

Gelelim şimdi Open vSwitch ile farklı 2 docker host içindeki containerları GRE tunnel ile haberleştirelim . 2 adet server veya VM’e ihtiyaç vardır.

  • Node-1 ip: 192.168.1.5
  • Node-2 ip: 192.168.1.7

Node 2 için container oluşturalım

Node 1 için container oluşturalım

Farklı iki ip olması için aynı ipli containerı kapatıyortuz.

Node 1 için Open vSwitch te bridge bir interface oluşturalım ;

Burada overlay-ovs adında bir bridge oluşturduk .

Burada ip link ile sanal bir ethernet oluşturduk . 21: veth1@veth0 ve 22: veth0@veth1 den görebilirsiniz.

Bu oluşturduğumuz 2 adet sanal etherneti ; veth1 ,overlay-ovs bridge e bağladık . veth0 da brctl komutu ile docker0 bridge’ine ekliyoruz. ip link yaptığımızda da bunu görebiliyoruz.

Node-2 için ;

Node 2 içinde bu adımları yapıyoruz . veth0 ve veth1 oluşturuyor ve overlay-ovs ve docker0 a bağlantılarını yapıyoruz.

Bu adımları yaptıktan sonra GRE tünel oluşturarak haberleşmelerini buradan sağlayalım .

Open vSwitch ile GRE tünel oluşturduk ve iplerine Node-1 için 192.168.32.10 , Node-2 için 192.168.32.11 ipsini verdik.

Node-2 den bir Open vSwitch ve bridge örnek bir çıktı alalım . Daha sonra GRE Tunnel haberleşmesini kontrol edelim.

GRE tünel haberleşmemiz yukarda göründüğü gibi başlamıştır.

GRE tunnel

Topoloji yukarıdaki gibidir .Open vSwitch sayesinde GRE tünel oluşturulmuş docker0 ile containerlar arası haberleşme yapılabilmektedir.

VM Örnek -3

Open vSwitch i anlamak için güzel bir örnek daha yapalım. Server üzerine Open vSwitch ile yüklediğimiz vm lere interface verelim.

Open vSwitch yüklenmiş bir server sadece ethernet bağlantısı olduğu zaman şu şekildedir.

vm sadece ethernet bağlantısı vardır.

Daha sonra vm içine bir Open vSwitch ile bir bridge oluşturursak ;

root@ubuntu1:/home/ubuntu1# ovs-vsctl add-br mybridge
root@ubuntu1:/home/ubuntu1# ovs-vsctl show
67717d32-06d3-419c-8e48-a4215cbda7cc
Bridge mybridge
Port mybridge
Interface mybridge
type: internal
ovs_version: "2.9.5"
root@ubuntu1:/home/ubuntu1# ifconfig mybridge up

Bridge olarak eklendikten sonra brdige ethernet üzerinden internete erişim sağlayabilir. İp vererek dışarı çıkartabiliriz. Eğer ethernet bridge üzerinden çıksın istersek ;

Not: Bu adımlardan sonra vm ile bağlantınız kopucak.

root@ubuntu1:/home/ubuntu1# ovs-vsctl add-port mybridge ens33

Şuan internete çıkamıyoruz bağlantılarımız şu şekilde;

mybridge üstünden internete çıkıyor.
root@ubuntu1:/home/ubuntu1# dhclient 

Dhcp serverdan ip aldırrısak kendimize mybridge in ip aldığını görebiliriz. SSH ile bağlandıktan sonra bridge leri listeleresek ;

root@ubuntu1:~# ovs-vsctl show
67717d32-06d3-419c-8e48-a4215cbda7cc
Bridge mybridge
Port "ens33"
Interface "ens33"
Port mybridge
Interface mybridge
type: internal
ovs_version: "2.9.5"

Ethernet bacağımızı buradan görebiliyoruz.

Server üstüne vm kurabilir ve ona interface bacağını Open vSwitch ile verebiliriz ;

root@ubuntu1:~# ip tuntap add mode tap vport1
root@ubuntu1:~# ip tuntap add mode tap vport2
root@ubuntu1:~# ifconfig vport1 up
root@ubuntu1:~# ifconfig vport2 up
root@ubuntu1:~# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::20c:29ff:fec3:bd9d prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:c3:bd:9d txqueuelen 1000 (Ethernet)
RX packets 385 bytes 44435 (44.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 339 bytes 45505 (45.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 415 bytes 38649 (38.6 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 415 bytes 38649 (38.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
mybridge: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.5 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fec3:bd9d prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:c3:bd:9d txqueuelen 1000 (Ethernet)
RX packets 325 bytes 34982 (34.9 KB)
RX errors 0 dropped 53 overruns 0 frame 0
TX packets 200 bytes 25911 (25.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vport1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 32:c4:1a:39:78:44 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vport2: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 3a:17:98:8a:29:be txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@ubuntu1:~# ovs-vsctl add-port mybridge vport1 -- add-port mybridge vport2
root@ubuntu1:~# ovs-vsctl show
67717d32-06d3-419c-8e48-a4215cbda7cc
Bridge mybridge
Port "vport1"
Interface "vport1"
Port "ens33"
Interface "ens33"
Port "vport2"
Interface "vport2"
Port mybridge
Interface mybridge
type: internal
ovs_version: "2.9.5"

Not : Bu komutta “ovs-vsctl add-port mybridge vport1 — add-port mybridge vport2” — nin anlamı bir daha ovs-vsctl yazmak yerine bir satırda 2 komut çalıştırmamıza yarar.

Burada mybridge bridge virtual interface bağlamış bulunmaktayız diagramda şöyle gözükür;

Daha sonra VM oluşturarak bu interfacelere vm leri bağlayabilirsiniz .

Sonuç

Open vSwitch ile görüldüğü üzere network ile hamur gibi oynayabilir ve istediğimiz esnekliğe sahip olduğunu görebiliriz. Bu makalede örnekler üzerinde açıklamaya çalıştım . Bunun gibi bir çok senaryo ve örnek yapılabilir. Okuduğunuz için teşekkür ederim .

Önceki makalemde etcd ile docker hostlar arasında cluster oluşturmuş containerlar arsında overlay network ile haberleşmeleri sağlamıştım . Makaleye buradan erişebilirsiniz.

Ayrıca diğer makaleleri profilimden veya DevxOps dan görebilirsiniz.

Kaynak

--

--

Serdarcan Büyükdereli
Devops Türkiye☁️ 🐧 🐳 ☸️

Linux ,Bulut sistemleri hayranı paylaşımcı bir Jedi . Docker, Kubernetes , Linux …