Wie verwalte ich Linux-Benutzer mit Kubernetes?
Ich möchte meine Cluster mit sichern SecurityContext.RunAsUser. Die Frage ist einfach: Welchen Benutzer soll ich verwenden?
Ich weiß, dass der Benutzer mit der UID 1001 (zum Beispiel) in einem Container der Benutzer mit der UID 1001 auf dem Host ist. Sollte ich also einen Benutzer mit der UID 1001 erstellen, der pod_userauf allen meinen Hosts aufgerufen wird, und alle Pods zwingen, diesen Benutzer zu verwenden? Oder sollte ich überprüfen, ob auf allen meinen Hosts kein Benutzer mit dieser UID vorhanden ist? Ich habe hierzu keinen Leitfaden für bewährte Verfahren gefunden.
Ich habe die gleiche Art von Frage zur Docker-Datei: Soll ich einen Benutzer in der Docker-Datei mit einer bestimmten UID deklarieren und in wiederverwenden SecurityContext.RunAsUser? Einige offizielle Bilder werden mit einem bestimmten fest codierten Benutzer in Dockerfile ausgeführt, andere als niemand. Ich fand diesen interessanten Beitrag, aber es gibt keine klare Antwort: Kubernetes: Linux-Benutzerverwaltung .
Antworten
Meine ideale Empfehlung hier wäre:
- Ihre Docker-Datei
RUN adduser, um einen Nicht-Root-Benutzer zu erstellen, und wechseltUSERzu diesem Benutzer, nachdem Sie die gesamte Softwareinstallation durchgeführt haben - Sie müssen in der Kubernetes-Konfiguration keine explizite Benutzer-ID angeben
- Es spielt keine Rolle, wie dieser Benutzername oder diese numerische ID lautet oder ob es sich um dieselbe Benutzer-ID handelt, die in einem anderen Container oder auf dem Host vorhanden ist, nur solange die numerische UID nicht 0 ist
Der einzige Ort, an dem es ein praktisches Problem gibt, ist, wenn der Container versucht, Daten in einem Volume zu speichern. Auch hier wäre der Idealfall, dies vollständig zu vermeiden; Verwenden Sie lieber eine Datenbank oder einen Cloud-Speicher, wenn dies möglich ist.
Wenn Sie ein lokales Volume verwenden müssen, können Sie eine Sicherheitsrichtlinie mit einer Ergänzung speziell konfigurierenfsGroup: . Dies ist eine beliebige numerische Gruppen- ID (keine Benutzer-ID), die die Dateien im Volume besitzt und auch zur Gruppenliste für den Hauptcontainerprozess hinzugefügt wird.
apiVersion: v1
kind: Pod
spec:
securityContext:
fsGroup: 12345 # or any numeric gid
Verwenden hostPathSie überhaupt keine Volumes: Sie können nicht garantieren, dass auf jedem Knoten derselbe Inhalt vorhanden ist, wenn der Pod neu geplant wird. Wenn der Knoten ausfällt, gehen Inhalte verloren, die nur auf diesem Knoten vorhanden sind.