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

ClusterIP Service无法向同标签的两个Deployment分发请求

问题原因与解决方案

问题本质

你遇到的不是Service配置问题,而是kubectl port-forward针对Service的工作机制导致的:

当执行kubectl port-forward service/demo 9999:8888时,Kubectl会从Service关联的Endpoints列表中随机选择一个Pod,直接建立本地端口到该Pod端口的转发通道——这个过程完全绕开了Service的kube-proxy负载均衡逻辑。因此所有请求都会固定打到同一个Pod,一旦该Pod被删除,转发连接就会直接中断,Kubectl不会自动切换到其他可用Pod。

验证Service负载均衡正常

你的Deployment和Service配置完全正确,标签匹配、Endpoints注册正常,Service本身的负载均衡功能是可用的。可以通过以下方式验证:

  • 在集群内启动一个临时测试Pod,多次访问Service:
    kubectl run -it --rm --image=curlimages/curl curl-test -- sh
    # 在Pod内执行多次curl请求
    curl demo:8888
    curl demo:8888
    
    会看到返回的文本在两个Pod之间轮询切换(因为你的ServiceSession Affinity设置为None,默认轮询策略)。

本地测试负载均衡的替代方案

如果需要在本地测试Service的负载均衡效果,可以用以下方法:

  1. 使用kubectl proxy
    启动API Server代理:

    kubectl proxy
    

    然后通过以下URL访问Service,请求会经过Service的负载均衡:

    http://localhost:8001/api/v1/namespaces/default/services/demo:8888/proxy/
    

    多次刷新就能看到不同Pod的返回内容。

  2. 手动切换Pod端口转发
    分别转发两个Pod的端口,手动测试不同实例:

    # 转发第一个Pod
    kubectl port-forward demo-6cf4f66696-9kfqv 9999:8888
    # 测试完成后停止,再转发第二个Pod
    kubectl port-forward raheel-demo-77c6fc76d6-dqrzg 9999:8888
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:57:41