eBPF etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
eBPF etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

1 Ekim 2025 Çarşamba

Kubernetes’te eBPF Tabanlı Cilium Kurulumu ve Hubble ile Ağ Gözlemlenebilirliği: Adım Adım Rehber

eBPF ve Cilium Neden Gündemde?

Kubernetes kümelerinde ağ katmanını hızlandırmak, gözlemlenebilirliği artırmak ve güvenliği sadeleştirmek için en çok konuşulan çözümlerden biri Cilium. Temelindeki eBPF (extended Berkeley Packet Filter) sayesinde paketleri çekirdek seviyesinde akıllıca işler, iptables tabanlı zincirlerin karmaşıklığını ve maliyetini azaltır. Bu da daha düşük gecikme, daha yüksek throughput ve net politika yönetimi sağlar. Üstelik Hubble bileşeniyle, canlı trafiği ve servis topolojisini sezgisel şekilde izleyebilirsiniz.

Önkoşullar

Bu rehberi uygulamak için çalışan bir Kubernetes kümesine ve küme yöneticisi yetkisine (cluster-admin) ihtiyacınız var. Çekirdek (Linux kernel) 5.4+ sürümü ve eBPF özelliklerinin etkin olması önerilir. kubectl ve Helm araçlarının yüklü olduğundan emin olun. Yönetilen bulut kümelerinde (EKS/AKS/GKE) Cilium desteklenir; ancak ağ eklentisi değiştirme adımları sağlayıcıya göre farklılık gösterebilir. Mevcutta başka bir CNI kullanıyorsanız, çakışmaları önlemek için ilgili eklentiyi temizlemeniz gerekir.

Kurulum: Helm ile Cilium

İlk adım olarak Helm deposunu ekleyip, Cilium’u kube-system ad alanına kuracağız. Eğer kube-proxy hâlen etkinse “partial” mod güvenli bir başlangıçtır; kube-proxy’yi tamamen devreden çıkarıp Cilium’u tam vekil (“strict”) olarak da kullanabilirsiniz.

Helm deposunu ekleyin ve güncelleyin
helm repo add cilium https://helm.cilium.io
helm repo update

Seçenek A — kube-proxy ile birlikte (kısmi değiştirme)
helm install cilium cilium/cilium \
--namespace kube-system \
--set kubeProxyReplacement=partial \
--set hubble.enabled=true

Seçenek B — kube-proxy’siz (tam değiştirme)
helm install cilium cilium/cilium \
--namespace kube-system \
--set kubeProxyReplacement=strict \
--set k8sServiceHost=<API-SERVER-IP> \
--set k8sServicePort=6443 \
--set hubble.enabled=true

İsteğe bağlı olarak, pod’lar arası trafiği şifrelemek için WireGuard’ı etkinleştirebilirsiniz. Bu, özellikle çok kiracılı ortamlarda veya düğümler arası segmentasyonun kritik olduğu durumlarda faydalıdır:

helm upgrade cilium cilium/cilium \
--namespace kube-system \
--reuse-values \
--set encryption.enabled=true \
--set encryption.type=wireguard

Hubble ile Canlı Trafik ve Politikaları İzleme

Hubble, Cilium’un ağ akışlarını, DNS isteğini, servis iletişimini ve politika kararlarını gözlemlemenizi sağlar. Hubble Relay ve Hubble UI bileşenlerini açarak tarayıcı üzerinden topolojiyi inceleyebilirsiniz.

Hubble Relay ve UI’ı etkinleştirme
helm upgrade cilium cilium/cilium \
--namespace kube-system \
--reuse-values \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true

Cilium CLI ile durum ve bağlantı testleri yapmak iyi bir pratiktir. Eğer cilium-cli yüklü değilse, sisteminize uygun binary’yi indirip PATH’e ekleyin. Kurulumdan sonra:

cilium status --namespace kube-system
cilium connectivity test --namespace kube-system

Hubble UI’a erişmek için port yönlendirme kullanabilirsiniz:

kubectl -n kube-system port-forward svc/hubble-ui 12000:80
Ardından tarayıcınızda http://localhost:12000 adresini açarak servis haritasını, akışları ve politikaların etkisini canlı izleyin.

Örnek CiliumNetworkPolicy

Cilium, Kubernetes NetworkPolicy’yi destekler; ayrıca daha ifade gücü yüksek CiliumNetworkPolicy (CNP) kaynakları sunar. Aşağıdaki örnek, sadece aynı ad alanındaki “frontend” etiketli pod’lardan “backend”e 8080/TCP erişimi veriyor ve DNS’i izinli kılıyor:

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: backend-allow-frontend
namespace: app
spec:
endpointSelector:
matchLabels:
app: backend
ingress:
- fromEndpoints:
- matchLabels:
app: frontend
toPorts:
- ports:
- port: "8080"
protocol: TCP
- toPorts:
- ports:
- port: "53"
protocol: UDP
rules:
dns:
- matchPattern: "*"

Bu politikayı uyguladıktan sonra Hubble UI veya hubble observe ile akışları takip ederek beklenen kısıtlamaların aktif olduğunu doğrulayın. Politika yazarken etiket tutarlılığı, ad alanı kapsamı ve port-protokol eşleşmelerine dikkat edin.

Sorun Giderme İpuçları

Kurulumda çoğunlukla iki tür sorunla karşılaşılır: eski CNI artıklarının çakışması ve çekirdek özellikleri. Daha önce Calico, Flannel vb. kullanıyorsanız, /etc/cni/net.d altındaki eski konfigürasyonları temizlediğinizden emin olun. Düğümleri yeniden başlatmak, CNI eklentisinin tutarlı şekilde devreye girmesine yardımcı olur.

Cilium pod’larının loglarını kontrol etmek genelde yeterli ipucunu verir: kubectl -n kube-system logs -l k8s-app=cilium. eBPF haritalarıyla ilgili hata görürseniz, çekirdek özelliklerini ve gerekli sysctl ayarlarını doğrulayın. Ağ tıkanmaları için cilium bpf metrics list ve cilium status çıktıları yol göstericidir.

Performans ve Güvenlik Notları

eBPF tabanlı yönlendirme ve servis yük dengeleme, özellikle yüksek pod yoğunluğu olan kümelerde belirgin CPU kazanımı sağlar. WireGuard şifreleme, düğümler arası trafiği güvenli kılarken, Egress Gateway özelliği dışa giden trafiğin sabit bir çıkış IP üzerinden çıkmasını sağlayabilir. DNS görünürlüğü, servis keşfi sorunlarını hızla ayıklamanıza yardım eder. Tüm bu bileşenler birlikte, daha şeffaf, hızlı ve güvenli bir Kubernetes ağı sunar.

Sonuç

Cilium + Hubble ikilisi, Kubernetes ağını sadece çalışır halde tutmakla kalmaz; aynı zamanda onu ölçülebilir, şeffaf ve yönetilebilir kılar. Bu rehberde temel kurulum, Hubble ile gözlemlenebilirlik ve örnek bir politika akışı sunduk. İlk başarıyı aldıktan sonra, servis mesh entegrasyonları, egress kontrolü ve gelişmiş akış metrikleri gibi özelliklerle kurulumunuzu genişletebilirsiniz. Üretim ortamında versiyon yükseltme ve yedeklilik planlarını da dahil ederek, Cilium’un gücünü güvenle ölçeklendirin.

27 Ağustos 2025 Çarşamba

eBPF ile Linux Gözlemlenmesi: Başlangıçtan İleri Seviyeye Pratik Rehber

Giriş

eBPF (extended Berkeley Packet Filter), modern Linux çekirdeğinde çalışan küçük programlar yazarak sistem davranışını güvenli ve yüksek performanslı şekilde gözlemleme imkânı sunar. Bu rehber, temel kavramlardan başlayıp pratik izleme örneklerine ve üretimde kullanılabilecek yaklaşımlara kadar adım adım ilerler. Hedef okuyucu; kernel gözlemi, uygulama performansı analizi veya ağ izleme gibi ileri seviye konulara girmek isteyen geliştirici/operasyon ekipleridir.

Ön Koşullar ve Araçlar

Başlamadan önce gereksinimler: Linux çekirdeğinizin 4.9+ veya modern dağıtımlarda güncel bir kernel olması, clang ve llvm ile derleme araçları, bpftool, libbpf veya hızlı prototip için bpftrace/bcc paketleri. Ayrıca root yetkisi veya CAP_BPF/CAP_PERFMON benzeri yetkiler gerekecektir. Dağıtımınıza göre örnek kurulum: sudo apt install clang llvm libbpf-dev bpftool bpftrace.

Temel Kavramlar

eBPF programları kernel içinde güvenli bir şekilde çalışır; verifier adı verilen bir doğrulayıcı potansiyel tehlikeli işlemleri engeller. Programlar, kprobe/uprobes ile fonksiyon başlangıç/sonlarına, tracepoint'lere, ve XDP ile ağ katmanına bağlanabilir. Verileri kullanıcı alanına aktarmak için BPF haritaları (maps) ve perf buffer gibi mekanizmalar kullanılır. Map tipleri: hash, array, percpu, ring buffer vb.; her biri farklı senaryolara uygundur.

Hızlı Başlangıç: bpftrace ile Bir Satırlık İzleme

Hızlı prototip için bpftrace mükemmeldir. Örneğin dosya açma süresini görmek için: bpftrace -e 'kprobe:vfs_open { @[comm] = count(); }'. Bu komut, kernel'in vfs_open kancasına takılarak süreç başına açma sayısını sayar. Daha gelişmiş, gecikme histogramı için: bpftrace -e 'kprobe:do_sys_open { @t[tid] = nsecs; } kretprobe:do_sys_open /@t[tid]/ { @lat[hist(nsecs - @t[tid])] = count(); delete(@t[tid]); }'.

Üretim İçin: Libbpf ile eBPF Programı Yazmak

Üretim ortamında bpftrace rahat fakat sınırlıdır; libbpf ile C tabanlı eBPF programları daha kontrollü ve performanslıdır. Tipik akış: eBPF C kodu yazılır, clang -O2 -target bpf -c program.c -o program.o ile derlenir; kullanıcı alanı yükleyici ise libbpf kullanarak program.o'yu kernel'e yükler, map'lerle iletişim kurar. Map üzerinden histogram veya sayaçları okuyup JSON/Prometheus formatına çevirebilirsiniz. Önemli nokta: verifier hatalarını çözmek için kodu küçük parçalara bölün ve helper fonksiyonları kullanın.

Pratik Örnek: Bir Uygulamanın Fonksiyon Gecikmesini Ölçme (uprobes)

Kendi uygulamanızın belirli bir fonksiyonunun gecikmesini ölçmek için uprobe kullanın. Adımlar: (1) hedef ikili dosyanın yolunu ve sembolü belirleyin; (2) eBPF programında uprobe ile girişte timestamp kaydedin; (3) uretprobe ile çıkışta farkı hesaplayıp perf buffer ile kullanıcı alanına gönderin. Kullanıcı alanı Python veya C ile perf buffer'dan veriyi alıp histogram oluşturur. Bu yöntem, GC/pthread gibi uygulama içi etkileşimleri ölçmede çok yararlıdır.

Ağ Gözlemi: XDP ve TC Karşılaştırması

Ağ seviyesinde düşük gecikmeli filtreleme/ölçüm için XDP uygundur; paketler çekirdeğe bile ulaşmadan işlenir. Ancak XDP'nin kısıtlamaları vardır (örneğin skb erişimi yok). TC (cls_bpf) ise daha esnektir fakat biraz daha yüksek maliyetlidir. Üretimde, DDoS mitigasyonu veya L7 yük dengeleme öncesi hızlı ön filtreleme için XDP tercih edilirken, detaylı paket analizleri için TC kullanılabilir.

Gözlemleme Yöntemleri ve En İyi Uygulamalar

Performans açısından eBPF programları minimal iş yapmalı; ağır hesaplamalar kullanıcı alanına bırakılmalı. Map boyutlarını ve per-CPU kullanımını dikkatle planlayın. Verifier hatalarını azaltmak için bellek erişimlerini sınırlandırın ve helper fonksiyonları tercih edin. Güvenlik için yalnızca gerekli kapasiteleri verin ve production'da testlemeyi aşamalı yapın. Ayrıca bpftool ile yüklü programları ve map'leri takip etmek işleri kolaylaştırır: bpftool prog show, bpftool map dump.

Sırada Ne Var?

eBPF ekosistemi hızla büyüyor: libbpf, bpftool, bpftrace ve yüksek seviye kütüphanelerle (örn. gobpf, iovisor) entegrasyon artıyor. Sonraki adım olarak, sisteminiz için spesifik metrikleri belirleyip küçük eBPF programlarıyla prototip oluşturun, ardından performans testleri ve güvenlik incelemeleriyle üretime taşıyın. eBPF öğrenirken çekirdek logları, verifier çıktılarını ve bpftool'u etkin kullanmak başarıyı hızlandırır.