CNI eklentileri aracılığıyla Kubernetes ağ mimarisini keşfedin. Pod ağını nasıl etkinleştirdiklerini, farklı CNI seçeneklerini ve sağlam, ölçeklenebilir bir Kubernetes ortamı için en iyi uygulamaları öğrenin.
Kubernetes Ağ Mimarisi: CNI Eklentilerine Derinlemesine Bir Bakış
Kubernetes, uygulamaların ölçekli bir şekilde dağıtılmasını ve yönetilmesini sağlayarak konteyner orkestrasyonunda devrim yaratmıştır. Kubernetes ağ mimarisinin kalbinde, Kubernetes'in çeşitli ağ çözümleriyle çalışmasına olanak tanıyan standart bir arayüz olan Konteyner Ağ Arayüzü (Container Network Interface - CNI) yer alır. CNI eklentilerini anlamak, sağlam ve ölçeklenebilir Kubernetes ortamları oluşturmak için çok önemlidir. Bu kapsamlı kılavuz, CNI eklentilerinin rolünü, popüler seçeneklerini, yapılandırmasını ve en iyi uygulamalarını ayrıntılı olarak ele alacaktır.
Konteyner Ağ Arayüzü (CNI) Nedir?
Konteyner Ağ Arayüzü (CNI), Cloud Native Computing Foundation (CNCF) tarafından Linux konteynerleri için ağ arayüzlerini yapılandırmak amacıyla geliştirilmiş bir spesifikasyondur. Kubernetes'in farklı ağ sağlayıcılarıyla etkileşime girmesine olanak tanıyan standart bir API sağlar. Bu standardizasyon, Kubernetes'i son derece esnek hale getirir ve kullanıcıların ihtiyaçlarına en uygun ağ çözümünü seçmelerine olanak tanır.
CNI eklentileri aşağıdaki görevlerden sorumludur:
- Ağ kaynakları ayırmak: Pod'lara IP adresleri ve diğer ağ parametrelerini atamak.
- Konteyner ağını yapılandırmak: Konteyner içinde ağ arayüzlerini kurmak.
- Konteynerleri ağa bağlamak: Konteynerleri genel Kubernetes ağına entegre etmek.
- Ağ kaynaklarını temizlemek: Pod'lar sonlandırıldığında kaynakları serbest bırakmak.
CNI Eklentileri Nasıl Çalışır?
Kubernetes'te yeni bir pod oluşturulduğunda, kubelet (her düğümde çalışan ajan) pod'un ağını yapılandırmak için CNI eklentisini çağırır. Süreç genellikle aşağıdaki adımları içerir:
- Kubelet, bir pod oluşturma isteği alır.
- Kubelet, küme yapılandırmasına göre hangi CNI eklentisinin kullanılacağını belirler.
- Kubelet, pod'un ad alanı, adı ve etiketleri gibi bilgileri sağlayarak CNI eklentisini çağırır.
- CNI eklentisi, önceden tanımlanmış bir IP adresi aralığından pod için bir IP adresi ayırır.
- CNI eklentisi, ana makine düğümünde sanal bir ağ arayüzü (veth çifti) oluşturur. Veth çiftinin bir ucu pod'un ağ ad alanına bağlanırken, diğer ucu ana makinenin ağ ad alanında kalır.
- CNI eklentisi, pod'un ağ ad alanını yapılandırarak IP adresini, ağ geçidini ve rotaları ayarlar.
- CNI eklentisi, pod'a giden ve pod'dan gelen trafiğin doğru şekilde yönlendirilmesini sağlamak için ana makine düğümündeki yönlendirme tablolarını günceller.
Popüler CNI Eklentileri
Her birinin kendi özellikleri, avantajları ve dezavantajları olan birkaç CNI eklentisi mevcuttur. İşte en popüler CNI eklentilerinden bazıları:
Calico
Genel Bakış: Calico, Kubernetes için ölçeklenebilir ve güvenli bir ağ çözümü sunan, yaygın olarak kullanılan bir CNI eklentisidir. Hem overlay (katmanlı) hem de non-overlay (katmansız) ağ modellerini destekler ve gelişmiş ağ politikası özellikleri sunar.
Ana Özellikler:
- Ağ Politikası: Calico'nun ağ politikası motoru, pod'lar için ayrıntılı erişim kontrol kuralları tanımlamanıza olanak tanır. Bu politikalar pod etiketlerine, ad alanlarına ve diğer kriterlere dayanabilir.
- BGP Yönlendirme: Calico, pod IP adreslerini altta yatan ağ altyapısına duyurmak için BGP (Border Gateway Protocol) kullanabilir. Bu, overlay ağlarına olan ihtiyacı ortadan kaldırır ve performansı artırır.
- IP Adres Yönetimi (IPAM): Calico, pod'lara otomatik olarak IP adresleri atayan kendi IPAM sistemini içerir.
- Şifreleme: Calico, WireGuard veya IPsec kullanarak ağ trafiğinin şifrelenmesini destekler.
Örnek Kullanım Senaryosu: Bir finans kurumu, Kubernetes kümesi içindeki farklı mikroservisler arasında sıkı güvenlik politikaları uygulamak için Calico kullanıyor. Örneğin, ön yüz (frontend) ve veritabanı pod'ları arasındaki doğrudan iletişimi engellemek ve tüm veritabanı erişimini özel bir API katmanı üzerinden zorunlu kılmak.
Flannel
Genel Bakış: Flannel, Kubernetes için bir overlay ağı oluşturan basit ve hafif bir CNI eklentisidir. Kurulumu ve yapılandırması kolaydır, bu da onu daha küçük dağıtımlar veya Kubernetes ağ mimarisine yeni başlayan kullanıcılar için popüler bir seçenek haline getirir.
Ana Özellikler:
- Overlay Ağı: Flannel, mevcut ağ altyapısının üzerinde sanal bir ağ oluşturur. Pod'lar bu overlay ağı üzerinden birbirleriyle iletişim kurar.
- Basit Yapılandırma: Flannel'in yapılandırılması kolaydır ve minimum kurulum gerektirir.
- Çoklu Arka Uç (Backend): Flannel, overlay ağı için VXLAN, host-gw ve UDP dahil olmak üzere farklı arka uçları destekler.
Örnek Kullanım Senaryosu: Bir startup, basitliği ve yapılandırma kolaylığı nedeniyle ilk Kubernetes dağıtımları için Flannel kullanıyor. Gelişmiş ağ özelliklerinden çok, uygulamalarını hızlı bir şekilde çalıştırmaya öncelik veriyorlar.
Weave Net
Genel Bakış: Weave Net, Kubernetes için bir overlay ağı oluşturan bir başka popüler CNI eklentisidir. Otomatik IP adresi yönetimi, ağ politikası ve şifreleme gibi bir dizi özellik sunar.
Ana Özellikler:
- Otomatik IP Adresi Yönetimi: Weave Net, pod'lara otomatik olarak IP adresleri atar ve IP adresi aralığını yönetir.
- Ağ Politikası: Weave Net, pod'lar arasındaki trafiği kontrol etmek için ağ politikaları tanımlamanıza olanak tanır.
- Şifreleme: Weave Net, AES-GCM kullanarak ağ trafiğinin şifrelenmesini destekler.
- Servis Keşfi: Weave Net, pod'ların birbirini kolayca bulmasını ve bağlanmasını sağlayan yerleşik servis keşfi sunar.
Örnek Kullanım Senaryosu: Bir yazılım geliştirme şirketi, geliştirme ve test ortamları için Weave Net kullanıyor. Otomatik IP adresi yönetimi ve servis keşfi özellikleri, bu ortamlardaki uygulamaların dağıtımını ve yönetimini basitleştirir.
Cilium
Genel Bakış: Cilium, Kubernetes için yüksek performanslı ağ ve güvenlik sağlamak üzere eBPF'ten (genişletilmiş Berkeley Paket Filtresi) yararlanan bir CNI eklentisidir. Ağ politikası, yük dengeleme ve gözlemlenebilirlik gibi gelişmiş özellikler sunar.
Ana Özellikler:
- eBPF Tabanlı Ağ: Cilium, ağ ve güvenlik politikalarını çekirdek (kernel) seviyesinde uygulamak için eBPF kullanır. Bu, yüksek performans ve düşük ek yük sağlar.
- Ağ Politikası: Cilium, L7 politika zorlaması da dahil olmak üzere gelişmiş ağ politikası özelliklerini destekler.
- Yük Dengeleme: Cilium, Kubernetes servisleri için yerleşik yük dengeleme sağlar.
- Gözlemlenebilirlik: Cilium, ağ trafiğine ilişkin ayrıntılı gözlemlenebilirlik sunarak ağ sorunlarını izlemenize ve gidermenize olanak tanır.
Örnek Kullanım Senaryosu: Büyük bir e-ticaret şirketi, yüksek trafik hacimlerini yönetmek ve sıkı güvenlik politikaları uygulamak için Cilium kullanıyor. eBPF tabanlı ağ ve yük dengeleme yetenekleri optimum performans sağlarken, gelişmiş ağ politikası özellikleri potansiyel tehditlere karşı koruma sağlar.
Doğru CNI Eklentisini Seçmek
Uygun CNI eklentisini seçmek, Kubernetes ortamınızın özel gereksinimlerine bağlıdır. Aşağıdaki faktörleri göz önünde bulundurun:
- Ölçeklenebilirlik: CNI eklentisi, kümenizdeki beklenen pod ve düğüm sayısını kaldırabilir mi?
- Güvenlik: CNI eklentisi, ağ politikası ve şifreleme gibi gerekli güvenlik özelliklerini sağlıyor mu?
- Performans: CNI eklentisi, uygulamalarınız için kabul edilebilir performans sunuyor mu?
- Kullanım Kolaylığı: CNI eklentisini kurmak, yapılandırmak ve sürdürmek ne kadar kolay?
- Özellikler: CNI eklentisi, IP adresi yönetimi, servis keşfi ve gözlemlenebilirlik gibi ihtiyacınız olan özellikleri sağlıyor mu?
- Topluluk Desteği: CNI eklentisi aktif olarak sürdürülüyor ve güçlü bir topluluk tarafından destekleniyor mu?
Basit dağıtımlar için Flannel yeterli olabilir. Sıkı güvenlik gereksinimleri olan daha karmaşık ortamlar için Calico veya Cilium daha iyi seçenekler olabilir. Weave Net, özellikler ve kullanım kolaylığı arasında iyi bir denge sağlar. Özel ihtiyaçlarınızı değerlendirin ve gereksinimlerinize en uygun CNI eklentisini seçin.
CNI Eklentilerini Yapılandırma
CNI eklentileri genellikle, eklentinin ayarlarını belirten bir JSON dosyası olan bir CNI yapılandırma dosyası kullanılarak yapılandırılır. CNI yapılandırma dosyasının konumu, kubelet'in --cni-conf-dir
bayrağı ile belirlenir. Varsayılan olarak bu bayrak /etc/cni/net.d
olarak ayarlanmıştır.
CNI yapılandırma dosyası aşağıdaki bilgileri içerir:
cniVersion
: CNI spesifikasyon sürümü.name
: Ağın adı.type
: Kullanılacak CNI eklentisinin adı.capabilities
: Eklenti tarafından desteklenen yeteneklerin bir listesi.ipam
: IP adresi yönetimi için yapılandırma.plugins
: (İsteğe bağlı) Çalıştırılacak ek CNI eklentilerinin bir listesi.
İşte Flannel için bir CNI yapılandırma dosyası örneği:
{
"cniVersion": "0.3.1",
"name": "mynet",
"type": "flannel",
"delegate": {
"hairpinMode": true,
"isDefaultGateway": true
}
}
Bu yapılandırma dosyası, Kubernetes'e "mynet" adında bir ağ oluşturmak için Flannel CNI eklentisini kullanmasını söyler. delegate
bölümü, Flannel eklentisi için ek yapılandırma seçeneklerini belirtir.
Belirli yapılandırma seçenekleri, kullanılan CNI eklentisine bağlı olarak değişir. Mevcut yapılandırma seçenekleri hakkında ayrıntılı bilgi için seçtiğiniz CNI eklentisinin belgelerine başvurun.
CNI Eklentisi En İyi Uygulamaları
Sağlam ve ölçeklenebilir bir Kubernetes ağ ortamı sağlamak için bu en iyi uygulamaları izleyin:
- Doğru CNI eklentisini seçin: Ölçeklenebilirlik, güvenlik, performans ve kullanım kolaylığı gibi faktörleri göz önünde bulundurarak özel gereksinimlerinize en uygun CNI eklentisini seçin.
- Ağ politikaları kullanın: Pod'lar arasındaki trafiği kontrol etmek ve güvenlik sınırlarını zorlamak için ağ politikaları uygulayın.
- Ağ performansını izleyin: Ağ performansını izlemek ve potansiyel sorunları belirlemek için izleme araçlarını kullanın.
- CNI eklentilerini güncel tutun: Hata düzeltmelerinden, güvenlik yamalarından ve yeni özelliklerden yararlanmak için CNI eklentilerinizi düzenli olarak güncelleyin.
- Özel bir IP adresi aralığı kullanın: Diğer ağlarla çakışmaları önlemek için Kubernetes pod'larınız için özel bir IP adresi aralığı ayırın.
- Ölçeklenebilirlik için plan yapın: Ağ altyapınızı gelecekteki büyümeyi karşılayacak şekilde tasarlayın ve CNI eklentinizin artan pod ve düğüm sayısını kaldırabileceğinden emin olun.
CNI Eklentilerinde Sorun Giderme
Ağ sorunları karmaşık ve sorun gidermesi zor olabilir. İşte bazı yaygın sorunlar ve bunlara nasıl yaklaşılacağı:
- Pod diğer pod'lara bağlanamıyor:
- Ağ politikalarını kontrol edin: Ağ politikalarının trafiği engellemediğinden emin olun.
- Yönlendirme tablolarını doğrulayın: Ana makine düğümlerindeki yönlendirme tablolarının doğru yapılandırıldığını doğrulayın.
- DNS çözümlemesini kontrol edin: Küme içinde DNS çözümlemesinin doğru çalıştığından emin olun.
- CNI günlüklerini inceleyin: Herhangi bir hata veya uyarı için CNI eklentisinin günlüklerini inceleyin.
- Pod harici servislere bağlanamıyor:
- Çıkış (egress) kurallarını kontrol edin: Harici servislere giden trafiğe izin vermek için çıkış kurallarının doğru yapılandırıldığından emin olun.
- DNS çözümlemesini doğrulayın: Harici alan adları için DNS çözümlemesinin doğru çalıştığından emin olun.
- Güvenlik duvarı kurallarını kontrol edin: Güvenlik duvarı kurallarının trafiği engellemediğini doğrulayın.
- Ağ performansı sorunları:
- Ağ trafiğini izleyin: Ağ trafiğini izlemek ve darboğazları belirlemek için izleme araçlarını kullanın.
- Ağ gecikmesini kontrol edin: Pod'lar ve düğümler arasındaki ağ gecikmesini ölçün.
- Ağ yapılandırmasını optimize edin: Performansı artırmak için ağ yapılandırmasını optimize edin.
CNI ve Service Mesh'ler
CNI eklentileri temel pod ağını yönetirken, service mesh'ler mikroservisleri yönetmek ve güvence altına almak için ek bir işlevsellik katmanı sağlar. Istio, Linkerd ve Consul Connect gibi service mesh'ler, aşağıdaki gibi özellikler sağlamak için CNI eklentileriyle birlikte çalışır:
- Trafik yönetimi: Yönlendirme, yük dengeleme ve trafik şekillendirme.
- Güvenlik: Karşılıklı TLS kimlik doğrulaması, yetkilendirme ve şifreleme.
- Gözlemlenebilirlik: Metrikler, izleme (tracing) ve günlük kaydı.
Service mesh'ler tipik olarak her pod'a, tüm ağ trafiğini kesen ve service mesh politikalarını uygulayan bir sidecar proxy enjekte eder. CNI eklentisi, sidecar proxy için temel ağ bağlantısını kurmaktan sorumluyken, service mesh daha gelişmiş trafik yönetimi ve güvenlik özelliklerini yönetir. Güvenliği, gözlemlenebilirliği ve kontrolü artırmak için karmaşık mikroservis mimarilerinde service mesh'leri düşünün.
Kubernetes Ağ Mimarisi'nin Geleceği
Kubernetes ağ mimarisi, her zaman ortaya çıkan yeni teknolojiler ve özelliklerle sürekli olarak gelişmektedir. Kubernetes ağ mimarisindeki bazı temel eğilimler şunlardır:
- eBPF: eBPF, yüksek performansı ve düşük ek yükü nedeniyle Kubernetes'te ağ ve güvenlik politikalarını uygulamak için giderek daha popüler hale gelmektedir.
- Service Mesh Entegrasyonu: CNI eklentileri ve service mesh'ler arasındaki daha sıkı entegrasyonun, mikroservislerin yönetimini ve güvenliğini daha da basitleştirmesi beklenmektedir.
- Çoklu Küme Ağı (Multicluster Networking): Kuruluşlar giderek daha fazla çoklu küme mimarilerini benimsedikçe, birden çok Kubernetes kümesi arasında ağları bağlamak ve yönetmek için çözümler daha önemli hale gelmektedir.
- Bulut Tabanlı Ağ Fonksiyonları (CNF'ler): Ağ fonksiyonlarını dağıtmak ve yönetmek için Kubernetes kullanımı, 5G ve diğer gelişmiş ağ teknolojilerinin benimsenmesiyle ilgi görmektedir.
Sonuç
CNI eklentilerini anlamak, sağlam ve ölçeklenebilir Kubernetes ortamları oluşturmak ve yönetmek için esastır. Doğru CNI eklentisini seçerek, doğru şekilde yapılandırarak ve en iyi uygulamaları izleyerek, Kubernetes uygulamalarınızın başarılı olmak için ihtiyaç duydukları ağ bağlantısına ve güvenliğe sahip olmasını sağlayabilirsiniz. Kubernetes ağ mimarisi gelişmeye devam ettikçe, en son eğilimler ve teknolojiler hakkında bilgi sahibi olmak, bu güçlü konteyner orkestrasyon platformunun faydalarını en üst düzeye çıkarmak için çok önemli olacaktır. Küçük ölçekli dağıtımlardan birden çok kıtaya yayılan büyük kurumsal ortamlara kadar, CNI eklentilerinde ustalaşmak, Kubernetes ağ mimarisinin gerçek potansiyelini ortaya çıkarır.