Kubernetes namespace: tek kümeyi ekipler arasında mantıksal olarak bölmek
Sözlük

Kubernetes namespace: tek kümeyi ekipler arasında mantıksal olarak bölmek

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 3 dk okuma

Kubernetes namespace, küme kaynaklarını mantıksal gruplara ayıran birimdir. Ne işe yaradığı, kubectl komutları, kota ve yetki sınırları, sık hatalar.

Kubernetes namespace nedir?

Namespace, bir Kubernetes kümesindeki kaynakları mantıksal gruplara ayıran birimdir. Aynı fiziksel kümeyi birden çok ekip, uygulama ya da ortam paylaştığında her biri kendi namespace'inde çalışır; kaynak adları namespace içinde benzersiz olduğundan farklı namespace'lerde aynı isimli Pod ya da servis bulunabilir.

Bir apartmanın katları gibi düşünülebilir: bina aynıdır, ancak her katın kendi düzeni, kuralları ve anahtarı vardır. Kümedeki Pod, Deployment, Service, ConfigMap gibi kaynakların çoğu bir namespace'e aittir. Node ve PersistentVolume gibi küme geneli kaynaklar ise namespace'e bağlı değildir.

Namespace ne işe yarar?

Namespace'in temel kullanım amaçları şunlardır. • Ayrıştırma: ekipler, uygulamalar ya da geliştirme, test ve üretim gibi ortamlar birbirinden mantıksal olarak ayrılır, birbirinin kaynaklarını yanlışlıkla değiştirmez. • Yetkilendirme: RBAC ile her ekibe yalnızca kendi namespace'inde işlem yapma yetkisi verilir. • Kaynak yönetimi: ResourceQuota ile bir namespace'in kullanabileceği işlemci, bellek ve nesne miktarı sınırlanır; LimitRange ile Pod başına varsayılan ve üst sınırlar tanımlanır. • Ağ politikası ve erişim: NetworkPolicy ile namespace'ler arası trafik kısıtlanabilir.

Böylece büyük bir küme, paylaşımlı ama kontrollü bir platform olarak işletilebilir.

Hazır gelen namespace'ler

Bir küme kurulduğunda bazı namespace'ler hazır gelir. default, namespace belirtilmeden oluşturulan kaynakların düştüğü yerdir. kube-system, Kubernetes'in kendi bileşenlerinin (DNS gibi) çalıştığı alandır ve üzerinde değişiklik yaparken dikkatli olunmalıdır. kube-public herkesin okuyabildiği bilgiler içindir. kube-node-lease ise düğümlerin canlılık bildirimlerini tutar.

Uygulamaları default namespace'te toplamak küçük denemeler için yeterli olabilir, ama gerçek kullanımda ekip ya da uygulama bazında ayrı namespace açmak yönetimi kolaylaştırır.

Temel komutlar

Namespace oluşturmak ve kullanmak için kubectl komutları basittir:

kubectl create namespace ekip-a kubectl get pods -n ekip-a kubectl get pods --all-namespaces kubectl config set-context --current --namespace=ekip-a

İlk komut ekip-a adlı namespace'i oluşturur. İkincisi yalnızca o namespace'teki Pod'ları listeler. Üçüncüsü tüm namespace'lerdeki Pod'ları gösterir. Dördüncüsü ise aktif bağlamın varsayılan namespace'ini değiştirir, böylece her komutta -n yazmak gerekmez.

Bir servise başka namespace'ten erişirken DNS adının tam hali kullanılır: servis-adi.namespace-adi.svc.cluster.local. Aynı namespace içinde yalnızca servis adı yeterlidir.

Namespace bir güvenlik duvarı değildir

Sık yapılan yanlış anlama, namespace'in tek başına güçlü bir izolasyon sağladığını düşünmektir. Namespace mantıksal bir ayrımdır. Aralarında ağ politikası tanımlanmadıkça farklı namespace'lerdeki Pod'lar varsayılan olarak birbirine ulaşabilir.

Gerçek izolasyon için birkaç katman birlikte kurulur: RBAC ile yetki sınırı, NetworkPolicy ile ağ sınırı, ResourceQuota ile kaynak sınırı ve Pod güvenliği politikalarıyla iş yükü sınırı. Çok kiracılı (multi-tenant) kümelerde bu katmanların her biri tasarım kararı gerektirir ve çoğu zaman namespace başına şablon olarak otomatikleştirilir.

Sık yapılan hatalar

Her şeyi default namespace'te çalıştırmak, ekipler büyüdüğünde yetki ve kaynak yönetimini zorlaştırır. İsimlendirme standardı olmadan çok sayıda namespace açmak da karmaşa yaratır; ekip, uygulama ve ortam bilgisini yansıtan tutarlı bir ad şeması baştan belirlenmelidir.

Kota tanımlamadan namespace açmak, bir ekibin gürültülü bir iş yükü ile tüm kümenin kaynağını tüketmesine yol açabilir. Namespace silmek de dikkat ister: içindeki tüm kaynaklar birlikte silinir.

Son olarak, uygulama yapılandırmasında namespace adını koda gömmek ortamlar arası taşımayı zorlaştırır; yapılandırma ortam değişkenleri ya da şablonlar aracılığıyla verilmelidir.

Mindset programlarında namespace

Kubernetes Çok Kiracılı Küme Tasarımı programı namespace tasarımı ve isimlendirme standartlarını, RBAC ve kurumsal kimlik entegrasyonunu, kaynak kotalarını ve ağ izolasyonunu platform ekipleri için işler. Kubernetes Kaynak Yönetimi ve Otomatik Ölçekleme, namespace yönetişimini kaynak modeliyle birlikte ele alır. Kubernetes ile Orkestrasyon temel kavramları, Kubernetes Administrator (CKA) Hazırlık ise küme yönetimi ve güvenlik konularını sınav odaklı çalıştırır.

İlgili Mindset programı

Kubernetes Çok Kiracılı Küme Tasarımı

Sık sorulanlar

Sık sorulan sorular

Namespace ile Kubernetes kümesi arasındaki fark nedir?

Küme, düğümlerden ve kontrol katmanından oluşan fiziksel ya da sanal altyapıdır. Namespace ise bu kümenin içinde kaynakları mantıksal olarak gruplayan sanal bir bölümdür. Tek bir küme içinde çok sayıda namespace bulunabilir ve hepsi aynı düğümleri paylaşır.

Her ortam için ayrı namespace mi, ayrı küme mi kullanmalıyım?

Küçük ve düşük riskli ortamlar için namespace yeterli olabilir. Üretim gibi güvenlik ve kararlılık beklentisi yüksek ortamlarda ayrı küme tercih edilir, çünkü bir namespace'teki sorun kümeyi etkileyebilir. Kararı risk, maliyet ve işletme kapasitesi belirler.

Namespace silince ne olur?

Namespace silindiğinde içindeki tüm kaynaklar, yani Pod, servis, ConfigMap ve diğer nesneler de silinir. Bu işlem geri alınamaz. Üretim ortamında silmeden önce hangi kaynakların etkileneceği kontrol edilmeli ve gerekiyorsa yedek alınmalıdır.

Farklı namespace'lerdeki Pod'lar birbirine erişebilir mi?

Varsayılan olarak evet, ağ politikası tanımlanmadıkça erişebilirler. Namespace tek başına ağ izolasyonu sağlamaz. Erişimi kısıtlamak için NetworkPolicy tanımlanır ve kullanılan ağ eklentisinin bu politikayı desteklemesi gerekir. Aksi halde politika yazılsa bile uygulanmaz.

Kubernetes Namespace Nedir? Ne İşe Yarar, Örnekler