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

为何我的Kubernetes服务始终路由至同一Pod?

问题解答

你遇到的情况是因为kubectl port-forward的工作机制导致的,和Service本身的负载均衡、缓存、kind集群都没关系,下面逐个解答你的疑问:

1. 我的服务未实现轮询负载均衡吗?

你的Service本身是实现了轮询负载均衡的(Kubernetes默认的Service负载均衡策略就是轮询),但kubectl port-forward service/simpleweb-service这种方式并不会触发Service的负载均衡逻辑。当你执行这个命令时,kubectl会随机挑选一个匹配的后端Pod,然后在本地和这个Pod之间建立一个一对一的转发通道,所有后续请求都会通过这个固定通道发送到同一个Pod,自然不会出现轮询效果。

2. 是否存在我未察觉的缓存机制?

不存在未察觉的缓存问题,核心原因是port-forward的连接特性:它是单Pod定向转发,一旦连接建立就固定到那个Pod,除非你断开port-forward命令重新执行,才会重新随机选择一个新的Pod。另外如果浏览器开启了HTTP长连接(keep-alive),也会让同一次会话的请求复用连接,但这不是缓存,而且这里的核心问题还是port-forward的机制。

3. 我需要换一种方式暴露服务吗?这是kind集群的问题吗?

这不是kind集群的问题,是你用错了服务暴露方式来测试负载均衡。kubectl port-forward本来就是用于临时调试单个Pod/Service的工具,不适合用来测试负载均衡效果。如果要验证Service的轮询功能,推荐两种方式:

  • 集群内部测试:运行一个临时Pod去访问Service,多次执行就能看到轮询效果:
    kubectl run -it --rm --image=curlimages/curl curl-test -- curl simpleweb-service.default.svc.cluster.local:8080
    
  • 外部访问测试:在kind集群里可以通过以下方式暴露服务,从而测试负载均衡:
    • 修改Service的spec.type为NodePort,通过kind节点的IP+分配的NodePort端口访问;
    • 安装MetalLB组件后,将Service设为LoadBalancer类型,使用分配的VIP访问;
    • 配置Ingress资源并启用kind的Ingress控制器,通过本地域名/IP访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:10:34