Mit GKE Sandbox schützen


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

Hinweise

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.

  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 Feature-Flag kubernetes.podspec-runtimeclassname: enabled hinzu.

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

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

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