
Kubernetes Namespace ile Multi-Tenant Ortam Yönetimi
Tek bir Kubernetes cluster'ını birden fazla ekip, proje veya müşteri arasında paylaştırmak maliyet avantajı sağlar ancak izolasyon olmadan güvenlik ve kaynak çakışmaları kaçınılmazdır. Namespace'ler mantıksal bölümleme sunar; ResourceQuota, LimitRange, NetworkPolicy ve RBAC ile bu bölümleri güvenli
Merve Arslan
WordPress & Hosting Uzmanı
Tek bir Kubernetes cluster'ını birden fazla ekip, proje veya müşteri arasında paylaştırmak maliyet avantajı sağlar ancak izolasyon olmadan güvenlik ve kaynak çakışmaları kaçınılmazdır. Namespace'ler mantıksal bölümleme sunar; ResourceQuota, LimitRange, NetworkPolicy ve RBAC ile bu bölümleri güvenli ve kontrollü hale getirirsiniz. Bu rehberde multi-tenant Kubernetes ortamını adım adım kuruyoruz.
Namespace Temelleri
Namespace, cluster kaynaklarını mantıksal gruplara ayırır. Her namespace kendi Pod, Service, ConfigMap ve Secret nesnelerine sahiptir. Varsayılan olarak Kubernetes dört namespace ile gelir: default, kube-system, kube-public ve kube-node-lease.
apiVersion: v1
kind: Namespace
metadata:
name: team-frontend
labels:
team: frontend
environment: production
---
apiVersion: v1
kind: Namespace
metadata:
name: team-backend
labels:
team: backend
environment: production
ResourceQuota ile Kaynak Sınırlama
ResourceQuota, bir namespace'in tüketebileceği toplam CPU, bellek ve nesne sayısını sınırlar. Bir ekibin cluster kaynaklarını tüketmesini engelleyerek diğer ekiplerin etkilenmesini önler.
apiVersion: v1
kind: ResourceQuota
metadata:
name: team-frontend-quota
namespace: team-frontend
spec:
hard:
requests.cpu: "8"
requests.memory: 16Gi
limits.cpu: "16"
limits.memory: 32Gi
pods: "50"
services: "20"
persistentvolumeclaims: "10"
LimitRange ile Pod Bazlı Sınırlar
ResourceQuota namespace toplamını sınırlarken, LimitRange tek bir Pod veya container'ın kullanabileceği kaynakları sınırlar. Ayrıca resource request/limit belirtmeyen container'lara varsayılan değerler atar.
apiVersion: v1
kind: LimitRange
metadata:
name: container-limits
namespace: team-frontend
spec:
limits:
- type: Container
default:
cpu: "500m"
memory: "256Mi"
defaultRequest:
cpu: "100m"
memory: "128Mi"
max:
cpu: "2"
memory: "4Gi"
min:
cpu: "50m"
memory: "64Mi"
NetworkPolicy ile Ağ İzolasyonu
Varsayılan olarak tüm namespace'ler birbirleriyle iletişim kurabilir. NetworkPolicy ile namespace'ler arası trafiği kısıtlayarak gerçek izolasyon sağlarsınız.
# Yalnizca ayni namespace icinden trafige izin ver
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-cross-namespace
namespace: team-frontend
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
team: frontend
⚠️ Önemli: NetworkPolicy'nin çalışması için cluster'da Calico, Cilium veya Weave gibi NetworkPolicy destekleyen bir CNI eklentisi kurulu olmalıdır. Flannel varsayılan olarak NetworkPolicy desteklemez.
RBAC ile Erişim Kontrolü
Role ve RoleBinding ile her ekibin yalnızca kendi namespace'indeki kaynaklara erişmesini sağlarsınız.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: developer
namespace: team-frontend
rules:
- apiGroups: ["", "apps"]
resources: ["pods", "deployments", "services", "configmaps"]
verbs: ["get", "list", "watch", "create", "update", "delete"]
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: frontend-developers
namespace: team-frontend
subjects:
- kind: Group
name: frontend-team
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: developer
apiGroup: rbac.authorization.k8s.io
Kubernetes temel kavramları için Kubernetes Giriş rehberimizi, otomatik ölçekleme için HPA rehberimizi inceleyin. Ağ güvenliği için Zero Trust rehberimize göz atın. Kubernetes multi-tenancy dokümantasyonu ve ResourceQuota rehberi ek kaynak olarak faydalıdır.
Sıkça Sorulan Sorular
Namespace gerçek izolasyon sağlar mı?
Namespace tek başına yalnızca mantıksal ayrım sağlar. Gerçek izolasyon için ResourceQuota, LimitRange, NetworkPolicy ve RBAC birlikte uygulanmalıdır. Tam izolasyon gerekiyorsa ayrı cluster'lar veya vCluster gibi sanal cluster çözümleri değerlendirin.
Kaç namespace oluşturmalıyım?
Ekip veya proje başına bir namespace yaygın bir yaklaşımdır. Ortam bazlı (dev/staging/prod) ayrım da eklenebilir. Çok fazla namespace yönetim karmaşıklığı yaratır; 10-50 arası çoğu organizasyon için yeterlidir.
Namespace'ler arası iletişim nasıl sağlanır?
Farklı namespace'lerdeki servisler service-name.namespace.svc.cluster.local DNS adresiyle erişilebilir. NetworkPolicy ile hangi namespace'lerin iletişim kurabileceğini kontrol edin.
ResourceQuota aşılırsa ne olur?
Kota aşıldığında yeni Pod oluşturma istekleri reddedilir. Mevcut Pod'lar etkilenmez. Kota kullanımını kubectl describe quota -n namespace ile izleyin ve gerektiğinde artırın.
Sonuç
Kubernetes Namespace ile multi-tenant ortam kurmak mantıksal ayrımla başlar, ResourceQuota ile kaynak sınırlama, NetworkPolicy ile ağ izolasyonu ve RBAC ile erişim kontrolü ile tamamlanır. Her katmanı birlikte uygulayarak güvenli ve kontrollü bir paylaşımlı cluster ortamı oluşturun.
Multi-Tenant Kubernetes Altyapısı
Hosted Cloud bulut sunucuları ile güvenli ve izole Kubernetes ortamınızı kurun.
Bulut Sunucu Planlarını İncele →Merve Arslan
WordPress & Hosting Uzmanı
WordPress performans optimizasyonu, hosting seçimi ve e-ticaret altyapıları üzerine rehber içerikler hazırlamaktadır.
Yorumlar yakında