In diesem Dokument wird beschrieben, wie Sie Knative Serving in Google Kubernetes Engine (GKE) konfigurieren, um GKE Sandbox für eine verbesserte Isolation von Arbeitslasten vom Host-Kernel zu verwenden.
Ziele
- Hier erfahren Sie, wie Sie die GKE Sandbox in Ihrem Knative Serving-Cluster aktivieren.
- Stellen Sie einen Dienst bereit, der für die Ausführung auf Knoten, die in einer Sandbox ausgeführt werden, angegeben wurde.
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 Serving auf Ihrem Cluster installiert und konfiguriert ist.
- Achten Sie darauf, dass die Befehlszeilenumgebung eingerichtet ist und die Tools auf dem neuesten Stand sind:
GKE Sandbox-Knotenpool einem vorhandenen Knative Serving-Cluster für die Bereitstellung hinzufügen
Führen Sie die Schritte aus, um Ihrem vorhandenen Knative Serving-Cluster einen Knotenpool hinzuzufügen, der die GKE Sandbox verwenden kann. 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 GKE Sandbox-fähigen Knotenpool haben, aktualisieren Sie Ihre Knative Serving-Konfiguration. Aktualisieren Sie außerdem jede Dienstspezifikation, um die neuen Knoten zu verwenden. Diese Updates sind nur einmal erforderlich.
Funktions-Flag der Laufzeitklasse aktivieren
In diesem Abschnitt aktivieren Sie die Kubernetes-Laufzeitklasse mithilfe des Knative-Feature- und Erweiterungs-Flags in der config-features
-ConfigMap im knative-serving
-Namespace. Setzen Sie das ConfigMap-Flag kubernetes.podspec-runtimeclassname
auf enabled
, um die Laufzeitklasse zu aktivieren. Weitere Informationen finden Sie in der Knative-Dokumentation unter Funktionen und Erweiterungen im Abschnitt Kubernetes-Laufzeitklasse und Flags konfigurieren.
Öffnen Sie die ConfigMap
config-features
zum Bearbeiten:kubectl edit configmap config-features -n knative-serving
Fügen Sie dem Feld
data
das Feature-Flagkubernetes.podspec-runtimeclassname: enabled
hinzu.Alternativ zu den vorherigen Schritten können Sie den folgenden Befehl ausführen, um dieses Flag in Ihre Knative-Funktionen einzufügen:
kubectl patch configmap config-features \ --type='json' \ -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \ -n knative-serving
Führen Sie den folgenden Befehl aus, 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 wurde
Nachdem Sie das Feature-Flag für die Laufzeitklasse aktiviert haben, können Sie Dienste erstellen, in deren Spezifikation ein runtimeClassName
angegeben ist. Legen Sie runtimeClassName
auf gvisor
fest, um anzugeben, dass ein Dienst im GKE Sandbox-Knotenpool ausgeführt werden soll.
Führen Sie den folgenden Befehl aus, um eine Knative-Anwendung vom Typ „Hallo Welt“ bereitzustellen:
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 die Funktion für den Namen der Kubernetes-Laufzeitklasse aktiviert ist, sollte der Befehl ohne Fehler ausgeführt 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 den Kubernetes-Spezifikationen für andere nicht vertrauenswürdige Dienste runtimeClassName: gvisor
hinzufügen, die Sie auf dem GKE Sandbox-Knotenpools ausführen möchten.
Weitere Informationen:
- In der GKE Sandbox-Dokumentation finden Sie Informationen zu Einschränkungen, die die Kompatibilität mit einigen Diensten beeinträchtigen können.
- In den gVisor-Dokumenten zur Bereitstellung von Knative-Diensten finden Sie eine ausführlichere Anleitung zur Bereitstellung von Knative-Anwendungen in gVisor (auch GKE Sandbox genannt).