Gartner, 2021’de %30 olan yeni dijital iş yüklerinin %95’inden fazlasının, 2025’e kadar bulut yerel platformlarda konuşlandırılacağını tahmin ediyor. Aynı zamanda Kubernetes, bulutlar arası düzenleme için fiili standart ve bulut yerel mimarileri.
Bu geçişte büyük rol oynayacak katkıda bulunan bir teknoloji, Berkeley Paket Filtresinin (eBPF) genişletilmiş versiyonudur. eBPF, programların ana işletim sisteminin çekirdeğinde (önce Linux ve şimdi de Windows) çalışmasını ve çekirdeğin kaynak kodunu değiştirmeden çekirdeği çalıştırmasını sağlar. eBPF programları, çekirdek sürümleri arasında taşınabilir ve atomik olarak güncellenebilir, bu da iş yükünün kesintiye uğramasını ve düğümün yeniden başlatılmasını önler. eBPF programları, çekirdek çökmesini veya diğer istikrarsızlıkları önlemek için yükleme sırasında doğrulanabilir.
eBPF, Linux ve Windows çekirdeği içinde çalışan kendi talimat setine sahip soyut bir sanal makinedir (VM). eBPF, çekirdekteki bir sanal alan içinde kullanıcı tanımlı programları yürütebilir. Bu sanal alan programları, çekirdekteki olaylar tarafından tetiklenir, çekirdeğe veya kullanıcı alanı belleğine işaretçiler alır.
eBPF proje düzeni üç sütundan oluşur (bkz. Şekil 1):
- eBPF programlarıçekirdekte çalışır ve olaylara tepki verir.
- Kullanıcı alanı programlarıeBPF programlarını çekirdeğe yüklemek ve onlarla etkileşim kurmak.
- BPF Haritaları (karma haritalar, diziler, halka / perf tamponu), çekirdekte kullanıcı alanı programları ve eBPF programları arasında veri depolama ve bilgi paylaşımına izin verir.
geliştirme aşamasındabkz. Şekil 1, eBPF programı bayt kodu çekirdeğe enjekte edilir. Genel olarak eBPF programı C veya Rust ile yazılır ve bir nesne dosyası olarak derlenir. Bu, aşağıdakiler gibi araçlar kullanılarak analiz edilebilen standart bir Yürütülebilir ve Bağlanabilir Biçim (ELF) dosyasıdır: elf ve hem program bayt kodunu hem de herhangi bir haritanın tanımını içerir. Linux çekirdeği, eBPF programlarının bayt kodu biçiminde yüklenmesini bekler. Sözde C kodunu eBPF bayt koduna derlemek için LLVM gibi bir derleyici paketi kullanılabilir.
eBPF Haritaları, eBPF’nin edinilen bilgileri paylaşmasını ve durumu korumasını sağlar. Sonuç olarak, eBPF programları, çeşitli veri formatlarında verileri korumak ve almak için eBPF haritalarını kullanabilir. eBPF haritalarına, hem eBPF programlarından hem de kullanıcı alanı uygulamalarından bir sistem çağrısı yoluyla erişilebilir. Hash tabloları, Diziler; LRU (En Son Kullanılan); Halka Tamponu; Yığın İzleme ve LPM (En Uzun Önek Eşleşmesi), destek eşlemelerine örnektir.
çalışma zamanında evreevvel) Kütüphane eBPF programını bir eBPF sistem çağrısı kullanarak çekirdeğe yükler. Ardından, çekirdek kodu doğrular ve Tam Zamanında (JIT) Derleyici eBPF programını derler ve onu istenen kancaya ekler. eBPF programları, çekirdek veya bir uygulama belirli bir değerden geçtiğinde özel kodun çekirdekte çalışmasına izin verir. kanca noktası (sistem çağrısı, işlev girişi/çıkışı, çekirdek izleme noktası, ağ olayı vb.). eBPF programları, BPF haritalarını kullanarak çekirdek ve kullanıcı alanı arasında görünürlük sağlar.
Şekil 1’de gösterildiği gibi, çekirdeğe bir eBPF programı yüklendiğinde, bir olay tarafından tetiklenecektir (şekilde TC girişi/çıkış ve soketler). Olay gerçekleştiğinde, ekli eBPF program(lar)ı yürütülecektir.
Örneğin, eBPF programlarını çalıştırmak, Linux çekirdeğinin ağ yığınında desteklenen bir dizi eBPF kancası kullanılarak mümkündür. Aşağıdaki kancalar birleştirilerek daha yüksek seviyeli ağ yapıları oluşturulabilir:
- Ekspres Veri Yolu (XDP): ağ sürücüsü, XDP BPF kancasını takmanın mümkün olduğu en eski noktadır. Ve bir paket alındığında, eBPF programı çalışmak üzere tetiklenir.
- Trafik Kontrol Girişi/Çıkış: XDP gibi, eBPF programlarını trafik kontrol girişine bağlayarak, eBPF programları bir ağ arabirimine eklenir. XDP ile arasındaki fark, eBPF Programının, paketin ağ yığını tarafından ilk işlenmesinden sonra çalışacak olmasıdır.
- Soket işlemleri: Başka bir bağlantı noktası seti, eBPF programını belirli bir gruba bağlayan ve bunları TCP olaylarına dayalı olarak tetikleyen soket işlemleri kancasıdır.
- Soket gönderme/alma: Soket gönderme/alma kancası, bir TCP soketi tarafından gerçekleştirilen her gönderme işleminde ekli eBPF programlarını tetikler ve çalıştırır.
Çekirdek işlevleri için Kprobes ve kullanıcı alanı işlevleri için Uprobes kullanarak işlev çağrıları yapmak da mümkündür. Güvenlikle ilgili eylemler, Linux Güvenlik Modülü (LSM) kancaları (çekirdek 5.7 ve sonraki sürümler) kullanılarak gerçekleştirilebilir.
Kapsamlı bir eBPF gözlemlenebilirlik araçları seti Şekil 2’de gösterilmektedir. Şekil, sistemin çok çeşitli parçalarının eBPF programlarıyla donatılabileceği hakkında bir fikir vermektedir.
Çok çeşitli olaylar sayesinde eBPF programları, verimli ağ oluşturma, izleme ve veri profili oluşturma, gözlemlenebilirlik ve tehdit savunması ve izinsiz giriş tespiti gibi güvenlik araçları için kullanılabilir. Şekil 3’te gösterilen eBPF yığınına bakın.
Neden eBPF?
Daha fazla çekirdek alt sistemi eBPF kullanılarak genişletilebilir hale geldikçe, sürücüler ve yakında çekirdek modülleri eBPF’de yazılabilecek olduğundan, yerel bulut mimarisi, eBPF tabanlı uygulamaların temel sürücülerinden biridir.
Daha önce de belirtildiği gibi, tipik kullanım durumları güvenlik, ağ iletişimi ve gözlemlenebilirliktir. Güvenlik ve ağ oluşturma arasındaki kesişme, “ağ güvenliği” uygulamalarına yol açar. Güvenlik ve gözlemlenebilirlik arasındaki örtüşme, “gerçek zamanlı tehdit algılama ve müdahale” uygulamalarına yol açar. Ağ oluşturma ve gözlemlenebilirlik birlikte “ağ gözlemlenebilirliği” uygulamalarıyla ilgilidir. “Akıllı uygulama sanal alanı”, Şekil 4’te gösterildiği gibi güvenlik, ağ ve gözlemlenebilirlik kesişiminin sonucudur.
Şekil 5, eBPF’nin bulut tabanlı ortamlara getirdiği bazı değerleri bir araya getiriyor. eBPF, inanılmaz bir programlanabilirlik gösterir, eBPF doğrulayıcı, yüklenen programların güvenli olmasını sağlar ve çekirdeği çökertmemelerini garanti eder. eBPF, politikanın mükemmel görünürlüğünü ve uygulama kontrolünü sağlar ve operatörlerin, aynı alanda çalışan uygulamaların neredeyse hiç başaramadığı, kullanıcı alanında çalışan tüm programları gözlemlemesine olanak tanır. Ayrıca eBPF, düşük ek yük sunarak onu üretimdeki konteynerler için ideal hale getirir.
Ayrıca, iptables kurallarının eBPF haritalarıyla değiştirilmesi, operatörlerin verileri doğrudan gelen soketlerden giden soketlere taşımasına olanak tanır, bu da eBPF ile süper hızlı hizmet yükü dengeleme sağlar. Bir Kubernetes kümesinde çoğaltılan dört bölme arasında yük dengelemenin eBPF kullanılarak nasıl elde edildiğine ilişkin bir örnek Şekil 6’da gösterilmektedir.
Tablo 1, bu teknolojinin diğer birçok kullanım durumunu desteklemek için nasıl gelişmesinin beklendiğini gösteren eBPF’nin on faydasını özetlemektedir. Bunlar, Veri Düzlemi Geliştirme Kiti’nin (DPDK) aksine, Kubernetes ile doğal bir şekilde uyum sağlayan XDP ve AF_XDP doğrudan yolunu kullanma olasılığını içerir; ve sürdürülebilir bilgi işlem projelerine ulaşmak için Kepler, Kubernetes kümeleri için eBPF aracılığıyla enerji tüketim verilerini gösteren açık kaynaklı bir güç düzeyi dışa aktarma ücreti. Kepler, Linux’a eklenen eBPF programlarına dayalı olarak veri toplar izleme noktaları ve işlem kimliği, grup kimliği, cpu döngüleri, cpu zamanı, cpu talimatları, önbellek eksiklikleri vb. gibi bilgileri toplamak için performans sayaçları. Kullanıcı alanındaki diğer istatistiklerle birlikte toplanan veriler daha sonra bölmeler tarafından enerji tüketimini tahmin etmek için kullanılır.
# | olduğu gibi | Olmak |
1 | eBPF, çekirdek sürümlerinden ayırarak geliştirmeyi hızlandırır | eBPF’li 5G veri uçakları, eBPF’li IoT güvenlik uygulaması bugün var |
2 | eBPF, kaynakları serbest bırakarak veri işlemeyi olay kaynağına (yuva başına kancalar, grup öncesi kancalar, XDP vb.) yaklaştırarak kaydırır | Merkezinde eBPF bulunan APM ve güvenlik izleme platformları |
3 | eBPF, daha kısa üretim geri bildirim döngülerine, çekirdekten ayırmaya ve anında atomik program güncellemelerine ve konum farkında işlemeye izin verir | Buluta XDP ve eBPF L4LB’ler/ağ geçitleri, memcache’ler/hızlandırıcılar vb. |
4 | eBPF, BPF ana bilgisayar yönlendirmesi ve BPF bant genişliği yöneticisi sayesinde trafiği önemli ölçüde daha düşük gecikme süresiyle taşır | XDP ve AF_XDP, DPDK’nin aksine Kubernetes ile doğal bir şekilde uyum sağlar |
5 | eBPF, diğer çekirdek alt sistemleri için çok karmaşık olan çekirdekten yapı taşları sağlar | eBPF ve SRv aracılığıyla trafik mühendisliği |
6 | eBPF (bir dereceye kadar) anında çekirdek hatalarını düzeltir veya hafifletir | eBPF tabanlı çözümler tercih edilen veya varsayılan seçimdir |
7 | eBPF, eski tarz mükemmelliğe göre önemli ölçüde daha zengin görünürlük, programlanabilirlik ve kullanım kolaylığı elde ederek, sisteme düşük maliyetli derin görünürlük ve uygulama sağlar | örneğin veri merkezi iş yükleri için CFS’yi özelleştirmek için eBPF işlem planlayıcısı (Google, Meta, Huawei) |
8 | eBPF, eski UAPI’den ayrılır ve verimli veri işlemeye izin verir | Sistem yazılımı ve kullanıcı uygulamalarının dosya bütünlüğü koruması/izlenmesi için eBPF ve IMA |
9 | eBPF, daha güçlü kimlik kavramları etrafında politika uygulama özellikleri oluşturmaya yönelik bir etkinleştiricidir | eBPF ve XDP benzeri katman artı depolama cihazları için daha iyi gözlemlenebilirlik, örneğin blok katmanı çevresinde ve altı |
10 | eBPF, geliştiricilerin çekirdeği bir “emniyet kemeri” ile genişletmesine izin verir | Kubernetes kümeleri için eBPF aracılığıyla enerji tüketim verilerini dışa aktaran Kepler gibi sürdürülebilir bilgi işlem projeleri |
eBPF’nin pazar potansiyeli, aşağıdaki örnekler de dahil olmak üzere 2022’deki birkaç önemli şirket hamlesine yansıtılmıştır:
Seekret, API varlıklarını, ara bağlantıları ve bağımlılıkları otomatik olarak keşfetmek ve görselleştirmek için güçlü eBPF teknolojisini kullanarak geliştiricilerin ve ürün liderlerinin karmaşık, dinamik ortamlarda API davranışını ve kullanım modellerini anlamasını sağlar.
Sektör, eBPF’yi kavramaktadır ve endüstrinin eBPF kullanımında ve anlayışında dikkate değer bir artış, daha fazla alıcı yaratmıştır. Büyük bir Kubernetes konferansında eBPF üzerine bir tartışma yapıldı ve bir yorumcu “KubeCon temelde eBPF idi” dedi.
Teknoloji, teknik olgunluğuna ulaştı. Aslında, eBPF’nin kendisi, özellikle Windows için eBPF nedeniyle belirgin şekilde daha genel amaçlı hale geldi. Ayrıca, eBPF programlarını tamamen Rust’ta yazmayı mümkün kılan bir kitaplık olan GCC ve Aya gibi bir dizi eBPF araç zinciri ortaya çıktı.
Müşterilerin abonelik yoluyla yazılıma erişebildiği ve belirli ürünlerle (örneğin, ağ gözlemlenebilirliği, çalışma zamanı güvenliği, enerji vb.) Şekil 7’de gösterildiği gibi hizmet ve destek türüne bağlı olarak bir veri kaynağı planı.
Kullanıcı abonelik planı, kullanıcı hesaplarının sayısını ve gerekli desteğin türünü dikkate alır. Veri kaynağı planı, bir kullanıma dayalı fiyatlandırma modeli. eBPF aracısına raporlanan veriler işlenir ve ardından karşılık gelen veri kaynağına özel dönüştürme kuralları kullanılarak baytlara (kullanım ölçümleri) dönüştürülür. Kullanıma dayalı fiyatlandırma modelini kullanıyorsanız, aylık ücretsiz miktarı aşan bayt sayısı için ücretlendirilirsiniz.
Başka bir olasılık da, Şekil 1’de gösterildiği gibi, kaynaklara, yani dağıtılan denetleyicilerin ve aracıların (arka plan programı setleri) sayısına ve destek türlerine (hizmetler) dayalı ücretlendirme yapmaktır.
JavaScript Web tarayıcısı için ne ise, eBPF de çekirdek için odur. Bazı zorluklar olsa da: eBPF geliştirmesi kolay değildir, eBPF hızlı tempoludur ve ayak uydurması zordur, uygulama ayrıntıları çekirdek sürümüne göre değişebilir ve kolay bir paketleme/dağıtım çözümü yoktur. Ancak bu temel olanak sağlayan teknoloji, özellikle dinamik programlanabilirliği, güvenilirliği ve minimum kesinti ile harika iş yükü görünürlüğü elde etme yeteneği sayesinde, çekirdek alanında büyük bir yenilik dalgasına yol açarak, yerel bir bulut ortamında anında faydalar sağlıyor.
Paketleri inceleyebilmemiz, bize Kubernetes meta verileri gibi diğer yönlerle eşleştirilebilen ve çıkarılan bilgilerden derinlemesine güvenlik adli tıpı elde edebilen son derece performanslı gözlemlenebilirlik araçları sağlıyor. Ağ politikaları için paketleri bırakma veya değiştirme ve güvenlik için eBPF ile şifreleme yapma becerisini kullanabiliriz. Ayrıca, paket gönderebildiğimiz ve bir paketin hedefini değiştirebildiğimiz için eBPF, yük dengeleme, yönlendirme ve hizmet ağı gibi güçlü ağ işlevleri oluşturmamıza olanak tanır. eBPF, yeni nesil hizmet ağını etkinleştirir çünkü bölmeleri sepetlerle donatmamız gerekmez ve herhangi bir Uygulama veya yapılandırma değişikliği olmadan yüksek performans elde ederiz.