Sicher mit GKE Sandbox


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. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweise

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.

  1. Öffnen Sie die ConfigMap config-features zum Bearbeiten:

    kubectl edit configmap config-features -n knative-serving
    
  2. Fügen Sie dem Feld data das Funktions-Flag kubernetes.podspec-runtimeclassname: enabled hinzu.

  3. 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
    
  4. 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.

  1. 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.

  2. 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: