ノード プール間のトラフィックは、カスタム ネットワーク セキュリティ グループによってブロックされます

この記事では、カスタム ネットワーク セキュリティ グループ (NSG) が Microsoft Azure Kubernetes Service (AKS) クラスター内のノード プール間のトラフィックをブロックするシナリオを解決する方法について説明します。

現象

ユーザー ノード プールのポッドからのドメイン ネーム システム (DNS) 解決が失敗します。

背景

複数のノード プールを含むシナリオでは、アプリケーション ポッド kube-system が別のノード プール (ユーザー ノード プール) に配置されている間、名前空間内のポッドを 1 つのノード プール (システム ノード プール) に配置できます。 シナリオによっては、互いに通信するポッドが異なるノード プールに存在する場合があります。

AKS を使用すると、お客様は 異なるサブネットにノード プールを持つことができます。 この機能は、お客様が異なる NSG を各ノード プールのサブネットに関連付けることもできます。

原因 1: ノード プールの NSG によって受信トラフィックがブロックされる

ノード プールの NSG に対する受信アクセスは、トラフィックをブロックします。 たとえば、システム ノード プール (コア DNS ポッドをホストする) 上のカスタム NSG は、ユーザー ノード プールのサブネットからのユーザー データグラム プロトコル (UDP) ポート 53 の受信トラフィックをブロックします。

Azure Kubernetes Service クラスターのユーザー ノード プール内の UDP ポート 53 での受信トラフィックをブロックするカスタム ネットワーク セキュリティ グループの図。

解決策 1: ノード プール間のトラフィックを許可するようにカスタム NSG を構成する

カスタム NSG でノード プール間の必要なトラフィック (特に UDP ポート 53) が許可されていることを確認します。 AKS では、サブネットに関連付けられているカスタム NSG は更新されません。

原因 2: ノード プールの NSG に対する送信アクセスによってトラフィックがブロックされる

別のノード プール上の NSG は、ポッドへの送信アクセスをブロックします。 たとえば、ユーザー ノード プールのカスタム NSG は、UDP ポート 53 のシステム ノード プールへの送信トラフィックをブロックします。

Azure Kubernetes Service クラスターのシステム ノード プール内の UDP ポート 53 上の送信トラフィックをブロックするカスタム ネットワーク セキュリティ グループの図。

解決策 2: ノード プール間のトラフィックを許可するようにカスタム NSG を構成する

「解決策 1: ノード プール間のトラフィックを許可するようにカスタム NSG を構成する」を参照してください。

原因 3: TCP ポート 10250 がブロックされている

もう 1 つの一般的なシナリオは、伝送制御プロトコル (TCP) ポート 10250 がノード プール間でブロックされていることです。

このような場合、ユーザーは次のテキストのようなエラー メッセージを受け取る可能性があります。

$ kubectl logs nginx-57cdfd6dd9-xb7hk
Error from server: Get https://<node>:10250/containerLogs/default/nginx-57cdfd6dd9-xb7hk/nginx: net/http: TLS handshake timeout

TCP ポート 10250 での通信がブロックされている場合、Kubelet への接続は影響を受け、ログはフェッチされません。

解決策 3: TCP ポート 10250 をブロックする NSG 規則を確認する

NSG 規則によって TCP ポート 10250 でのノード間通信がブロックされているかどうかを確認します。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。