İçeriğe geç
NetDevOps
5 dk okuma Ağ Yönetimi

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.

wireguard-server-panel

WireGuard VPN sunucu paneli - İstemci yönetimi, QR kodları ve trafik istatistikleri için kendi sunucunuzda barındırılan web kullanıcı arayüzü (fork, aktif olarak geliştirilmekte)

Go

Laravel-NDFirewall

Rota Kapsamlı Laravel WAF - RCE, SQLi, XSS ve SSRF algılama özelliklerine sahip hafif bir Web Uygulaması Güvenlik Duvarı

PHP

Trustsslroot

Tek komutla çalışan özel PKI oluşturucu - Kendi kendine imzalanmış kök CA ve sertifikaları anında oluşturun

Go

node_exporter

Hafif sistem metrikleri aktarıcısı - Güvenli erişim kontrolüne sahip, Linux için durum bilgisi barındırmayan tek dosya tabanlı izleme hizmeti

Rust

ipReconary

IP keşif ve alt ağ analiz aracı - Hızlı ağ taraması ve IP istihbarat toplama

Rust

Cloudfiltred

Cloudflare IP beyaz liste güvenlik duvarı - 80/443 numaralı bağlantı noktalarını yalnızca Cloudflare IP'leriyle sınırlayarak kaynak sunucunuzu doğrudan saldırılara karşı koruyun

Rust

LoadAlertTracker

Hafif sistem yükü izleme arka plan programı - Eşik değerleri aşıldığında Telegram, Discord ve Mattermost üzerinden gerçek zamanlı uyarılar

Rust

ctCertWatch

Sertifika Şeffaflığı günlüğü izleyicisi - Kimlik avı alan adlarını, marka taklitçiliğini ve yetkisiz SSL sertifikalarını gerçek zamanlı olarak tespit edin

Rust

DDNS-FW

Dinamik DNS Güvenlik Duvarı - DDNS aracılığıyla değişen IP adreslerini takip edin ve güvenli erişim kontrolü için güvenlik duvarı kurallarını otomatik olarak güncelleyin

Rust