すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:イングレス診断

最終更新日:Oct 29, 2024

Container Service for Kubernetes (ACK) コンソールには、一般的なIngressの問題の診断に役立つIngress診断機能があります。 このトピックでは、Ingress診断項目について説明し、これらの問題を修正する方法について提案します。

Ingress診断の診断項目には、Ingress、起動パラメーター、Ingressポッドエラーログ、およびIngressコントローラーServer Load Balancer (SLB) インスタンスが含まれます。

重要

診断機能を使用すると、ACKはクラスター内の各ノードでデータ収集プログラムを実行し、診断結果を収集します。 収集される情報には、システムのバージョン、ロードのステータス、Docker、およびkubelet、およびシステムログの主要なエラー情報が含まれます。 ACKはビジネス情報や機密データを収集しません。

侵入診断アイテム

説明

診断項目は、クラスタ構成に基づいて変化し得る。 診断ページの実際の診断項目が優先されます。

カテゴリ

説明

Ingress

Ingressリソースの可用性を確認します。

アドオン

Ingressコンポーネント、Ingressに関連付けられているサービス、およびIngressポッドの起動パラメーターを確認します。

SLB

Ingressコントローラーが使用するSLBインスタンスのステータス、最大接続数、QPS、およびヘルスステータスを確認します。

Ingress

診断アイテム

説明

どのように修正する

Ingressチェック

指定されたIngressが存在するかどうかを確認します。

指定されたURLに対してIngressルールが作成されているかどうかを確認します。 URLが有効な場合は、Ingressルールを確認します。 たとえば、パスとして正規表現が指定されているかどうか、またはuse-regexアノテーションが使用されているかどうかを確認します。

base-url-schemeチェック

nginx.ingress.kubernetes.io/base-url-schemeアノテーションが使用されているかどうかを確認します。 このアノテーションは、Ingress Controller 0.22.0では廃止されます。

Ingressコントローラーのバージョンを確認し、注釈を削除するか、他の注釈を使用します。

grpc-backendチェック

nginx.ingress.kubernetes.io/grpc-backendアノテーションが使用されているかどうかを確認します。 このアノテーションはIngress Controller 0.21.0では廃止されます。

Ingressコントローラーのバージョンを確認し、注釈を削除するか、他の注釈を使用します。

mirror-uriチェック

nginx.ingress.kubernetes.io/mirror-uriアノテーションが使用されているかどうかを確認します。 このアノテーションは、Ingress Controller 0.24.0では廃止されます。

Ingressコントローラーのバージョンを確認し、注釈を削除するか、他の注釈を使用します。

secure-backendsチェック

nginx.ingress.kubernetes.io/secure-backendsアノテーションが使用されているかどうかを確認します。 このアノテーションはIngress Controller 0.21.0では廃止されます。

Ingressコントローラーのバージョンを確認し、注釈を削除するか、他の注釈を使用します。

session-cookie-ハッシュチェック

nginx.ingress.kubernetes.io/session-cookie-hashアノテーションが使用されているかどうかを確認します。 このアノテーションは、Ingress Controller 0.24.0では廃止されます。

Ingressコントローラーのバージョンを確認し、注釈を削除するか、他の注釈を使用します。

nginx.com/nginx.orgチェック

Ingressがnginx.com/nginx.orgで始まるアノテーションを使用しているかどうかを確認します。 これらの注釈は、NGINX Ingressコントローラの商用バージョンのみを対象としており、NGINX Ingressコントローラのオープンソースバージョンでは使用できません。

NGINX Ingressコントローラーのオープンソースバージョンのアノテーションを使用します。 Ingressの詳細については、公式サイトの「NGINX Ingress管理」または「NGINX Ingress Controller」をご参照ください。

カナリアのステータス

カナリア機能を使用するには、nginx.ingress.kubernetes.io /Canary: "true" を指定する必要があります。 設定を指定しないと、カナリア機能は有効になりません。

Ingressのカナリア機能を有効にするには、ingressルールにnginx. Ingress. kubernetes.io /Canary: "true" アノテーションを追加します。

アドオン

診断アイテム

説明

どのように修正する

準備完了状態のIngressポッドの割合

Ingress Deploymentによって作成されたポッドと比較して、準備状態にあるポッドの割合を確認します。 値が100未満の場合、一部のIngressポッドは起動に失敗するか、ヘルスチェックに合格しません。

エラーログを確認して障害のあるポッドを見つけ、問題を修正します。 Ingressのトラブルシューティングの詳細については、「NGINX Ingressコントローラーのトラブルシューティング」をご参照ください。

Ingress IPアドレスチェック

IngressコントローラーがIngressにIPアドレスを割り当てているかどうかを確認します。

IPアドレスが割り当てられていない場合は、IngressコントローラーがIngressのIngressClassに存在するかどうか、およびIngressコントローラーが正常に機能するかどうかを確認します。 診断結果に基づいて問題を修正します。

リーダーポッドチェック

リーダーポッドが選択されているかどうかを確認します。 リーダーポッドが選択されていない場合、ポッドの起動時間が短すぎるか、Ingressコントローラーの権限が適切に構成されていない可能性があります。

Ingressポッドがエラーログを生成するかどうかを確認し、エラーログに示される問題を修正します。 Ingressのトラブルシューティングの詳細については、「NGINX Ingressコントローラーのトラブルシューティング」をご参照ください。

NGINX Ingressesが使用する注釈

NGINX Ingressコントローラーのオープンソースバージョンでは、nginx.ingress.kubernetes.ioで始まるアノテーションが使用されます。 オープンソースバージョンでは、nginx.com/nginx.orgで始まるアノテーションを認識できません。 nginx.com/nginx.orgで始まるアノテーションを使用すると、設定が無効になるか、要件を満たしていない場合があります。

NGINX Ingressコントローラーのオープンソースバージョンでサポートされているアノテーションを使用します。 注釈の詳細については、「注釈」をご参照ください。

NGINX Ingressでのrewrite-targetでのキャプチャグループの使用

NGINX Ingressの書き換え対象アノテーションがキャプチャグループと一緒に使用されているかどうかを確認します。 Ingressコントローラー0.22.0以降のバージョンでは、書き換え対象のアノテーションを使用する場合、キャプチャグループを明示的に指定する必要があります。 そうでない場合、トラフィック転送エラーが発生します。

Ingressを適切に設定します。 Ingress設定の詳細については、「高度なNGINX Ingress設定」をご参照ください。

NGINX Ingressカナリアルール

service-matchまたはservice-weightで2つ以下のサービスが指定されているかどうかを確認します。 service-matchまたはservice-weightを指定して、2つのサービス間でのみトラフィックを分散できます。 2つ以上のサービスを指定した場合、過剰なサービスは無視されます。 その結果、トラフィック転送が要件を満たしていない場合があります。

サービスの数を調整します。

Ingress名

一致するIngressルールの名前を表示します。

なし。

ポッドエラーログ

Ingressコントローラポッドがエラーログを生成するかどうかを確認します。 エラーログが生成されると、Ingressコントローラーが期待どおりに実行されない場合があります。

原因を特定し、エラーログに基づいて問題を修正します。 Ingressのトラブルシューティングの詳細については、「NGINX Ingressコントローラーのトラブルシューティング」をご参照ください。

rewrite-targetのパスでのキャプチャグループの使用

Ingressコントローラー0.22.0以降のバージョンで、nginx.ingress.kubernetes.io/rewrite-targetアノテーションを使用する場合は、キャプチャグループを指定する必要があります。 そうしないと、パスエラーが発生する可能性があります。

Ingressを適切に設定します。 Ingressの詳細については、「特定のURLからトラフィックをリダイレクトするルーティングルールの設定」をご参照ください。

サービス内の複数のターゲット-*

service-matchまたはservice-weightを指定して、2つのサービス間でのみトラフィックを分散できます。

service-weightまたはservice-matchで2つのサービスのみを指定します。 詳細については、「NGINX Ingressコントローラーを使用したカナリアリリースと青緑色の展開の実装」をご参照ください。

Ingressサービスチェック

Ingressの起動パラメーターで指定されたサービスが存在するかどうかを確認します。 サービスが削除されると、Ingressの起動に失敗する可能性があります。

Deploymentの起動パラメーターで削除されたサービスの名前を確認し、問題を修正します。 詳細については、「ネットワークおよびSLBインスタンスに関連するリスクの高い操作」をご参照ください。

Ingress Serviceエンドポイントチェック

Ingressに関連付けられているサービスにエンドポイントがあるかどうかを確認します。 サービスにエンドポイントがない場合、SLBインスタンスはトラフィックをIngressコントローラーにルーティングできません。

サービスのラベルセレクターが正常に機能するかどうかを確認します。

Ingress Serviceイベント

Ingressに関連付けられたサービスが警告イベントまたはエラーイベントを生成するかどうかを確認します。 この問題は、SLB設定エラーが原因で発生する可能性があります。

サービスイベントを確認し、原因を特定して問題を修正します。 サービスのトラブルシューティングの詳細については、「サービスのエラーと解決策」をご参照ください。

Ingress Service外部トラフィックポリシー

外部トラフィックポリシーは、クラスター内の外部トラフィックの分散方法を指定します。 デフォルトの外部トラフィックポリシーはローカルです。 クラスターに設定することもできます。 ローカルモードの使用を推奨します。 クラスターモードでは、クライアントIPアドレスは保持されません。 その結果、ヘルスチェック結果が正しくない可能性があります。

ビジネスでクラスターモードが必要な場合、またはクラスター内からSLBインスタンスのIPアドレスを介してIngressコントローラーにアクセスする場合は、上記の予防策は適用されません。

Ingress Service外部IPアドレス

クラウドコントローラマネージャがIngressに関連付けられているサービスにIPアドレスを割り当てているかどうかを確認します。 IPアドレスが割り当てられていない場合、Ingressはインターネットにアクセスできない可能性があります。

サービスのステータス、クラウドコントローラマネージャのステータス、およびSLBクォータが正常であることを確認してください。 ほとんどの問題はイベントを通じて公開されます。

Ingressサービスタイプ (LoadBalancer)

Ingressの起動パラメーターで指定されたサービスのタイプがLoadBalancerであるかどうかを確認します。 サービスタイプがLoadBalancerでない場合、Ingressコントローラーにインターネット経由でアクセスできない可能性があります。

ビジネスがLoadBalancerタイプのサービスを必要としない場合、上記の予防措置は適用されません。 それ以外の場合は、サービスのタイプをLoadBalancerに変更します。

-- force-namespace-分離チェック

-- force-namespace-isolationスタートアップパラメーターが使用されているかどうかを確認します。 このパラメーターは、Ingress Controller 0.24.0では非推奨です。

Ingressコントローラーのバージョンを確認し、起動パラメーターを削除します。

-- sort-backendsチェック

-- sort-backendsスタートアップパラメーターが使用されているかどうかを確認します。 このパラメーターは、Ingress Controller 0.22.0では非推奨です。

Ingressコントローラーのバージョンを確認し、起動パラメーターを削除します。

SLB

診断アイテム

説明

どのように修正する

SLBインスタンス

IngressコントローラーのSLBインスタンスが存在するかどうかを確認します。

Ingress Controllerで指定されたサービスが存在するかどうか、サービスが異常イベントを生成するかどうか、およびSLBコンソールにSLBインスタンスが存在するかどうかを確認します。 SLBインスタンスが誤って削除された場合は、サービスを再作成して問題を修正します。 詳細については、「」をご参照ください。誤ってSLBインスタンスを削除した場合はどうすればよいですか?

IngressコントローラーSLBインスタンスのバックエンドサーバーの正常性

SLBインスタンスのバックエンドサーバーのヘルスステータスを確認します。

SLBインスタンスのバックエンドサーバーが正常でない場合、Ingressコントローラーで指定されたサービスが異常イベントを生成するかどうか、およびコンポーネントが圧倒されるかどうかを確認します。 コンポーネントのトラブルシューティングの詳細については、「NGINX Ingressコントローラーのトラブルシューティング」をご参照ください。

SLB ID

SLBインスタンスのIDを表示します。

なし。

IngressコントローラーSLBインスタンス接続

過去3日間のSLBインスタンスの接続数が上限の80% を超えているかどうかを確認します。 接続数が上限に達した場合、クライアントはSLBインスタンスへの接続を確立できません。

SLBインスタンスの接続数が上限に達した場合は、業務の中断を避けるためにSLBインスタンスをアップグレードします。 詳細については、「既存のSLBインスタンスの使用」をご参照ください。

IngressコントローラーSLBインスタンスの新しい接続レート

過去3日間のSLBインスタンスの新規接続率が上限の80% を超えているかどうかを確認します。 レートが上限に達すると、クライアントは短期間でSLBインスタンスへの新しい接続を確立できません。

SLBインスタンスの新規接続率が上限に達した場合は、業務の中断を避けるためにSLBインスタンスをアップグレードします。 詳細については、「既存のSLBインスタンスの使用」をご参照ください。

IngressコントローラーSLBインスタンスQPS

過去3日間のSLBインスタンスのQPS値が上限の80% を超えているかどうかを確認します。 QPS値が上限に達すると、クライアントはSLBインスタンスに接続できません。

SLBインスタンスのQPSが上限に達した場合は、業務の中断を避けるためにSLBインスタンスをアップグレードします。 詳細については、「既存のSLBインスタンスの使用」をご参照ください。

TLSのホストとSecretName

Ingress TLSを設定するときは、HostパラメーターとSecretNameパラメーターの両方を指定する必要があります。

ホストとSecretNameの両方のパラメーターを指定し、ホストが証明書のホストと同じであることを確認します。

Ingress Controller SLBヘルスチェック

SLBインスタンスが過去3日以内にヘルスチェックに合格しないかどうかを確認します。 この問題は、コンポーネントが圧倒されるか、SLB設定にエラーが含まれる場合に発生します。

SLBインスタンスが過去3日以内にヘルスチェックに合格しなかった場合、業務の中断を防ぐために、Ingressコントローラーで指定されたサービスが異常イベントを生成しているかどうか、およびコンポーネントが圧倒されているかどうかを確認します。 コンポーネントのトラブルシューティングの詳細については、「NGINX Ingressコントローラーのトラブルシューティング」をご参照ください。