You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Kubernetes Service访问端口转发并将服务暴露至公网

Kubernetes NodePort服务公网无法访问解决步骤
  • 第一步:确认NodePort服务配置正常
    执行kubectl get svc命令查看服务状态,NodePort类型服务无需关注EXTERNAL-IP字段,重点确认PORT(S)列的格式为5432:<30000-32767区间端口>/TCP:
    • 如果端口不在上述默认区间,说明你手动指定的端口超出K8s默认NodePort范围,要么调整kube-apiserver的--service-node-port-range参数放开范围,要么删除现有服务重新执行expose命令不手动指定NodePort,使用系统自动分配的端口。
  • 第二步:放行节点端口访问规则
    这是最高发的故障原因:
    • 先确认K8s节点所在云服务商的安全组入方向规则,已放行对应NodePort端口的TCP访问,来源可设为0.0.0.0/0(公网全开放,按需调整)。
    • 再登录节点本地检查系统防火墙是否放行端口,CentOS/RHEL系统执行firewall-cmd --add-port=<替换为你的NodePort端口>/tcp --permanent && firewall-cmd --reload,Ubuntu系统执行ufw allow <替换为你的NodePort端口>/tcp。
  • 第三步:确认使用节点公网IP访问
    你访问时使用的$nodeIP必须为节点的公网可路由IP,可登录节点执行curl ifconfig.me获取真实公网IP,请勿使用节点内网IP(10.x、192.168.x、172.16.x开头)从公网访问。
  • 第四步:检查应用监听地址配置
    port-forward能通不代表应用允许外部访问,执行kubectl exec -it my-image -- ss -tunlp查看应用监听地址:
    • 如果应用仅监听127.0.0.1:5432,则只能本地环回访问,需要修改应用启动参数,将监听地址改为0.0.0.0:5432后重启Pod。
  • 第五步:验证服务与Pod的关联是否正常
    执行kubectl describe svc <你的服务名称>查看Selector字段,确认与Pod的标签完全匹配;同时执行kubectl get endpoints <你的服务名称>,确认ENDPOINTS列显示为PodIP:5432,如果为空说明服务没有正确关联后端Pod。
  • 第六步:检查kube-proxy状态
    执行kubectl get pods -n kube-system | grep kube-proxy,确认两个节点的kube-proxy Pod均为Running状态,若存在异常可查看Pod日志排查转发规则下发故障。

内容的提问来源于stack exchange,提问作者Svemat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 09:39:01