Wie wird ein GitOps-Workflow mit ArgoCD für die Verwaltung von Multi-Tenant-Kubernetes-Clustern technisch so isoliert, dass Namespace-Quotas strikt eingehalten werden?

Die technische Isolation in einem Multi-Tenant-Szenario mit ArgoCD erfolgt primär über die Definition von AppProject-Ressourcen. Wir konfigurieren für jeden Tenant ein dediziertes AppProject, das als logische und sicherheitstechnische Barriere fungiert.

Um die Einhaltung von Namespace-Quotas zu garantieren, setzen wir auf eine strikte Trennung der Berechtigungen innerhalb des AppProjects:

  1. Destination Restriction: Wir begrenzen die destinations im AppProject so, dass ein Tenant nur in seinen zugewiesenen Namespace deployen kann.
  2. ClusterResourceWhitelist: Wir konfigurieren die clusterResourceWhitelist, um zu verhindern, dass Tenants clusterweite Ressourcen (z. B. ClusterRole, StorageClass) erstellen oder bestehende ResourceQuota-Objekte in ihrem Namespace modifizieren oder löschen.
  3. Separation of Concerns: Die ResourceQuota-Objekte werden nicht im Repository des Tenants verwaltet. Wir implementieren einen administrativen GitOps-Pfad, über den das Plattform-Team die Quotas definiert und ausrollt.

Die folgende Tabelle verdeutlicht die Aufteilung der Verantwortlichkeiten:

KomponenteTenant-Berechtigung (via AppProject)Admin-Berechtigung (Plattform-Team)
AppProjectKein Zugriff / Read-onlyVollständige Kontrolle
ResourceQuotaKeine Änderung / Kein LöschenDefinition & Anpassung
NamespaceDeployment innerhalb der QuotaErstellung & Lifecycle-Management
ApplicationSync von App-ManifestenGovernance & Validierung

Im Rahmen unserer IT-Consulting & Digitale Strategie ergänzen wir diesen Aufbau häufig durch Admission Controller wie Kyverno oder OPA Gatekeeper. Diese stellen sicher, dass auch außerhalb von ArgoCD keine Ressourcen erstellt werden, die die Quotas umgehen oder die definierten Resource-Limits (Requests/Limits) im Pod-Manifest ignorieren.

Die technische Durchsetzung der Quota erfolgt auf API-Ebene durch den Kubernetes API-Server. ArgoCD fungiert hierbei als Delivery-Mechanismus, der durch die AppProject-Konfiguration verhindert, dass der Tenant die für ihn bindenden Quota-Definitionen manipuliert. Wenn ein Tenant versucht, Ressourcen zu deployen, die die Quota überschreiten, gibt der API-Server einen Fehler zurück, den ArgoCD als SyncFailed meldet.

Wir empfehlen, ResourceQuotas niemals im selben Git-Repository wie die Applikations-Manifeste der Tenants zu verwalten, sondern über einen separaten, administrativen GitOps-Pfad zu steuern, um eine vollständige Trennung der Kontrollinstanzen zu gewährleisten.

Sergej Wiens

Sergej Wiens

Gründer & Software Architekt