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

K8s Service暴露NodePort无法访问 连接ETIMEDOUT超时排查

Kubernetes NodePort服务访问超时排查

问题背景

在Kubernetes集群部署SpringBoot应用时遇到Service暴露端口无法正常工作的问题,已确认:

  • Pod创建成功,运行状态正常
  • Service资源创建成功,状态正常
  • 数据库服务正常,相关业务表已完成创建
    Service对外暴露的NodePort端口为30119,通过Postman发起POST、GET请求均返回连接超时:
  • POST请求地址:http://192.168.99.100:30119/stock,报错:Error: connect ETIMEDOUT 192.168.99.100:30119
  • GET请求地址:http://192.168.99.100:30119/stock/1,报错:Error: connect ETIMEDOUT 192.168.99.100:30119

集群资源运行状态截图

部署使用的YAML配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sharemarket-crud-deployment
spec:
  selector:
    matchLabels:
      app: sharemarket-k8s-sb-service
  replicas: 2
  template:
    metadata:
      labels:
        app: sharemarket-k8s-sb-service
    spec:
      containers:
        - name: sharemarket-k8s-sb-service-container
          image: joy999/shareserviceproj:release06
          ports:
            - containerPort: 8080
          env:
            - name: DB_HOST
              valueFrom :
                configMapKeyRef :
                  name : db-config
                  key :  host
            - name: DB_NAME
              valueFrom :
                configMapKeyRef :
                  name : db-config
                  key :  dbName
            - name: DB_USERNAME
              valueFrom :
                secretKeyRef :
                  name : mysql-secrets
                  key :  username
            - name: DB_PASSWORD
              valueFrom :
                secretKeyRef :
                  name : mysql-secrets
                  key :  password
---
apiVersion: v1
kind: Service
metadata:
  name: springboot-sb-service-svc
spec:
  selector:
    app: springboot-k8s-sb-service
  ports:
    - protocol: "TCP"
      port: 8080
      targetPort: 8080
  type: NodePort

根因定位

核心故障原因为Service标签选择器与Pod实际标签不匹配:

  • Deployment定义的Pod标签为app: sharemarket-k8s-sb-service
  • Service的selector配置的筛选标签为app: springboot-k8s-sb-service
    二者标签不一致,导致Service无法选中任何后端Pod,没有可用的转发端点,外部请求到达Service后无法路由到实际运行的SpringBoot实例,最终触发连接超时。

修正标签后若仍存在访问异常,按以下优先级排查:

  • 检查SpringBoot应用启动配置,确认服务监听地址为0.0.0.0:8080,若绑定127.0.0.1会导致跨网络命名空间访问失败
  • 检查节点本地防火墙、云平台安全组规则,确认放通NodePort默认端口段(30000-32767)
  • 执行kubectl get endpoints springboot-sb-service-svc命令,确认返回的端点列表中存在运行中Pod的IP:8080记录,若列表为空说明标签匹配仍存在错误
  • 若使用minikube部署本地集群,执行minikube ip获取节点真实IP,不要使用虚机映射的其他地址访问

修复方案

修改Service的selector配置,与Pod标签保持一致,修正后的Service核心配置段如下:

spec:
  selector:
    app: sharemarket-k8s-sb-service

重新应用Service配置后等待数秒,即可通过NodePort正常访问接口。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:36:19