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üncelleyinhelm repo add cilium https://helm.cilium.iohelm 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ştirmehelm 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-systemcilium 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: CiliumNetworkPolicymetadata: name: backend-allow-frontend namespace: appspec: 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.