Kubernetes als populäre Container-Orchestrationsprogramm bietet eine Vielzahl an Vorteilen für das Verwaltung komplexer Anwendungen. Eines seiner Schlüssel-Features beinhaltet Namespaces, welches eine logische Teilung sowie Organisation von Cluster-Ressourcen ermöglicht. In diesem Artikel erkunden wir daher die Bedeutsamkeit von jener Namespace-Teilung in Kubernetes und warum diese entscheidend für die effiziente als auch sichere Bereitstellung einer Anwendung ist.
Kubernetes-Namespaces verstehen
Innerhalb Kubernetes stellt ein Namespace ein virtuelles Cluster dar, welches eine Möglichkeit bietet ein physisches Cluster in zahlreiche logische Einheiten zu unterteilen. Das bietet eine isolierte Umgebung, in welcher Objekte wie etwa Pods, Services oder Deployments verweilen können. Standardmäßig schafft Kubernetes einen sogenannten „Default“-Namespace (dt. „Standard“) für Ressourcen, welche nicht explizit an einen anderen Namespace gebunden werden.
Vorteile der Namespace-Teilung
Die Best Practises für Namespace-Teilung
Schritt-für-Schritt-Anleitung für die Teilung von Namespaces in Kubernetes
Schritt 1: Erstellung eines Namespace
Lassen Sie uns für Ihre Anwendungen und Umgebungen, in welchen Sie Einteilungen wünschen, jeweils einen Namespace zu Anfang erstellen. Dies geht mithilfe des folgenden Befehls:
kubectl create namespace <namespace-name>
Ersetzen Sie „<namespace-name>“ mit einem einprägsamen Namen für Ihren Namespace, wie etwa „production“, „development“ oder dem spezifischen Namen der Anwendung.
Schritt 2: Ressourcen in den neuen Namespace migrieren
Sobald die neuen Namespaces erschaffen sind, werden Sie die existierenden Ressourcen migrieren oder komplett neue erstellen müssen. Zu den Ressourcen zählen unter anderem Deployments, Pods, Services wie auch andere Kubernetes Objekte.
Um die existierenden Ressourcen nun zum neuen Namespace hinzubewegen, hilft Ihnen dieser Command der Rubrik „kubectl“ mit der entsprechenden Flag „—namespace“ weiter.
kubectl get <resource-type> --namespace <source-namespace> -o yaml | kubectl apply --namespace <destination-namespace> -f –
Ersetzen Sie auch hier entsprechen „<resource-type>“ mit dem entsprechendem Kubernetes-Objekt Ihrer Wahl. „<source-namespace>“ sollte namentlich dem derzeitigen Namespace entsprechen, an welchem sich die Ressourcen gerade befinden, während „<destination-namespace>“ den Ziel-Namespace widerspiegelt.
Beispielsweise kann der folgende Befehl genutzt werden, um alle Deployments vom Default-Namespace in den neu-ernannten „Production“-Namespace zu verschieben.
kubectl get deployments --namespace default -o yaml | kubectl apply --namespace production -f -
Dieser Schritt muss für jeden Ressourcen-Typ und Namespace, welchen sie einteilen möchten, wiederholt werden.
Schritt 3: Einsatz von Ressourcen-Quotas und Beschränkungen
Für die gerechte Verteilung von Ressourcen gegen die Monopolisierung von Cluster-Ressourcen ist das Einsetzen von Ressourcen-Quotas und Beschränkungen für jeden Namespace essenziell.
Dem hingereichend können Sie Ressourcen-Quotas per Yaml-Datei definieren oder direkt den „kubectl“-Befehl nutzen. Sie sehen nun ein Beipiel einer Ressourcen-Quota-Definition:
apiVersion: v1
kind: ResourceQuota
metadata:
name: resource-quota
namespace: <namespace-name>
spec:
hard:
cpu: "2"
memory: 2Gi
pods: "10"
...
Ersetzen Sie „<namespace-name>“ natürlich durch den von Ihnen gewünschten Namespace, in welchem Sie die Quotas setzen wollen. Passen Sie die Werte gemäß Ihrer Anforderungen an.
Zur Inbetriebnahme Ihrer Ressourcen-Quotas nutzen Sie bitte den folgenden Befehl:
kubectl apply -f <resource-quota-file.yaml>
Schritt 4: Implementieren Sie RBAC
RBAC sichert die gewünschte Zugriffskontrolle und beschränkt Berechtigungen innerhalb von Namespaces. Durch die Vergabe von Rollen und Berechtigungen können Sie die Sicherheit wahren und unautorisierten Zugriff negieren.
Um eine ClusterRole oder Role zu definieren, welche die gewünschten Berechtigungen beinhaltet, können Sie die folgende YAML-Datei als Referenz heranziehen:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: role-name
namespace: <namespace-name>
rules:
- apiGroups: [""]
resources: ["pods", "services"]
verbs: ["get", "list", "create", "delete"]
Replace <namespace-name> with the name of the namespace where you want to apply the RBAC role. Adjust the resource types and verbs based on your specific requirements.
To apply the RBAC role, use the following command:
kubectl apply -f <role-definition-file.yaml>
Durch das Befolgen dieser Schritte können Sie effektiv Namespaces in Kubernetes einteilen und logische Isolation, verbesserte Kollaboration sowie gestärkte Sicherheit ermöglichen. Behalten Sie in Erinnerung neue Namespaces zu erschaffen, Ressourcen zu migrieren, Ressourcen-Quotas zu definieren als auch RBAC zu implementieren. So schaffen sie die optimale Teilung und Organisation Ihres Clusters. Eine anständige Teilung der Namespaces ermächtigt Ihnen ebenso die effiziente Handhabung von Anwendungen, Teams als auch Umgebungen und bietet so eine skalierbare wie auch sichere Kubernetes Infrastruktur.
Abschließend lässt sich sagen
Namespace-Teilung spielt einen entscheidenden Faktor in der Verwaltung komplexer Deployments in Kubernetes. Durch logische Isolation, aufgewertete Kollaboration, Ressourcen-Management als auch der verbesserten Sicherheit bieten Namespaces einen skalierbaren und effizienten Weg zur Organisation von Anwendungen von sowohl Cluster-Anwendungen wie auch -Umgebungen. Sofern Sie sich an die Best Practises halten und das Potential von Namespaces voll ausschöpfen, kann Ihr Team effiziente Anwendungs-Deployments erreichen und die Integrität derer Kubernetes-Infrastruktur wahren.
Author: Christoph Stifel
Sie haben Fragen?
Wenn Sie Fragen haben, die noch nicht beantwortet sind, können Sie sich gerne an uns wenden.
Wir freuen uns auf den Kontakt mit Ihnen!
KubeOps GmbH
Hinter Stöck 17
72406 Bisingen
Germany
+49 7433 93724 90