Dieses Dokument wurde mithilfe automatisierter maschineller Übersetzungstechnologie übersetzt. Wir bemühen uns um korrekte Übersetzungen, übernehmen jedoch keine Gewähr für die Vollständigkeit, Richtigkeit oder Zuverlässigkeit der übersetzten Inhalte. Im Falle von Abweichungen ist die englische Originalversion maßgebend und stellt den verbindlichen Text dar.

Tipps zur Einrichtung von Containern

Das Ausführen gut gestalteter Container kann die Gesamtleistung und Sicherheit Ihrer Umgebung erheblich beeinflussen.

Im Folgenden finden Sie einige Tipps zur Einrichtung Ihrer Container.

Für eine detailliertere Diskussion über die Sicherheit von Containern können Sie auch auf Ranchers Leitfaden zur Sicherheit von Containern. verweisen.

Verwenden Sie ein gängiges Container-Betriebssystem

Wenn möglich, sollten Sie versuchen, sich auf ein gängiges Basis-Betriebssystem für Container zu standardisieren.

Kleinere Distributionen wie Alpine und BusyBox reduzieren die Größe des Container-Images und weisen im Allgemeinen eine kleinere Angriffsfläche bzw. Schwachstellenoberfläche auf.

Beliebte Distributionen wie Ubuntu, Fedora und CentOS sind erprobter und bieten mehr Funktionalität.

Beginnen Sie mit einem FROM scratch-Container

Wenn Ihr Mikrodienst ein eigenständiges statisches Binary ist, sollten Sie einen FROM scratch-Container verwenden.

Der FROM scratch-Container ist ein offizielles Docker-Image, das leer ist, sodass Sie es verwenden können, um minimale Images zu entwerfen.

Dies wird die kleinste Angriffsfläche und die kleinste Imagegröße aufweisen.

Führen Sie Containerprozesse als unprivilegiert aus

Wenn möglich, verwenden Sie einen nicht privilegierten Benutzer, wenn Sie Prozesse innerhalb Ihres Containers ausführen. Obwohl Container-Laufzeiten Isolation bieten, sind Schwachstellen und Angriffe weiterhin möglich. Unbeabsichtigte oder versehentliche Host-Mounts können ebenfalls betroffen sein, wenn der Container als Root ausgeführt wird. Für Details zur Konfiguration eines Sicherheitskontexts für einen Pod oder einen Container verweisen Sie auf die Kubernetes-Dokumentation.

Definieren Sie Ressourcenlimits

Wenden Sie CPU- und Speicherlimits auf Ihre Pods an. Dies kann helfen, die Ressourcen auf Ihren Arbeitsknoten zu verwalten und zu vermeiden, dass ein fehlerhafter Mikrodienst andere Mikrodienste beeinträchtigt.

In standard Kubernetes können Sie Ressourcengrenzen auf Namespace-Ebene festlegen. In Rancher können Sie Ressourcengrenzen auf Projektebene festlegen, und diese werden auf alle Namespaces innerhalb des Projekts propagiert. Für Details siehe die Rancher-Dokumentation.

Beim Festlegen von Ressourcenquoten sollten Sie, wenn Sie auf einem Projekt oder Namespace Einstellungen bezüglich CPU oder Speicher (d.h. Limits oder Reservierungen) vornehmen, sicherstellen, dass bei der Erstellung jedes Containers das entsprechende CPU- oder Speicherfeld gesetzt wird. Um zu vermeiden, dass diese Limits bei jeder Containererstellung festgelegt werden, kann ein Standard-Ressourcengrenzwert für Container auf dem Namespace festgelegt werden.

Die Kubernetes-Dokumentation enthält weitere Informationen dazu, wie Ressourcengrenzen auf der Container-Ebene und der Namespace-Ebene festgelegt werden können.

Ressourcenanforderungen definieren

Sie sollten CPU- und Speicheranforderungen für Ihre Pods anwenden. Dies ist entscheidend, um dem Scheduler mitzuteilen, auf welchem Typ von Rechenknoten Ihr Pod platziert werden muss, und um sicherzustellen, dass dieser Knoten nicht überprovisioniert wird. In Kubernetes können Sie eine Ressourcenanforderung festlegen, indem Sie resources.requests im Feld für Ressourcenanforderungen in der Container-Spezifikation eines Pods definieren. Für Details siehe die Kubernetes-Dokumentation.

Wenn Sie eine Ressourcengrenze für den Namespace festlegen, in dem der Pod bereitgestellt wird, und der Container keine spezifische Ressourcenanforderung hat, darf der Pod nicht gestartet werden. Um zu vermeiden, dass diese Felder bei jedem Container während der Bereitstellung einer Arbeitslast festgelegt werden, kann ein Standard-Ressourcengrenzwert für Container im Namespace festgelegt werden.

Es wird empfohlen, Ressourcenanforderungen auf Container-Ebene zu definieren, da der Scheduler andernfalls Annahmen trifft, die wahrscheinlich nicht hilfreich für Ihre Anwendung sind, wenn der Cluster unter Last steht.

Liveness- und Readiness-Probes

Richten Sie Liveness- und Readiness-Probes für Ihren Container ein. Sofern Ihr Container nicht vollständig abstürzt, erkennt Kubernetes nicht, dass er nicht funktionsfähig ist, es sei denn, Sie erstellen einen Endpunkt oder Mechanismus, der den Status des Containers melden kann. Alternativ stellen Sie sicher, dass Ihr Container anhält und abstürzt, wenn er ungesund ist.

Die Kubernetes-Dokumentation zeigt, wie Sie Liveness- und Readiness-Probes für Container konfigurieren.