Erstellen Sie eine ConfigMap oder ein generisches Secret aus Befehlszeilen-Schlüssel-Wert-Paaren.
→Verwenden Sie `kubectl create configmap <name> --from-literal=<key>=<value>` oder `kubectl create secret generic <name> --from-literal=<key>=<value>`.
Warum: `--from-literal` dient der direkten Schlüssel-Wert-Eingabe. Verwenden Sie das Flag mehrmals für mehrere Schlüssel. Dies ist schneller als das Erstellen einer YAML-Datei für einfache Fälle.
Referenz↗
Injizieren Sie alle Schlüssel-Wert-Paare aus einer ConfigMap oder einem Secret als Umgebungsvariablen in einen Container.
→Verwenden Sie in der Container-Spezifikation `envFrom` mit `configMapRef` oder `secretRef`. Beispiel: `envFrom: [{configMapRef: {name: my-config}}]`.
Warum: `envFrom` ist ein Massenvorgang, der alle Schlüssel aus der Quelle auf Umgebungsvariablen abbildet. Dies vermeidet das manuelle Auflisten jedes Schlüssels.
Referenz↗
Injizieren Sie einen einzelnen, spezifischen Wert aus einer ConfigMap oder einem Secret als Umgebungsvariable.
→Verwenden Sie `env.valueFrom`. Beispiel: `env: [{name: LOG_LEVEL, valueFrom: {configMapKeyRef: {name: my-config, key: log_level}}}]`.
Warum: `valueFrom` bietet eine selektive Injektion und ermöglicht das Zuordnen des Quellschlüssels zu einem anderen Namen der Umgebungsvariablen.
Binden Sie eine ConfigMap oder ein Secret als Dateien in einen Pod ein, um Live-Updates zu ermöglichen.
→Definieren Sie ein `volume` vom Typ `configMap` oder `secret`. Binden Sie es mit `volumeMounts` in den Container ein. Die Dateien werden nach den Schlüsseln benannt.
Warum: Eingebundene Dateien aus ConfigMaps/Secrets werden automatisch aktualisiert, wenn sich die Quelle ändert. Umgebungsvariablen nicht, was einen Neustart des Pods erfordert.
Referenz↗
Setzen Sie bewährte Sicherheitspraktiken durch: Verhindern Sie das Ausführen als Root, machen Sie das Root-Dateisystem schreibgeschützt oder geben Sie eine Benutzer-ID an.
→Verwenden Sie `securityContext` auf Pod- oder Containerebene. Setzen Sie `runAsNonRoot: true`, `readOnlyRootFilesystem: true` und/oder `runAsUser: <UID>`.
Warum: SecurityContext bietet eine feingranulare, deklarative Kontrolle über Container-Privilegien, die für die Härtung von Anwendungen und die Einhaltung von Sicherheitsrichtlinien unerlässlich ist.
Referenz↗
Erteilen Sie einem Pod minimale Berechtigungen für den Zugriff auf die Kubernetes API.
→1. Erstellen Sie ein benutzerdefiniertes `ServiceAccount`. 2. Erstellen Sie eine `Role` mit nur den notwendigen API-Berechtigungen (z. B. Pods auflisten). 3. Erstellen Sie ein `RoleBinding`, um ServiceAccount und Role zu verknüpfen. 4. Weisen Sie den ServiceAccount dem Pod über `spec.serviceAccountName` zu.
Warum: Folgt dem Prinzip der geringsten Rechte und minimiert die Angriffsfläche, falls ein Pod kompromittiert wird.
Verhindern Sie das automatische Mounten eines ServiceAccount-Tokens in einen Pod, der keinen API-Zugriff benötigt.
→Setzen Sie `automountServiceAccountToken: false` in der Pod-Spezifikation oder direkt im ServiceAccount.
Warum: Reduziert die Angriffsfläche, indem keine API-Anmeldeinformationen an Container bereitgestellt werden, die diese nicht benötigen.
Erstellen Sie ein Secret zur Verwendung bei der TLS-Terminierung für einen Ingress oder einen anderen sicheren Dienst.
→Verwenden Sie `kubectl create secret tls <secret-name> --cert=<path/to/cert.pem> --key=<path/to/key.pem>`.
Warum: Dies erstellt ein Secret des richtigen Typs `kubernetes.io/tls` mit den von Ingress-Controllern erwarteten Standarddaten-Schlüsseln `tls.crt` und `tls.key`.
Exponieren Sie Pod-Metadaten (wie Name, Namespace, Labels oder Node-IP) für einen Container.
→Verwenden Sie die Downward API, um Metadaten als Umgebungsvariablen oder Dateien in einem `downwardAPI`-Volume zu projizieren. Beispiel: `valueFrom: {fieldRef: {fieldPath: metadata.name}}`.
Warum: Ermöglicht Containern, selbstbewusst zu sein, ohne die Kubernetes API abfragen zu müssen, was die Konfiguration vereinfacht und RBAC-Anforderungen reduziert.
Referenz↗
Legen Sie Standard-CPU-/Speicheranforderungen und -limits für alle Pods in einem Namespace fest.
→Erstellen Sie ein `LimitRange`-Objekt im Namespace. Definieren Sie `default`- und `defaultRequest`-Werte für Ressourcen.
Warum: Stellt sicher, dass alle Pods Ressourcenbeschränkungen haben, was die Planung und Stabilität verbessert, auch wenn Entwickler vergessen, diese anzugeben. Funktioniert im Zusammenspiel mit ResourceQuota.
Begrenzen Sie die Gesamtmenge an Ressourcen (CPU, Speicher, Objektanzahl), die in einem Namespace verbraucht werden können.
→Erstellen Sie ein `ResourceQuota`-Objekt. Definieren Sie harte Limits in `spec.hard`, z. B. `requests.cpu: "4"`, `pods: "10"`.
Warum: Verhindert, dass ein Namespace oder Team alle Cluster-Ressourcen verbraucht, und gewährleistet eine faire Ressourcenverteilung.