阿里云三节点集群做了灰度,主站 30080 能访问,新加的 30081 一直超时,两个 Service 配置完全一样,节点本地 curl 30081 却能通。
这类报错背后常见的原因有几处,逐个排除就行。安全组的入方向只写了 80 与 443,NodePort 区间根本没放行,节点本地自测自然一切正常;云防火墙在安全组之上又拦了一层,放行规则加错了对象;NodePort 区间被 kube-apiserver 的 service-node-port-range 限制,新端口不在范围内;访问走的是 SLB 后端,后端端口清单没同步加 30081。
上来先在节点内确认端口是通的
curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:30081
再确认安全组是否放行该端口
aliyun ecs DescribeSecurityGroupAttribute --SecurityGroupId sg-xxx --RegionId cn-hangzhou
接着核对集群允许的 NodePort 区间
ps -ef | grep kube-apiserver | grep -o 'service-node-port-range=[^ ]*'
等前面都确认过,再放行后用外部地址复测
curl -sI http://47.100.1.2:30081 | head -1
别只看报错消失,验证要多做一步。从集群外 curl 30081 返回 200,安全组规则列表里能看到该端口,SLB 后端端口与服务一致。
节点内通、外面不通基本就是网络边界问题,先分清安全组、云防火墙、负载均衡三层;NodePort 只适合临时暴露,长期还是走 Ingress。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
