Kubernetes CNI Çözümleri: Calico ve Cilium

Konteyner Ağ Arayüzleri ile Pod'lar arası iletişimi ve ağ politikalarını anlayın.

Giriş: CNI (Container Network Interface) Nedir?

Kubernetes, konteynerleştirilmiş uygulamalarınızı dağıtır, yönetir ve ölçeklendirir. Ancak, Pod'lar arasındaki ve Pod'larla dış dünya arasındaki ağ iletişimini sağlayan temel bir bileşene ihtiyaç duyar. İşte bu noktada **CNI (Container Network Interface)** devreye girer.

CNI, Linux konteynerleri için ağ yapılandırmasını sağlamak amacıyla tasarlanmış bir belirtim (specification) ve standarttır. Temel görevi, konteynerlerin ağ kaynaklarına bağlanması için bir arayüz tanımlamaktır. Kubernetes, CNI eklentilerini kullanarak Pod'lara IP adresleri atar, sanal ağ arayüzleri oluşturur ve Pod'ların birbirleriyle ve küme dışındaki hizmetlerle iletişim kurmasını sağlar. Bir CNI eklentisi olmadan Kubernetes kümeniz düzgün çalışamaz.

CNI'nın Görevi: Pod İletişimi

Düğüm 1
📦
Pod A (10.0.1.2)
CNI Eklentisi
🌐

Küme Ağı

Düğüm 2
📦
Pod B (10.0.2.3)
CNI Eklentisi

CNI, farklı düğümlerdeki Pod'ların birbirleriyle iletişim kurmasını sağlar.

Calico: Ölçeklenebilir Ağ ve Güvenlik

**Calico**, konteynerler, sanal makineler ve ana bilgisayar tabanlı iş yükleri için ölçeklenebilir ağ ve ağ politikası sağlayan açık kaynaklı bir CNI çözümüdür. Saf bir **Layer 3 (Katman 3)** yaklaşımını benimser ve ağ katmanında IP yönlendirmeyi kullanarak doğrudan Pod'lar arası iletişimi mümkün kılar. Genellikle overlay ağlarının (örneğin VXLAN) getirdiği ek yükten kaçınmasıyla bilinir.

Çalışma Şekli ve Özellikleri:

  • **IP Yönlendirme ve BGP:** Calico, düğümler arası trafik yönlendirmesi için genellikle BGP (Border Gateway Protocol) kullanır. Her düğüm, kendi üzerindeki Pod IP'leri için rotaları BGP aracılığıyla diğer düğümlere duyurur. Bu, Pod IP'lerinin küme içindeki tüm düğümler tarafından doğrudan yönlendirilebilir olmasını sağlar.
  • **Veri Düzlemi Esnekliği:** NetworkPolicy'leri uygulamak için varsayılan olarak Linux çekirdeğinin `iptables` mekanizmasını kullanır. Ancak, Calico'nun yeni sürümlerinde `eBPF` veri düzlemi de mevcuttur. Bu esneklik, farklı altyapı gereksinimlerine ve performans hedeflerine uyum sağlamasına olanak tanır.
  • **Geniş Kapsamlı Ağ Politikaları:** Standart Kubernetes NetworkPolicy'lerini tamamen uygular. Bunun yanı sıra, kendi özel kaynakları olan `GlobalNetworkPolicy` ve `NetworkPolicy` (Calico CRD'leri) ile gelişmiş özellikler sunar:
    • `Deny` (reddetme) kuralları (Kubernetes yerel politikalarında sadece izin verme kuralları vardır).
    • Politika sıralaması/önceliği (hangi politikanın önce uygulanacağını belirleme).
    • Daha esnek eşleştirme kriterleri (örneğin, ServiceAccount'lara göre eşleştirme).
    • Sadece Pod'lara değil, sanal makinelere ve hatta ana bilgisayar arayüzlerine de politika uygulayabilir.
  • **IP-in-IP ve VXLAN Desteği:** Saf Layer 3 yaklaşıma ek olarak, farklı ağ topolojilerinde çalışabilmek için IP-in-IP tünelleme veya VXLAN gibi overlay ağlarını da destekler.

Calico Mimarisi (Basitleştirilmiş)

Calico ile Ağ İletişimi

Düğüm 1
📦
Pod A
Calico Agent
iptables / eBPF

L3 Yönlendirme / BGP

Düğüm 2
📦
Pod B
Calico Agent
iptables / eBPF

Calico, Pod IP'leri için BGP aracılığıyla doğrudan yönlendirme yapar ve politikaları iptables veya eBPF ile uygular.

Cilium: eBPF ile Gelişmiş Güvenlik ve Gözlemlenebilirlik

**Cilium**, **eBPF (extended Berkeley Packet Filter)** teknolojisini temel alan, bulut yerel uygulamalar için gelişmiş ağ, güvenlik ve gözlemlenebilirlik sağlayan modern bir CNI eklentisidir. eBPF'in gücünden yararlanarak Linux çekirdeğindeki paket işlemeyi doğrudan ve çok daha verimli bir şekilde yapar, geleneksel `iptables` bazlı yaklaşımları tamamen atlar.

Çalışma Şekli ve Özellikleri:

  • **eBPF Odaklı Veri Düzlemi:** Cilium, ağ ve güvenlik politikalarını uygulamak için yalnızca eBPF'i kullanır. eBPF programları, paketleri çekirdek seviyesinde, ağ yığınının erken bir aşamasında yakalayarak işler. Bu, daha düşük gecikme süresi ve yüksek verim sağlar.
  • **Kimlik Tabanlı Güvenlik:** NetworkPolicy'leri sadece IP adreslerine göre değil, Kubernetes etiketleri, servis hesapları ve namespace'ler gibi kimliklere göre uygulayabilir. Bu, dinamik mikroservis ortamlarında "sıfır güven" (zero-trust) mimarileri için çok önemlidir.
  • **Katman 7 (L7) Politikaları:** Standart Kubernetes NetworkPolicy'lerinin ötesine geçerek HTTP, gRPC gibi uygulama katmanı protokollerine dayalı güvenlik politikaları tanımlama yeteneği sunar. Bu, daha granüler ve uygulama bilinci olan güvenlik kontrolleri sağlar (örneğin, HTTP GET isteğine izin ver, POST isteğini engelle).
  • **Yerleşik Servis Ağı (Service Mesh) Entegrasyonu:** Sidecar proxy'lere ihtiyaç duymadan Servis Ağı yetenekleri (örneğin trafik yönetimi, karşılıklı TLS - mTLS) sunabilir. Bu, uygulama performansını artırırken karmaşıklığı azaltır.
  • **Hubble ile Derin Gözlemlenebilirlik:** Cilium ile birlikte gelen açık kaynaklı bir gözlemlenebilirlik platformu olan Hubble'ı kullanır. Hubble, servisler arası iletişim, DNS sorguları, düşen paketler ve hatta HTTP metot çağrıları hakkında gerçek zamanlı, derinlemesine görünürlük sağlar. Bu, hata ayıklama ve güvenlik denetimi için paha biçilmezdir.

Cilium Mimarisi (Basitleştirilmiş)

Cilium ile Ağ İletişimi (eBPF Odaklı)

Düğüm (Kernel Alanı)
Paket
Ağ Arayüzü
eBPF Programı
📦
Pod

Cilium, eBPF programlarını çekirdeğe yükleyerek paketleri erken aşamada işler ve politika uygular.

Calico ve Cilium: Benzerlikler ve Farklar

Hem Calico hem de Cilium, Kubernetes kümesindeki Pod'lar için ağ iletişimi ve NetworkPolicy uygulaması sağlamak amacıyla tasarlanmış güçlü CNI çözümleridir. Her ikisi de Kubernetes'in temel gereksinimlerini karşılar, ancak farklı felsefeler ve teknik yaklaşımlar benimserler.

Benzerlikler:

Farklar:

Özellik Calico Cilium
Ana Teknoloji (Veri Düzlemi) Çoğunlukla `iptables` tabanlı, isteğe bağlı `eBPF` veri düzlemi. BGP yönlendirme. Sadece `eBPF` tabanlı. `iptables`ı atlar.
Performans Yüksek performans (özellikle BGP ile L3 yönlendirme). eBPF veri düzlemi ile daha da artırılabilir. Genellikle daha yüksek performans ve daha düşük gecikme (eBPF'in çekirdek içi doğası gereği).
Ağ Politikaları Genişliği Standart Kubernetes NP'nin ötesinde `Deny` kuralları, politika sıralaması, daha fazla eşleşme kriteri. Katman 3/4 odaklı. Katman 7 (L7) politikaları (HTTP, gRPC), kimlik tabanlı güvenlik, daha granüler kontrol.
Gözlemlenebilirlik Temel loglama ve metrikler. Derinlemesine gözlemlenebilirlik için harici araç (Prometheus/Grafana) entegrasyonu gerekir. Hubble (yerleşik) ile derinlemesine ağ görünürlüğü, L7 trafik izleme, olay günlüğü.
Servis Ağı Yetenekleri Istio gibi ayrı bir servis ağı çözümü ile entegrasyon gerektirir. Yerleşik veya daha sıkı entegre servis ağı yetenekleri sunar, bazı durumlarda sidecar gereksinimini ortadan kaldırır.
Kurulum ve Karmaşıklık Genellikle daha basit ve köklü bir geçmişe sahiptir, yaygın olarak benimsenmiştir. eBPF entegrasyonu nedeniyle başlangıçta biraz daha karmaşık olabilir, ancak sağladığı yetenekler bu karmaşıklığı haklı çıkarır.

Sonuç: Hangi CNI'yi Seçmelisiniz?

Calico ve Cilium arasındaki seçim, projenizin özel gereksinimlerine, performans beklentilerine ve operasyonel tercihlerine bağlıdır:

Her iki CNI de Kubernetes kümenizin ağ ve güvenlik ihtiyaçlarını karşılayabilir, ancak sundukları farklı avantajları göz önünde bulundurarak bilinçli bir karar vermek önemlidir.