首页 > 首页 > 应用服务 > 容器技术 > Kubernetes > Kubernetes-1.24.0以上版本kube-proxy不再监听nodeport端口
2024
05-15

Kubernetes-1.24.0以上版本kube-proxy不再监听nodeport端口

一、问题描述

最近发新的Kubernetes 1.24+和1.25+集群,node节点上看不到 Service 使用 nodeport 监听端口,但是Service nodeport端口却是可用的。 而且,在Kubernetes 1.18.0 版本发现node节点上Service nodeport是正常监听。

二、问题原因

Github 官方解释

在新版本中已经删除了kube-proxy打开端口套接字部分,但是会在iptables中进行转发,所以不影响访问

kube-proxy: remove port opener by khenidak · Pull Request #108496 · kubernetes/kubernetes (github.com)

Service NodePorts can be accessed via LB IPs (iptables, at least) · Issue #111863 · kubernetes/kubernetes (github.com)

阿里云ACK官方解释

在Kubernetes 1.22.15及以后的版本中,kube-proxy去除了监听NodePort的逻辑,当NodePort端口范围(即APIServer的ServiceNodePortRange参数)与内核net.ipv4.ip_local_port_range端口范围有冲突的情况下,可能会导致偶发的TCP无法连接的情况,从而导致健康检查失败、业务异常等问题。因此,升级集群版本至1.22.10或以后的版本时,请确保集群NodePort端口范围与任意节点net.ipv4.ip_local_port_range端口范围不存在冲突。更多信息,请参见Kubernetes社区PR

三、如何正确配置NodePort范围

在Kubernetes中,APIServer提供了ServiceNodePortRange参数(命令行参数 --service-node-port-range),该参数是用于限制NodePort或LoadBalancer类型的Service在节点上所监听的NodePort端口范围,该参数默认值为30000~32767。在ACK Pro集群中,您可以通过自定义Pro集群的管控面参数修改该端口范围。具体操作,请参见自定义ACK Pro集群的管控面参数

  • 您在修改NodePort端口范围时必须十分谨慎。务必保证NodePort端口范围与集群节点上Linux内核提供的net.ipv4.ip_local_port_range参数中的端口范围不冲突。该内核参数ip_local_port_range控制了Linux系统上任意应用程序可以使用的本地端口号范围。ip_local_port_range的默认值为32768~60999。
  • 您所创建的ACK集群在默认配置情况下,ServiceNodePortRange参数和ip_local_port_range参数不会产生冲突。如果您此前为了提升端口数量限制调整了这两个参数中任意一个,导致两者范围出现重合,则可能会产生节点上的偶发网络异常,严重时会导致业务健康检查失败、集群节点离线等。建议您恢复默认值或同时调整两个端口范围到完全不重合。
  • 调整端口范围后,集群中可能存在部分NodePort或LoadBalancer类型的Service仍在使用ip_local_port_range参数端口范围内的端口作为NodePort。此时您需要对这部分Service进行重新配置以避免冲突,可通过kubectl edit <service-name>的方式直接将spec.ports.nodePort字段的值更改为未被占用的NodePort。
Kubernetes-1.24.0以上版本kube-proxy不再监听nodeport端口 - 第1张  | 架构迷
最后编辑:
作者:摘星怪
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。