Cilium Service Mesh ve eBPF Tabanli Ag Guvenligi
Kubernetes ağ güvenliği uzun süre NetworkPolicy ile eş anlamlıydı. Etiket bazlı seçiciler, ingress ve egress kuralları, çekirdeğe dahil bir API. Ama bu API yedinci katmana inmiyor, DNS sorgusunu filtrelemiyor, HTTP metoduna bakmıyor. Cilium boşluğu eBPF ile dolduruyor: çekirdek seviyesinde çalışan programlarla ağ yönetimi, politika uygulaması ve gözlemlenebilirlik aynı bileşende birleşiyor.
Çekirdeğin neresinde duruyor
eBPF, Linux çekirdeğinde izole biçimde çalışan küçük programlar yazmanızı sağlıyor. Çekirdeğin doğrulayıcısı programı statik analizden geçiriyor, güvenli bulunmazsa yüklemeye izin vermiyor. Ağ tarafında iki ana bağlanma noktası var. XDP paket henüz ağ yığıtına girmeden, en erken noktada yakalıyor. TC ise trafik kontrol katmanında hem giriş hem çıkış yönünde çalışıyor. Cilium agent her node üzerinde buralara programlar yükleyip Kubernetes politikalarını orada uygular.
Kimlik IP adresinden kurtuluyor
Cilium'da her pod, etiket kümesine göre bir kimlik alır. Kimlik bilgisi node lar arasında paylaşılır ve politikalar bu kimliğe bakar. Pod başka node a taşınıp IP adresi değişse bile kural zinciri bozulmaz. Klasik IP ve port bazlı güvenlik duvarı mantığının en zayıf noktası tam olarak buydu; bulut ortamında IP bir kimlik değil, geçici bir detay.
L7 politikası nasıl yazılıyor
Standart NetworkPolicy L3 ve L4 te kalır. CiliumNetworkPolicy ise HTTP metoduna, path e, hatta DNS adına kadar iner. Ön yüz podunun yalnızca API poduna, yalnızca GET ile, yalnızca belli bir path e çıkması üç satırda tanımlanıyor:
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: api-egress
spec:
endpointSelector:
matchLabels:
app: frontend
egress:
- toEndpoints:
- matchLabels:
app: api
toPorts:
- ports:
- port: "8080"
protocol: TCP
rules:
http:
- method: "GET"
path: "/api/v1/.*" Dış dünya için FQDN bazlı kural da yazılabiliyor. Egress kısmında toFQDNs ile hedef alan adı belirtip DNS çözümlemesini politikaya dahil ediyorsunuz. Elle bakılıp güncellenen sabit dış adres listeleri tutmak yerine api.github.com gibi bir alan adına izin vermek, gerçek dünyada çok daha sürdürülebilir bir model.
Sidecar gerektirmeyen mesh fikri
Cilium service mesh yaklaşımında proxy yi her pod yanına enjekte etmek zorunda değilsiniz. Trafiği yakalama işi zaten çekirdekte, eBPF ile yapılıyor. Gerek duyulduğunda L7 işlemleri için node başına paylaşımlı Envoy kullanılıyor; güncel sürümlerde bunu seçmeli olarak, yalnızca politikası gereken podlara uygulayan şeffaf mod da mevcut. Sidecar modeliyle gelen kaynak israfı, sürüm yükseltme çilesi ve yaşam döngüsü uyumsuzluğu bu sayede büyük ölçüde ortadan kalkıyor. Kubernetes Gateway API desteği ve gömülü ingress denetleyici de aynı şemaya bağlı; sürüme göre özellik kapsamı değiştiği için kendi kullandığınız sürümün notlarına bakın.
kube-proxy dışarıda kalabilir
Service yük dengelemesi eBPF ile doğrudan çekirdekte yapılabiliyor. Bu modda kube-proxy tamamen devre dışı bırakılıp her paketin user space e çıkması engelleniyor. Socket seviyesinde yük dengeleme ile pod a pod doğrudan bağlantı kurulabiliyor. Kısa vadeki bağlantı yönetimi ve DSR gibi konuların detayı dokümantasyondaki kube-proxy replacement bölümünde anlatılıyor; kurulum flag leri sürümler arasında değiştiği için buradan kopyalamak yerine resmi sayfadan doğrulayın.
Hubble ile görünürlük
Politika yazarsınız ama hangi paketin neden düştüğünü göremezseniz sorun ayıklama kabusa döner. Hubble tam bu iş için: eBPF olaylarını flow kaydına döken, L7 trafiği de gören gözlemlenebilirlik katmanı. Bir paket hangi politika tarafından drop edildi, hangi kural izin verdi, hepsi kayıtta. Hubble Relay çoklu node akışlarını toplar, Hubble UI da bunu grafik olarak çizer.
Kurulum tarafı
Helm ile kurulum klasik yol. Ama günlük iş için cilium-cli çok daha pratik:
cilium install
cilium status --wait
cilium connectivity test Üçüncü komut kümede bir dizi bağlantı senaryosu çalıştırıp sonucu raporlar. Kurulum sonrası ilk yapılacak iş bu testi koşmak olmalı; sessiz kalan bir ağ sorununu erken yakalamanın en kolay yolu.
Bunların yanında node lar arası şifreleme WireGuard veya IPsec ile, bant genişliği sınırı eBPF tabanlı BandwidthManager ile, çoklu küme bağlantısı ClusterMesh ile geliyor. CiliumCIDRGroup kavramı da harici ağ parçalarını CIDR grupları hâlinde toplayıp CiliumNetworkPolicy içinden tek adla referans göstermenizi sağlıyor.
eBPF öğrenme eğrisi dik değil ama farklı bir zihinsel model gerektiriyor. Politika artık bir cihazda değil çekirdeğin kendisinde uygulanıyor. Buna alışınca klasik sidecar yığınları gereksiz karmaşık gelmeye başlıyor.