Open vSwitch Kurulumu: SDN, VLAN ve OpenFlow Yapılandırması
Önce ne kuruyoruz
Open vSwitch, hypervisor üzerinde çalışan katman 2 sanal anahtarına dayalı bir veri düzlemi projesidir. Cisco benzeri fiziksel switch mantığının yazılıma taşınmış hali demek yanlış olur; asıl amacı, sanal makinelerin ağa çıkışını merkezi bir kontrolcünün yönetebildiği akış tabanlı bir yapı üzerinden yapmak. OVS kısaltması metnin geri kalanında bu araç için kullanılacak.
İşin çekirdeğinde üç bileşen var. ovsdb-server yapılandırmayı JSON tabanlı OVSDB veritabanında tutar. ovs-vswitchd bu veritabanını okuyup çekirdek modülüne ya da kullanıcı alanı veri düzlemine iş yaptırır asıl anahtar daemonu. Üçüncüsü openvswitch çekirdek modülüdür; paket işleme hızının buradan gelmesinin sebebi akışların çekirdek tarafında önbelleklenmesidir. Yönetim tarafında ovs-vsctl genel yapılandırma, ovs-ofctl OpenFlow akış işlemleri, ovs-appctl de iç durum sorgulama için kullanılır.
Kurulum
Debian ve Ubuntu tarafında paket adı openvswitch-switch. Kurulum sonrası servis, çekirdek modülünü kendisi yükler.
sudo apt install openvswitch-switch
sudo systemctl enable --now openvswitch-switch
ovs-vsctl -V RHEL ve türevlerinde paketin adı openvswitch, servis de aynı isimle gelir. Dağıtımın deposunda bulunuyorsa dnf install openvswitch ile kurulur. Yapılandırma kalıcıdır; Debian tabanında /etc/openvswitch/ altındaki veritabanı dosyasında saklanır, reboot sonrası köprüler ve portlar yerinde durur.
Köprü ve portlar
Bir köprü, fiziksel dünyadaki switchin OVS karşılığı. Üzerine fiziksel arayüz, tap arayüzü ya da tünel portu eklenir. En küçük çalışır örnek:
sudo ovs-vsctl add-br br0
sudo ovs-vsctl add-port br0 eth1
sudo ip link set br0 up eth1 burada uplink görevi görür. Host üzerinde görünmeyen ama IP alınabilen bir sanal arayüz istenirse type=internal portu kullanılır; ip link çıktısında normal bir NIC gibi listelenir.
sudo ovs-vsctl add-port br0 mgmt0 -- set interface mgmt0 type=internal VLAN tarafı
802.1Q etiketleme OVS portuna doğrudan bağlı bir özellik. Bir porta tag vermek onu o VLANın üyesi yapar; etiketleme sanal makine tarafına bırakılmadan anahtar üzerinde yapılır. Tag alanı 12 bit olduğundan kullanılabilir aralık 1 ile 4094 arası.
sudo ovs-vsctl add-port br0 tap1 tag=20
sudo ovs-vsctl add-port br0 tap2 tag=30 Uplink tarafında birden çok VLAN geçecekse trunks parametresi devreye girer:
sudo ovs-vsctl set port eth1 trunks=20,30 Port davranışı vlan_mode ile netleştirilir. Dört mod var: access gelen trafiği etiketler, trunk etiketli trafiği geçirir, native-tagged ve native-untagged ise etiketsiz trafiğin hangi VLANa ait sayılacağını belirler. Native VLAN kavramı fiziksel anahtarlardakiyle aynı; uplinkte etiketsiz gelen trafiğin bir VLANa map edilmesi gerektiğinde bu modlar kullanılır.
LACP ile fiziksel anahtara bağlanmak gerekiyorsa bonding OVS içinde tanımlanır:
sudo ovs-vsctl add-bond br0 bond0 eth1 eth2
sudo ovs-vsctl set port bond0 lacp=active OpenFlow ve kontrolcü bağlantısı
Kontrolcü tanımlanmamış bir köprü, standalone fail modunda sade bir öğrenen switch gibi davranır. SDN tarafına geçiş, köprüyü bir kontrolcüye bağlamakla başlar. 6653, OpenFlow için ayrılmış standart porttur; eski dağıtımlarda 6633 de görülür.
sudo ovs-vsctl set-controller br0 tcp:127.0.0.1:6653
sudo ovs-vsctl set bridge br0 protocols=OpenFlow13
ovs-ofctl show br0 ovs-ofctl show çıktısı kritik bir detay verir: her portun OpenFlow port numarası. Akış yazarken in_port ve output bu numaraları kullanır. Kontrolcü tarafında Ryu, ONOS, OpenDaylight yaygın seçenekler. Laboratuvar ortamında Mininet ile fiziksel makineye dokunmadan tüm bu topoloji denenebilir.
Akıllıca bir ilkleme kuralı örneği:
sudo ovs-ofctl add-flow br0 "priority=100, in_port=1, actions=output:2"
sudo ovs-ofctl add-flow br0 "priority=1000, dl_type=0x0806, actions=drop"
ovs-ofctl dump-flows br0 İlk kural 1 numaralı porttan gelen her şeyi 2 numaralı porta yönlendirir. İkincisi yüksek öncelikle ARP paketlerini düşürür; öncelik sıralaması eşleşen ilk kuralın kazanması mantığına dayanır. Kontrolcü bağlantısı koptuğunda davranışı set-fail-mode belirler: standalone öğrenen switch moduna döner, secure ise akış tablosundaki mevcut kurallarla devam eder ve yeni bağlantı kurmayı reddeder. Üretimde tercih edilen genellikle securetır.
Tüneller ve performans
VXLAN ve GRE tüelleri overlay ağ için port olarak eklenir. VXLAN örneğinde karşı ucun adresi remote_ip ile verilir; komuttaki adres alanı yer tutucudur, kendi ortamınıza göre değiştirilir.
sudo ovs-vsctl add-port br0 vx0 -- set interface vx0 type=vxlan options:remote_ip=KARSI_UCUN_IP_ADRESI Paket işlemeyi kullanıcı alanına taşıyan OVS-DPDK varyantı, çekirdek modülünü atlayıp poll mode driverlarla çalışır ve yüksek PPS gereiren NFV senaryolarında kullanılır. Tümleşik çözümler de aynı temele dayanıyor: OVN, OVS üzerine kurulu kontrol düzlemi katmanıdır ve OpenStack tarafında klasik Neutron OVS ajanının yerini güncel sürümlerde büyük ölçüde almıştır. OVN-Kubernetes gibi projeler de altta aynı veri düzlemini kullanır.
Doğru başlangıç noktası tek köprü, tek uplink ve iki internal port. VLAN etiketleri çalışınca OpenFlow tarafına geçmek, akış mantığını kafada oturtmanın en hızlı yolu. Kontrolcüsüz başlayıp ovs-ofctl ile akış yazmak, tam SDN kurulumuna geçmeden önce el alışkanlığı kazandırır.