为什么要分段验证
节点端口把服务暴露在每个节点的固定端口上,这条链路穿过了服务对象、后端就绪状态、节点转发规则、主机防火墙与云上安全策略等多个环节。外部访问不通时,按固定顺序逐段确认,能在几步之内定位到真正出问题的那一层,而不是反复修改配置碰运气。
基本信息
| 适用平台 | Kubernetes 1.20+,与网络插件无关 |
|---|---|
| 默认端口范围 | 30000-32767 |
| 转发实现 | 节点代理写入的转发规则(规则或虚拟服务模式) |
| 涉及层次 | 服务配置、后端就绪、节点转发、主机防火墙、云上策略 |
| 常用工具 | curl、监听查看、转发规则查看 |
典型使用场景
- 新服务通过节点端口对外提供访问,上线前验证连通性
- 集群内访问正常但外部不通,需要确定是哪一层拦截
- 发布后访问偶发失败,检查后端端点数量与就绪状态
- 云主机环境确认安全组与访问控制是否放行
- 多网卡节点上判断应当使用哪张网卡的地址访问
集群侧确认
集群侧确认
kubectl get svc web-np -o wide # 端口映射与分配到的节点端口
kubectl get endpoints web-np # 后端地址是否为空
kubectl get pods -l app=web -o wide # 后端副本是否就绪
kubectl get svc web-np -o jsonpath='{.spec.ports[0].nodePort}' # 取实际端口号节点与外部侧确认
节点与外部侧确认
curl -sv http://<节点内网IP>:30080/health # 从集群外验证
ss -lntp | grep 30080 # 查看是否有进程监听
iptables -t nat -L KUBE-NODEPORTS -n | head # 转发规则是否存在
# 云上检查安全组与网络访问控制;节点本机检查防火墙是否放行分段判断
| 层次 | 确认内容 | 异常表现 |
|---|---|---|
| 服务配置 | 端口映射与分配到的节点端口 | 端口未分配或与服务定义不一致 |
| 后端就绪 | 端点列表是否有地址 | 端点为空说明没有可用副本 |
| 节点转发 | 转发规则是否存在 | 规则缺失说明节点代理异常 |
| 主机防火墙 | 节点本地是否放行 | 本地拦截时同网段访问也不通 |
| 云上策略 | 安全组与访问控制 | 内网通外网不通的典型原因 |
节点端口由转发规则响应该端口,节点上没有用户态进程监听属于正常现象,不能用进程列表判断服务是否存在。
节点端口默认在整个节点网络内可访问,缺少防火墙与策略限制时等于把服务直接暴露出去。生产环境应配合来源白名单或改用入口控制器。