無効な CA バンドルを含む CRD のトラブルシューティング


カスタム リソース定義(CRD)は、Kubernetes の機能を拡張するための強力なツールです。ただし、CRD の変換 webhook 構成 spec.conversion.webhook.clientConfig.caBundle に無効または不正な形式の認証局(CA)バンドルが含まれていると、クラスタ オペレーションが中断される可能性があります。これは、リソースの作成、更新、削除の実行中にエラーとして表示されることがあります。Google Kubernetes Engine(GKE)はクラスタをモニタリングし、Recommender サービスを利用して、プラットフォームの使用を最適化できるようにガイダンスを提供します。

クラスタの安定性とパフォーマンスを維持するために、動作しているものの、無効な CA バンドルがある CRD に関する GKE の推奨事項をご覧ください。このガイダンスを使用して、誤って構成されている可能性がある CRD を確認し、必要に応じて更新します。Recommender から取得した分析情報と推奨事項を管理する方法については、分析情報と推奨事項で GKE の使用を最適化するをご覧ください。

影響を受けるクラスタを特定する

無効な CA バンドルを含む CRD の影響を受けるクラスタを特定する分析情報を取得するには、サブタイプ K8S_CRD_WITH_INVALID_CA_BUNDLE分析情報と推奨事項を表示する手順に沿って操作します。分析情報は次の方法で取得できます。

  • Trusted Cloud コンソールを使用する。
  • Google Cloud CLI または Recommender API を使用して、サブタイプ K8S_CRD_WITH_INVALID_CA_BUNDLE でフィルタリングする。

分析情報を使用して CRD を特定したら、誤って構成されている CA バンドルのトラブルシューティングの手順に沿って操作します。

誤って構成された CRD を GKE が検出した場合

GKE クラスタに、spec.conversion.webhook.clientConfig の Webhook クライアント構成に対して誤って構成された caBundle を報告する 1 つ以上の CRD がある場合、GKE は K8S_CRD_WITH_INVALID_CA_BUNDLE サブタイプの分析情報と推奨事項を生成します。

手順に沿って、CA バンドルが誤って構成されている CRD を確認します。

検出された CRD のトラブルシューティング

以下の各セクションでは、構成ミスの可能性があるとして GKE によって検出された CRD のトラブルシューティングの手順について説明します。

指示に従って CRD を正しく構成すると、推奨事項は 24 時間以内に解決され、コンソールに表示されなくなります。推奨事項のガイダンスを実装してから 24 時間未満の場合は、推奨事項に解決済みのマークを付けることができます。推奨事項を実装しない場合は、拒否できます。

クラスタ内の影響を受ける CRD を特定する

  1. サブタイプ K8S_CRD_WITH_INVALID_CA_BUNDLE分析情報と推奨事項を表示し、トラブルシューティングする分析情報を 1 つずつ選択します。GKE は、破損した CRD を含むクラスタごとに 1 つの分析情報を生成します。

  2. 次のコマンドを実行して Service の説明を取得し、問題が発生する可能性のある CA バンドルを含む CRD を見つけます。

    kubectl get crd -o custom-columns=NAME:.metadata.name,CABUNDLE:.spec.conversion.webhook.clientConfig.caBundle
    

    次のような出力が表示されます。

    • 名前: CRD の名前。
    • CaBundle: CRD の変換 Webhook に関連付けられた CA バンドル(存在する場合)。出力を確認します。変換 Webhook を使用していることがわかっている CRD の caBundle 列が空の場合、caBundle に問題がある可能性があります。

CRD を再作成する

このエラーを解決するには、有効な CA バンドルを使用して、影響を受ける CRD を再作成します。

  1. 問題のある CRD に関連付けられている既存のカスタム リソースがある場合は、バックアップします。次のコマンドを実行して、既存のリソースをエクスポートします。

      kubectl get <crd-name> -o yaml > backup.yaml
    
  2. 既存の CRD を削除します。

      kubectl delete crd <crd-name>
    
  3. CRD の caBundle フィールドに、Base64 でエンコードされた適切な形式の PEM 証明書が含まれていることを確認します。これを行うには、CRD を直接編集するか、作成者に連絡します。

  4. CRD YAML 定義を変更し、spec.conversion.webhook.clientConfig.caBundle フィールドを有効な CA バンドルデータで更新します。結果は次のようになります。

        spec:
          conversion:
            webhook:
              clientConfig:
                caBundle: <base64-encoded-ca-bundle>
    
  5. 修正した CRD を適用します。

        kubectl apply -f <corrected-crd-file.yaml>
    
  6. カスタム リソースを復元します。

        kubectl apply -f backup.yaml
    

次のステップ