节点池之间的流量被自定义网络安全组阻止
本文介绍如何解决自定义网络安全组(NSG)阻止Microsoft Azure Kubernetes 服务(AKS)群集中的节点池之间的流量的情况。
现象
用户节点池 Pod 的域名系统(DNS)解析失败。
背景
在涉及多个节点池的方案中,命名空间中的 kube-system
Pod 可以放在一个节点池(系统节点池)上,而应用程序 Pod 放置在不同的节点池(用户节点池)。 在某些情况下,相互通信的 Pod 可以位于不同的节点池中。
AKS 允许客户在不同的子网中拥有节点池。 此功能意味着客户还可以将不同的 NSG 与每个节点池的子网相关联。
原因 1:节点池的 NSG 阻止入站流量
节点池 NSG 上的入站访问会阻止流量。 例如,系统节点池(托管核心 DNS Pod)上的自定义 NSG 会阻止用户数据报协议 (UDP) 端口 53 上的入站流量从用户节点池的子网。
解决方案 1:配置自定义 NSG 以允许节点池之间的流量
请确保自定义 NSG 允许节点池之间的所需流量,特别是在 UDP 端口 53 上。 AKS 不会更新与子网关联的自定义 NSG。
原因 2:节点池 NSG 上的出站访问会阻止流量
另一个节点池上的 NSG 会阻止对 Pod 的出站访问。 例如,用户节点池上的自定义 NSG 会阻止 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 反馈社区。