节点池之间的流量被自定义网络安全组阻止

本文介绍如何解决自定义网络安全组(NSG)阻止Microsoft Azure Kubernetes 服务(AKS)群集中的节点池之间的流量的情况。

现象

用户节点池 Pod 的域名系统(DNS)解析失败。

背景

在涉及多个节点池的方案中,命名空间中的 kube-system Pod 可以放在一个节点池(系统节点池)上,而应用程序 Pod 放置在不同的节点池(用户节点池)。 在某些情况下,相互通信的 Pod 可以位于不同的节点池中。

AKS 允许客户在不同的子网中拥有节点池。 此功能意味着客户还可以将不同的 NSG 与每个节点池的子网相关联。

原因 1:节点池的 NSG 阻止入站流量

节点池 NSG 上的入站访问会阻止流量。 例如,系统节点池(托管核心 DNS Pod)上的自定义 NSG 会阻止用户数据报协议 (UDP) 端口 53 上的入站流量从用户节点池的子网。

自定义网络安全组示意图,该组阻止Azure Kubernetes 服务群集的用户节点池中的 UDP 端口 53 上的入站流量。

解决方案 1:配置自定义 NSG 以允许节点池之间的流量

请确保自定义 NSG 允许节点池之间的所需流量,特别是在 UDP 端口 53 上。 AKS 不会更新与子网关联的自定义 NSG。

原因 2:节点池 NSG 上的出站访问会阻止流量

另一个节点池上的 NSG 会阻止对 Pod 的出站访问。 例如,用户节点池上的自定义 NSG 会阻止 UDP 端口 53 到系统节点池的出站流量。

自定义网络安全组示意图,该安全组阻止Azure Kubernetes 服务群集的系统节点池中的 UDP 端口 53 上的出站流量。

解决方案 2:配置自定义 NSG 以允许节点池之间的流量

请参阅 解决方案 1:配置自定义 NSG 以允许节点池之间的流量。

原因 3:TCP 端口 10250 被阻止

另一个常见情况是,传输控制协议(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 规则

检查 TCP 端口 10250 上是否有任何 NSG 规则阻止节点到节点通信。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区