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

Kubernetes Service仅转发流量至单个Pod的问题排查求助

问题原因与解决方案

核心问题:kubectl port-forward不支持Service负载均衡

你遇到的问题本质是kubectl port-forward svc/car-registry-service 9000:9000的工作机制导致的:

  • port-forward是直接在本地机器和集群内单个Pod之间建立隧道,完全绕过了Kubernetes Service的负载均衡逻辑(kube-proxy的iptables/IPVS规则)。
  • 一旦绑定的那个Pod被删除,隧道直接断开,自然返回空响应,哪怕其他Pod正常运行也不会自动切换目标。

解决方法

方法1:在集群内部测试Service负载均衡

这是验证Service负载均衡最准确的方式,直接在集群里启动临时Pod访问Service:

kubectl run -it --rm --image=curlimages/curl curl-test -- curl car-registry-service:9000/version

多执行几次这个命令,就能看到请求被轮询转发到不同Pod,返回不同的Pod名称。

方法2:用NodePort/LoadBalancer暴露服务(本地测试负载均衡)

如果需要从本地机器验证负载均衡,可修改Service类型为NodePort:

apiVersion: v1
kind: Service
metadata:
  name: car-registry-service
spec:
  type: NodePort
  selector:
    app: car-registry
  ports:
    - protocol: TCP
      port: 9000
      targetPort: 9000
      nodePort: 30090 # 可选,端口范围需在30000-32767之间

然后通过Kind节点IP+NodePort访问:

curl $(kubectl get nodes -o jsonpath='{.items[0].status.addresses[0].address}'):30090/version

多次访问即可看到负载均衡效果。如果想用LoadBalancer,Kind可搭配MetalLB组件实现。

方法3:确认Pod就绪状态

虽然你提到还有4个可用Pod,仍可先确认所有Pod的就绪状态:

kubectl get pods

确保所有Pod的READY列都是1/1,未就绪的Pod不会被Service纳入流量转发范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:25:23