GKE でのロード バランシングのトラブルシューティング

Google Kubernetes Engine(GKE)でのロード バランシングの問題により、HTTP 502 エラーなどのサービスの中断が発生したり、アプリケーションへのアクセスが妨げられたりすることがあります。

このドキュメントでは、外部 Ingress からの 502 エラーのトラブルシューティング方法と、ロードバランサ ログや check-gke-ingress などの診断ツールを使用して問題を特定する方法について説明します。

この情報は、GKE でロード バランシングされたサービスを構成して維持するプラットフォーム管理者、運用担当者、アプリケーション デベロッパーにとって重要です。 Cloud de Confiance by S3NS のコンテンツで使用されている一般的なロールとタスクの例の詳細については、一般的な GKE ユーザーのロールとタスクをご覧ください。

外部 Ingress により HTTP 502 エラーが発生する

外部 Ingress リソースの HTTP 502 エラーのトラブルシューティングを行うには、次のガイダンスに従ってください。

  1. Ingress によって参照される各 GKE Service に関連付けられている各バックエンド サービスのログを有効にします
  2. ステータスの詳細を使用して、HTTP 502 レスポンスの原因を特定します。バックエンドからの HTTP 502 レスポンスを示すステータスの詳細には、ロードバランサではなく、処理 Pod 内でのトラブルシューティングが必要です。

非マネージド インスタンス グループ

外部 Ingress が非マネージド インスタンス グループ バックエンドを使用している場合、外部 Ingress リソースで HTTP 502 エラーが発生することがあります。この問題は、次のすべての条件が満たされている場合に発生します。

  • クラスターでは、すべてのノードプール内に多数のノードが含まれています。
  • Ingress によって参照される 1 つ以上の Service の処理 Pod が、少数のノードにのみ配置されています。
  • Ingress が参照する Service が externalTrafficPolicy: Local を使用します。

外部 Ingress が非マネージド インスタンス グループのバックエンドを使用しているかどうかを判断するには、次の操作を行います。

  1. Cloud de Confiance コンソールの [Ingress] ページに移動します。

    [Ingress] に移動

  2. 外部 Ingress の名前をクリックします。

  3. ロードバランサの名前をクリックします。ロード バランシングの詳細ページが表示されます。

  4. [バックエンド サービス] セクションの表で、外部 Ingress が NEG またはインスタンス グループのどちらを使用しているかを確認します。

この問題を解決するには、次のいずれかの解決策を使用します。

  • VPC ネイティブ クラスタを使用します。
  • 外部 Ingress が参照する Service ごとに externalTrafficPolicy: Cluster を使用します。この解決策では、パケットの送信元で元のクライアント IP アドレスが失われます。
  • node.kubernetes.io/exclude-from-external-load-balancers=true アノテーションを使用します。クラスタ内の外部 Ingress または LoadBalancer Service によって参照される Service の処理 Pod を実行していないノードまたはノードプールに、アノテーションを追加します。

ロードバランサのログを使用してトラブルシューティングを行う

内部パススルー ネットワーク ロードバランサのログ外部パススルー ネットワーク ロードバランサのログを使用して、ロードバランサに関する問題のトラブルシューティングを行い、ロードバランサから GKE リソースへのトラフィックを関連付けることができます。

ログは接続ごとに集約され、ほぼリアルタイムでエクスポートされます。ログは、LoadBalancer Service のデータパスに関連する GKE ノードごとに、上り(内向き)トラフィックと下り(外向き)トラフィックの両方に対して生成されます。ログエントリには、次のような GKE リソースの追加フィールドが含まれます。

  • クラスタ名
  • クラスタのロケーション
  • サービス名
  • サービスの Namespace
  • Pod 名
  • Pod の Namespace

診断ツールを使用してトラブルシューティングを行う

check-gke-ingress 診断ツールは、一般的な構成の間違いについて Ingress リソースを検査します。check-gke-ingress ツールは次の方法で使用できます。

  • クラスタで gcpdiag コマンドライン ツールを実行します。Ingress の結果がチェックルール gke/ERR/2023_004 セクションに表示されます。
  • check-gke-ingress ツールを単独で使用するか、または check-gke-ingress の手順に沿って kubectl プラグインとして使用します。