特権 Autopilot ワークロードのデプロイのトラブルシューティング


このページでは、Google Kubernetes Engine(GKE)Autopilot クラスタにデプロイする特権ワークロードに関する問題を解決する方法について説明します。

許可リストの同期に関する問題

AllowlistSynchronizer をデプロイすると、GKE は指定した許可リスト ファイルをインストールして同期しようとします。この同期が失敗した場合、AllowlistSynchronizerstatus フィールドにエラーが報告されます。

AllowlistSynchronizer オブジェクトのステータスを取得します。

kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml

出力は次のようになります。

...
status:
  conditions:
  - type: Ready
    status: "False"
    reason: "SyncError"
    message: "some allowlists failed to sync: example-allowlist-1.yaml"
    lastTransitionTime: "2024-10-12T10:00:00Z"
    observedGeneration: 2
  managedAllowlistStatus:
    - filePath: "gs://path/to/allowlist1.yaml"
      generation: 1
      phase: Installed
      lastSuccessfulSync: "2024-10-10T10:00:00Z"
    - filePath: "gs://path/to/allowlist2.yaml"
      phase: Failed
      lastError: "Initial install failed: invalid contents"
      lastSuccessfulSync: "2024-10-08T10:00:00Z"

conditions.message フィールドと managedAllowlistStatus.lastError フィールドには、エラーの詳細情報が表示されます。以下の情報を参考にして問題を解決してください。

特権ワークロードのデプロイに関する問題

許可リストのインストールが正常に完了したら、対応する特権ワークロードをクラスタにデプロイします。場合によっては、GKE がワークロードを拒否することがあります。

次の解決策を試します。

  • クラスタの GKE バージョンがワークロードのバージョン要件を満たしていることを確認します。
  • デプロイするワークロードが、許可リスト ファイルが適用されるワークロードであることを確認します。

特権ワークロードが拒否された理由を確認するには、許可リスト違反に関する詳細情報を GKE にリクエストします。

  1. クラスタにインストールされている許可リストのリストを取得します。

    kubectl get workloadallowlist
    

    特権ワークロードに適用する許可リストの名前を確認します。

  2. 特権ワークロードの YAML マニフェストをテキスト エディタで開きます。ワークロードのデプロイ プロセスで他のツールを使用している場合など、YAML マニフェストにアクセスできない場合は、ワークロード プロバイダに連絡して問題を報告してください。以降の手順はスキップします。

  3. 特権ワークロード Pod 仕様の spec.metadata.labels セクションに次のラベルを追加します。

    labels:
      cloud.google.com/matching-allowlist: ALLOWLIST_NAME
    

    ALLOWLIST_NAME は、前の手順で取得した許可リストの名前に置き換えます。許可リスト ファイルのパスではなく、kubectl get workloadallowlist コマンドの出力から名前を使用します。

  4. マニフェストを保存し、ワークロードをクラスタに適用します。

    kubectl apply -f WORKLOAD_MANIFEST_FILE
    

    WORKLOAD_MANIFEST_FILE は、マニフェスト ファイルのパスに置き換えます。

    出力には、ワークロード内のどのフィールドが指定された許可リストと一致しなかったかに関する詳細情報が示されます。次の例をご覧ください。

    Error from server (GKE Warden constraints violations): error when creating "STDIN": admission webhook "warden-validating.common-webhooks.networking.gke.io" denied the request:
    
    ===========================================================================
    Workload Mismatches Found for Allowlist (example-allowlist-1):
    ===========================================================================
    HostNetwork Mismatch: Workload=true, Allowlist=false
    HostPID Mismatch: Workload=true, Allowlist=false
    Volume[0]: data
             - data not found in allowlist. Verify volume with matching name exists in allowlist.
    Container[0]:
    - Envs Mismatch:
            - env[0]: 'ENV_VAR1' has no matching string or regex pattern in allowlist.
            - env[1]: 'ENV_VAR2' has no matching string or regex pattern in allowlist.
    - Image Mismatch: Workload=k8s.gcr.io/diff/image, Allowlist=k8s.gcr.io/pause2. Verify that image string or regex match.
    - SecurityContext:
            - Capabilities.Add Mismatch: the following added capabilities are not permitted by the allowlist: [SYS_ADMIN SYS_PTRACE]
    - VolumeMount[0]: data
            - data not found in allowlist. Verify volumeMount with matching name exists in allowlist.
    

    この例では、次の違反が発生します。

    • ワークロードで hostNetwork: true が指定されているが、許可リストで hostNetwork: true が指定されていない。
    • ワークロードで hostPID: true が指定されているが、許可リストで hostPID: true が指定されていない。
    • ワークロードでは data という名前のボリュームが指定されていますが、許可リストでは data という名前のボリュームが指定されていません。
    • コンテナには ENV_VAR1ENV_VAR2 という名前の環境変数が指定されていますが、許可リストにはこれらの環境変数が指定されていません。
    • コンテナではイメージ k8s.gcr.io/diff/image が指定されていますが、許可リストでは k8s.gcr.io/pause2 が指定されています。
    • コンテナは SYS_ADMIN 機能と SYS_PTRACE 機能を追加しますが、許可リストではこれらの機能の追加が許可されていません。
    • コンテナは data という名前のボリューム マウントを指定していますが、許可リストには data という名前のボリューム マウントが指定されていません。

サードパーティ プロバイダが提供するワークロードをデプロイしている場合は、そのプロバイダに問題を報告して違反を解決します。前のステップの出力を問題に提供します。

特権ワークロードと許可リストに関するバグと機能リクエスト

パートナーは、特権ワークロードと許可リストの作成、開発、維持を行う責任があります。バグが発生した場合や、特権ワークロードまたは許可リストに関する機能リクエストがある場合は、該当するパートナーにお問い合わせください。