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

K8s Service无法关联Pod端口问题求助

问题分析与解决:NextJS前端无法连接Kubernetes内的gateway-api服务

问题现象

  • NextJS前端调用http://gateway-api:8000/...时,DNS可解析到正确的Service IP,但返回连接被拒绝
  • Postman等工具可正常访问该API,前端始终无法建立连接

配置与查询信息

Pod配置

apiVersion: v1
kind: Pod
metadata:
  name: gateway-api
spec:
  selector:
    name: gateway-api
  template:
    metadata:
      labels:
        run: gateway-api
  containers:
    - name: gateway-api
      image: something/gateway-api:latest
      ports:
        - containerPort: 8000

Service配置

apiVersion: v1
kind: Service
metadata:
  name: gateway-api
  labels:
    run: gateway-api
spec:
  ports:
    - port: 8000
      protocol: "TCP"
      targetPort: 8000
  selector:
    app: gateway-api

查询结果

Service详情

kubectl describe service gateway-api
Name:              gateway-api
Namespace:         default
Labels:            app.kubernetes.io/managed-by=tilt
                   run=gateway-api
Annotations:       <none>
Selector:          app=gateway-api
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.103.9.152
IPs:               10.103.9.152
Port:              <unset>  8000/TCP
TargetPort:        8000/TCP
Endpoints:         <none>
Session Affinity:  None
Events:            <none>

Pod列表

kubectl get pod -o wide             
NAME          READY   STATUS    RESTARTS      AGE   IP           NODE             NOMINATED NODE   READINESS GATES
gateway-api   1/1     Running   0             12m   10.1.1.161   docker-desktop   <none>           <none>
gateway-web   1/1     Running   0             12m   10.1.1.160   docker-desktop   <none>           <none>
mysql-0       1/1     Running   7 (19h ago)   75d   10.1.1.140   docker-desktop   <none>           <none>

Service列表

kubectl get service -o wide
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE   SELECTOR
gateway-api      ClusterIP   10.103.9.152    <none>        8000/TCP   11m   app=gateway-api

问题根因

从配置和查询结果可直接定位:

  • Service的selector设置为app=gateway-api,但Pod的labels仅包含run=gateway-api,标签完全不匹配
  • kubectl describe service gateway-api显示Endpoints: <none>,说明Service未关联到任何Pod,这是连接被拒绝的核心原因

解决方案

方案1:修改Service的Selector匹配Pod标签

调整Service配置中的selector字段,使其与Pod的labels一致:

apiVersion: v1
kind: Service
metadata:
  name: gateway-api
  labels:
    run: gateway-api
spec:
  ports:
    - port: 8000
      protocol: "TCP"
      targetPort: 8000
  selector:
    run: gateway-api  # 修改为与Pod一致的标签

方案2:修改Pod的Labels匹配Service Selector

在Pod配置的labels中添加Service期望的标签:

apiVersion: v1
kind: Pod
metadata:
  name: gateway-api
spec:
  selector:
    name: gateway-api
  template:
    metadata:
      labels:
        run: gateway-api
        app: gateway-api  # 添加匹配Service的标签
  containers:
    - name: gateway-api
      image: something/gateway-api:latest
      ports:
        - containerPort: 8000

修改后执行kubectl apply -f <配置文件路径>重新部署,再通过kubectl describe service gateway-api确认Endpoints已显示Pod的IP地址,此时前端即可正常连接服务。

注:因使用NextJS服务器,无法通过localhost:xxxx访问,只能通过命名Pod/Service路径调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:30:28