クラシック・クラスター: テイント適用ノードを使用するとソース IP 保持が失敗するのはなぜですか?
クラシック・インフラストラクチャー
サービス設定ファイルの externalTrafficPolicy を Local に変更して、 イングレス ALB のソース IP 保存を有効にする。 しかし、トラフィックがアプリのバックエンド・サービスに到達しません。
Ingress ALB サービスのソース IP 保持を有効にすると、クライアント要求のソース IP アドレスは保持されます。 これらのサービスは、要求パケットの IP アドレスが変更されないようにするために、同じワーカー・ノード上の各アプリ・ポッドにのみトラフィックを転送します。
通常、Ingress ALB サービスポッドは、アプリポッドと同じワーカーノードにデプロイされます。 しかし、状況によっては、サービスポッドとアプリポッドが同じワーカーノードでスケジュールされないことがあります。 ワーカーノードで Kubernetes テイントを使用する場合、テイント耐性を持っていないポッドは汚染されたワーカーノードで実行できなくなります。 使用したテイントの種類によっては、ソースIPの保全が機能しない場合があります:
-
エッジ・ノードのテイント: クラスター内の各パブリック VLAN 上の複数のワーカー・ノードに
dedicated=edgeラベルを追加して、Ingress ポッドがそれらのワーカー・ノードにのみデプロイされるようにしました。 その後、それらのエッジ・ノードにテイントも適用して、他のすべてのワークロードがエッジ・ノードで実行されないようにしました。 しかし、アプリ・デプロイメントにエッジ・ノードのアフィニティー・ルールと容認を追加しませんでした。 アプリ・ポッドは、サービス・ポッドと同じテイント適用ノードにスケジュールすることはできず、トラフィックはアプリのバックエンド・サービスに到達しません。 -
カスタム・テイント: カスタム・テイントをいくつかのノード上で使用して、そのテイントの容認があるアプリ・ポッドだけをそれらのノードにデプロイできるようにしました。 アプリのデプロイメントと、Ingress サービスにアフィニティー・ルールと容認を追加したので、それらのポッドはそれらのノードにのみデプロイされます。 しかし、
ibm-cloud-provider-ip名前空間に自動的に作成されるkeepalivedibm-systemポッドがあるので、ALB ポッドとアプリ・ポッドは必ず同じワーカー・ノードにスケジュールされます。 これらのkeepalivedポッドには、使用したカスタムのテイントに対する容認がありません。 これらのポッドをアプリ・ポッドが実行されているノードと同じテイント適用ノードにスケジュールすることはできず、トラフィックはアプリのバックエンド・サービスに到達しません。
以下のいずれかのオプションを選択して、この問題を解決します。
-
エッジノードの汚染 :ALBとアプリポッドが汚染されたエッジノードにデプロイされるようにするには、 アプリデプロイメントにエッジノードアフィニティルールと許容値を追加 します。 Ingress ALB ポッドには、デフォルトでこれらのアフィニティー・ルールと容認があります。
-
カスタム・テイント:
keepalivedポッドが容認を保持していないカスタム・テイントを削除します。 代わりに、ワーカー・ノードにエッジ・ノードのラベルを付けてから、それらのエッジ・ノードにテイントを適用することができます。
前のステップを完了したにもかかわらず、 keepalived ポッドがまだスケジュールされていない場合は、 keepalived ポッドに関する詳細情報を収集します:
keepalivedポッドを取得します。kubectl get pods -n ibm-system- 出力で、
ibm-cloud-provider-ipStatus** が ** になっているPendingポッドを探します。 次に例を示します。ibm-cloud-provider-ip-169-61-XX-XX-55967b5b8c-7zv9t 0/1 Pending 0 2m <none> <none> ibm-cloud-provider-ip-169-61-XX-XX-55967b5b8c-8ptvg 0/1 Pending 0 2m <none> <none> - 各ポッド(
keepalived)について説明し、 「イベント」 セクションを確認する。 記載されているエラーメッセージや警告メッセージに対処する。kubectl describe pod ibm-cloud-provider-ip-169-61-XX-XX-55967b5b8c-7zv9t -n ibm-system