使用 GKE Sandbox 確保安全

本文說明如何設定在 Google Kubernetes Engine (GKE) 上執行的 Knative 服務,以使用 GKE Sandbox,進一步將工作負載與主機核心隔離。

將 GKE Sandbox 節點集區新增至現有的 Knative 服務叢集

請按照這些步驟,將啟用 GKE Sandbox 的節點集區新增至現有的 Knative Serving 叢集。您選擇使用 GKE Sandbox 的工作負載會在此執行。

在 GKE Sandbox 節點集區中部署工作負載

建立啟用 GKE Sandbox 的節點集區後,請更新 Knative Serving 設定。此外,請更新每個服務規格,以使用新節點。這些更新只需要執行一次。

啟用執行階段類別功能旗標

在本節中,您將在 knative-serving 命名空間的 config-features ConfigMap 中,使用 Knative 功能和擴充功能標記啟用 Kubernetes 執行階段類別。如要啟用執行階段類別,請將 ConfigMap 旗標 kubernetes.podspec-runtimeclassname 設為 enabled。詳情請參閱 Knative 功能和擴充功能說明文件中的「Kubernetes 執行階段類別」和「設定標記」。

  1. 開啟 config-features ConfigMap 進行編輯:

    kubectl edit configmap config-features -n knative-serving
    
  2. kubernetes.podspec-runtimeclassname: enabled 功能標記新增至 data 欄位。

  3. 除了上述步驟,您也可以執行下列指令,將這個標記修補到 Knative 功能中:

    kubectl patch configmap config-features \
        --type='json' \
        -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \
        -n knative-serving
    
  4. 如要驗證編輯內容,請執行下列指令來查看 ConfigMap:

    kubectl get configmap config-features -n knative-serving -o yaml
    

    ConfigMap 應如下所示:

    apiVersion: v1
    kind: ConfigMap
    metadata:
        name: config-features
        namespace: knative-serving
        labels:
            serving.knative.dev/release: v0.22.0
    data:
        kubernetes.podspec-runtimeclassname: enabled
    

部署設定為在 GKE Sandbox 中執行的服務

啟用執行階段類別功能旗標後,您就能建立在規格中指定 runtimeClassName 的服務。將 runtimeClassName 設為 gvisor,表示服務應在 GKE Sandbox 節點集區中執行。

  1. 執行下列指令,部署「Hello World」Knative 應用程式:

    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
    

    如果已啟用 Kubernetes 執行階段類別名稱功能,這項指令應會順利完成,不會發生錯誤。

  2. 執行下列指令,取得服務執行的 Pod 和設定的執行階段類別:

    kubectl get pods \
        -o=custom-columns='NAME:.metadata.name,RUNTIME CLASS:.spec.runtimeClassName,STATUS:.status.phase'
    

    輸出應會如下所示:

    NAME                                              RUNTIME CLASS   STATUS
    helloworld-go-00001-deployment-55f58477f-fxm6m    gvisor          Running