In diesem Dokument wird beschrieben, wie Sie Knative für die Ausführung auf der Google Kubernetes Engine (GKE) konfigurieren, um GKE Sandbox für eine verbesserte Isolierung von Arbeitslasten vom Hostkernel zu verwenden.
Lernziele
- Hier erfahren Sie, wie Sie GKE Sandbox in Ihrem Knative-Bereitstellungscluster aktivieren.
- Einen Dienst bereitstellen, der zur Ausführung auf Knoten in einer Sandbox angegeben ist.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweise
- In dieser Anleitung wird davon ausgegangen, dass Knative Bereitstellung auf Ihrem Cluster installiert und konfiguriert ist.
- Prüfen Sie, ob Ihre Befehlszeilenumgebung eingerichtet und die Tools auf dem neuesten Stand sind:
GKE Sandbox-Knotenpool einem vorhandenen Knative-Bereitstellungscluster hinzufügen
Führen Sie die Schritte zum Hinzufügen eines Knotenpools aus, der für die Verwendung von GKE Sandbox zu Ihrem vorhandenen Knative-Bereitstellungscluster aktiviert ist. Hier werden Arbeitslasten ausgeführt, die Sie für die Verwendung von GKE Sandbox aktivieren.
Arbeitslast im GKE Sandbox-Knotenpool bereitstellen
Sobald Sie einen GKE-Cluster mit einem Knotenpool haben, der für GKE Sandbox aktiviert ist, aktualisieren Sie Ihre Knative-Bereitstellungskonfiguration. Aktualisieren Sie außerdem jede Dienstspezifikation, um die neuen Knoten zu verwenden. Diese Aktualisierungen sind nur einmal erforderlich.
Funktions-Flag für Laufzeitklasse aktivieren
In diesem Abschnitt aktivieren Sie die Kubernetes-Laufzeitklasse mithilfe von Knative-Feature- und -Erweiterungs-Flags in der ConfigMap config-features
im Namespace knative-serving
. Setzen Sie das ConfigMap-Flag kubernetes.podspec-runtimeclassname
auf enabled
, um die Laufzeitklasse zu aktivieren. Weitere Informationen finden Sie unter Kubernetes-Laufzeitklasse und Flags konfigurieren in der Dokumentation zu Features und Erweiterungen von Knative.
Öffnen Sie die ConfigMap
config-features
zum Bearbeiten:kubectl edit configmap config-features -n knative-serving
Fügen Sie dem Feld
data
das Funktions-Flagkubernetes.podspec-runtimeclassname: enabled
hinzu.Als Alternative zu den vorherigen Schritten können Sie den folgenden Befehl ausführen, um dieses Flag in Ihren Knative-Features zu patchen:
kubectl patch configmap config-features \ --type='json' \ -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \ -n knative-serving
Prüfen Sie Ihre Änderungen mit dem folgenden Befehl, um die ConfigMap aufzurufen:
kubectl get configmap config-features -n knative-serving -o yaml
Die ConfigMap sollte in etwa so aussehen:
apiVersion: v1 kind: ConfigMap metadata: name: config-features namespace: knative-serving labels: serving.knative.dev/release: v0.22.0 data: kubernetes.podspec-runtimeclassname: enabled
Dienst bereitstellen, der für die Ausführung in GKE Sandbox konfiguriert ist
Nachdem Sie das Funktions-Flag der Laufzeitklasse aktiviert haben, können Sie Dienste erstellen, die in der Spezifikation einen runtimeClassName
angeben. Legen Sie für runtimeClassName
den Wert gvisor
fest, um anzugeben, dass ein Dienst im GKE Sandbox-Knotenpool ausgeführt werden soll.
Stellen Sie mit dem folgenden Befehl eine „Hello World“-Knative-Anwendung bereit:
cat <<EOF | kubectl apply -f - apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: runtimeClassName: gvisor containers: - image: gcr.io/knative-samples/helloworld-go env: - name: TARGET value: "gVisor User" EOF
Wenn das Feature für den Kubernetes-Laufzeitklassennamen aktiviert ist, sollte der Befehl ohne Fehler abgeschlossen werden.
Rufen Sie mit dem folgenden Befehl die Pods für Ihren Dienst und ihre konfigurierte Laufzeitklasse ab:
kubectl get pods \ -o=custom-columns='NAME:.metadata.name,RUNTIME CLASS:.spec.runtimeClassName,STATUS:.status.phase'
Die Ausgabe sollte in etwa so aussehen:
NAME RUNTIME CLASS STATUS helloworld-go-00001-deployment-55f58477f-fxm6m gvisor Running
Nächste Schritte
Nachdem Sie geprüft haben, ob Sie nicht vertrauenswürdige Anwendungen in Ihrem neu erstellten GKE Sandbox-Knotenpool bereitstellen können, können Sie runtimeClassName: gvisor
zu den Kubernetes-Spezifikationen für andere nicht vertrauenswürdige Dienste hinzufügen, die Sie auf GKE Sandbox-Knotenpools ausführen möchten.
Weitere Informationen:
- GKE Sandbox-Dokumentation mit Einschränkungen, die die Kompatibilität mit einigen Diensten beeinträchtigen können.
- Eine detailliertere Anleitung zum Bereitstellen von Knative-Anwendungen in gVisor (auch GKE Sandbox genannt) finden Sie in der gVisor-Dokumentation zum Bereitstellen von Knative-Diensten.