GKE Sandbox による保護

このドキュメントでは、ホストカーネルからのワークロード分離を改善するために、GKE Sandbox を使用するように Google Kubernetes Engine(GKE)で実行される Knative serving を構成する方法について説明します。

既存の Knative serving クラスタに GKE Sandbox ノードプールを追加する

既存の Knative serving クラスタに、GKE Sandbox の使用を有効にしたノードプールを追加します。ここでは、GKE Sandbox を使用するようにオプトインしたワークロードが実行されます。

GKE Sandbox ノードプールにワークロードをデプロイする

GKE クラスタに GKE Sandbox が有効になっているノードプールを追加したら、Knative serving の構成を更新します。また、新しいノードを使用するようにサービス仕様を更新します。これらの更新は 1 回だけ行う必要があります。

runtime クラスのフィーチャー トグルを有効にする

このセクションでは、knative-serving Namespace の config-features ConfigMap で Knative 機能と拡張機能フラグを使用して、Kubernetes runtime クラスを有効にします。runtime クラスを有効にするには、ConfigMap フラグ kubernetes.podspec-runtimeclassnameenabled に設定します。詳しくは、Knative の機能と拡張機能Kubernetes runtime クラスフラグを構成するをご覧ください。

  1. config-features ConfigMap を開いて編集します。

    kubectl edit configmap config-features -n knative-serving
    
  2. data フィールドに kubernetes.podspec-runtimeclassname: enabled フィーチャー トグルを追加します。

  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 で実行されるように構成された Service をデプロイする

runtime クラス フィーチャー トグルを有効にした後、仕様で runtimeClassName を指定する Service を作成できます。サービスを GKE Sandbox ノードプールで実行する必要があることを示すには、runtimeClassNamegvisor に設定します。

  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 runtime クラス名機能が有効になっている場合、コマンドはエラーなしで終了します。

  2. 次のコマンドを実行して、実行中のサービスの Pod と構成された runtime クラスを取得します。

    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