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
Küme Ağı
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
L3 Yönlendirme / BGP
⟶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ı)
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:
- **Kubernetes NetworkPolicy Desteği:** Her ikisi de standart Kubernetes NetworkPolicy API'sini uygular ve Pod'lar arası iletişimi kontrol etmek için kullanılabilir.
- **Ölçeklenebilirlik:** Büyük ve dinamik Kubernetes kümelerinde çalışacak şekilde tasarlanmışlardır.
- **Güvenlik Odaklı:** Ağ segmentasyonu ve güvenlik politikası uygulama yetenekleri sunarak küme güvenliğini artırırlar.
- **Açık Kaynak:** Her ikisi de açık kaynaklı projelerdir ve geniş, aktif topluluklara sahiptir.
- **Hibrit/Çoklu Bulut Desteği:** Çeşitli bulut ortamlarında ve şirket içi altyapılarda dağıtılabilir.
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:
- **Calico'yu Seçin Eğer:**
- Karmaşık ve gelişmiş ağ politikalarına (deny kuralları, politika önceliği) ihtiyacınız varsa.
- BGP yönlendirme veya mevcut ağ altyapınızla derin entegrasyon gereksinimleriniz varsa.
- Hibrit veya çoklu bulut ortamlarında kanıtlanmış bir esneklik ve geniş uyumluluk arıyorsanız.
- Daha köklü ve geniş topluluk desteğine sahip bir çözüm tercih ediyorsanız.
- **Cilium'u Seçin Eğer:**
- Maksimum ağ performansı ve düşük gecikme süresi kritik önem taşıyorsa.
- Uygulama katmanında (L7) güvenlik politikaları (HTTP isteklerine göre filtreleme) gibi gelişmiş kontrollere ihtiyacınız varsa.
- Derin ağ görünürlüğü ve gözlemlenebilirlik (Hubble aracılığıyla) bir öncelikse.
- eBPF teknolojisinin sağladığı avantajlardan tam olarak yararlanmak ve geleceğe yönelik bir çözüm arıyorsanız.
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.