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

如何通过Envoy Proxy实现Kubernetes内部微服务通信?Spring Boot微服务调用404问题排查求助

解决Kubernetes中Client微服务调用Server微服务的404问题

你的Client服务能正常对外提供/clientgreet接口,但调用Server的/server接口时返回404,错误提示找不到/server路径。结合你的配置代码,我来帮你排查最可能的原因和解决方法:

最可能的根源:Server服务的运行端口与K8s配置不匹配

你的Server服务基于Spring Boot开发,而Spring Boot的默认监听端口是8080,但你的Kubernetes配置里:

  • Server Deployment的containerPort设为8001
  • Server Service的targetPort也设为8001

如果你的Server项目里没有显式设置server.port=8001(比如在application.properties或application.yml中),那服务实际是在8080端口运行的。这就导致K8s把请求转发到了没有服务监听的8001端口,最终返回404错误。

解决步骤:

  1. 确认Server的实际运行端口

    • 打开你的Server项目,检查src/main/resources/application.properties(或yml)文件,看是否有server.port配置。如果没有,默认就是8080。
    • 或者直接进入Server Pod验证:
      kubectl exec -it $(kubectl get pods -l app=server -o jsonpath='{.items[0].metadata.name}') -- netstat -tlnp
      
      查看输出里监听的端口,确认是8001还是8080。
  2. 修正K8s配置匹配实际端口
    如果Server实际运行在8080,修改server-k8s.yml:

    • 更新Deployment的容器端口:
      ports:
        - containerPort: 8080  # 改成Server实际运行的端口
      
    • 更新Service的目标端口:
      ports:
        - port: 8001
          protocol: TCP
          name: http
          targetPort: 8080  # 改成Server实际运行的端口
      
  3. 更新Client的URL环境变量
    因为Server Service的port还是8001(对外暴露的端口),所以Client的URL应该保持为:

    env:
      - name: URL
        value: 'http://server-svc:8001/server'
    

    (如果你把Service的port也改成了8080,那URL就要改成http://server-svc:8080/server)

  4. 重新部署服务

    kubectl apply -f server-k8s.yml
    kubectl apply -f client-k8s.yml
    
  5. 验证修复效果
    等待Pod重启完成后,再次访问http://localhost:8002/client,应该能正常获取Server返回的内容了。

其他可能的排查方向

如果上面的步骤没解决问题,可以检查以下几点:

  • Server的接口上下文路径:如果Server配置了server.servlet.context-path=/api,那接口的实际路径是/api/server,你需要把Client的URL改成http://server-svc:8001/api/server。
  • Server Service与Pod的标签匹配:确认Server Service的selector: app: server和Pod的labels: app: server一致(你的配置里是对的,但可以用kubectl get endpoints server-svc检查是否有Pod关联到Service)。
  • 直接在Client Pod内测试连通性:进入Client Pod执行curl http://server-svc:8001/server,看返回结果。如果还是404,再进入Server Pod执行curl localhost:8080/server(对应实际端口),确认Server自身的接口是否正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:39:10