OVH托管Kubernetes集群无法访问NodePort服务如何排查
问题
- 在OVH托管Kubernetes集群暴露NodePort类型服务时,无法通过
<node-ip>:<node-port>访问对应端口 - 按K8s服务创建指引操作后验证结果:
- 执行
kubectl port-forward可在localhost:<target-port>正常访问服务 - 集群内部访问服务正常
- 外部通过
<node-ip>:<node-port>访问时请求超时
- 执行
- 已检查节点绑定的安全组,当前配置显示已放行所有流量,不确定节点端口相关防火墙规则的正确配置方式
- 安全组配置截图:

解决方案
先做基础校验,排除配置错误:
- 执行
kubectl get svc <对应服务名> -o yaml确认配置:spec.type值为NodePortspec.ports[*].nodePort字段分配的端口在K8s默认NodePort范围(30000-32767)内- 执行
kubectl get endpoints <对应服务名>,确认后端有正常的Pod IP+端口条目,无空值。你port-forward和集群内访问正常,这步基本不会有问题。
- 登录任意工作节点,在节点本地执行
curl 127.0.0.1:<node-port>,如果能正常返回响应,说明节点本地kube-proxy生成的iptables/ipvs转发规则正常,故障点在外部流量到节点的网络链路。
核心故障排查点(OVH托管K8s场景下90%的同类问题根因):
OVH的公共云网络有两层独立的访问控制,你配置的实例安全组只是其中一层,另一层集群默认的网络ACL默认拦截NodePort段流量:
- 第一层:实例级安全组
确认你配置全放行规则的安全组,确实已经绑定到所有K8s工作节点(不要配错到控制平面节点的安全组),同时确认规则优先级正确,没有更高优先级的拒绝规则覆盖放行规则,入站源地址范围覆盖你的访问来源(公网访问需配置源为0.0.0.0/0)。 - 第二层:集群级网络ACL
这是最容易遗漏的配置:OVH托管K8s集群创建时会自动生成集群专属的网络ACL,默认仅放行K8s组件管理端口(如22、10250),30000-32767段的业务端口默认拦截,和实例安全组是独立生效的,哪怕实例安全组全放行,ACL拦截也会导致访问超时。
你需要进入OVH控制台的托管K8s管理页面,找到集群的安全/网络配置板块,添加入站规则放行30000-32767段的TCP、UDP流量,源地址根据实际访问需求配置即可。
额外注意事项:
- 如果你的工作节点未绑定公网IP,填节点私网IP仅能在同VPC内网访问,公网访问需要给节点绑定公网IP,或直接使用LoadBalancer类型服务对接云负载均衡,不建议生产环境长期用NodePort暴露公网服务。
- 不要长期保留全放行安全组规则,生产环境建议仅放行实际使用的端口,同时限制源IP范围,降低暴露风险。
内容的提问来源于stack exchange,提问作者sdabet
相关产品推荐
相关产品推荐

