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

Kubernetes部署Node应用遇问题:服务'gceme-frontend'未找到

解决Kubernetes中"services 'gceme-frontend' not found" 404错误

看起来你在把Go应用的CI/CD流程迁移到Node.js应用时踩了几个配置小坑,我帮你梳理下核心问题和修复步骤:

1. 先确认服务是否真的部署在了目标命名空间

你的错误提示明确说找不到gceme-frontend服务,首先要排查这个服务有没有被正确创建在Jenkins为开发分支生成的命名空间里。

登录到你的K8s集群,执行命令:

kubectl --namespace=<你的开发分支名称> get services

如果输出里完全看不到gceme-frontend,说明服务部署环节出了问题,可能的原因:

  • Jenkinsfile里指定的k8s/services/路径不对,导致kubectl找不到yaml文件
  • frontend.yaml存在语法错误,kubectl拒绝创建服务(可以单独拿出来用kubectl apply --dry-run=client -f frontend.yaml验证语法)

2. 修复Deployment的致命语法错误

我注意到你的frontend-dev.yaml里replicas:字段是空的——这是无效的Kubernetes配置,必须指定具体的副本数(比如replicas: 1)。这个错误会导致Deployment无法创建Pod,即使服务最终能创建,后续也会出现端点不可用的问题,先把这个补上:

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: gceme-frontend-dev
spec:
  replicas: 1  # 这里必须填数值,比如1
  template:
    # 剩下的配置保持不变

3. 验证服务选择器与Pod标签的匹配性

好在你的服务选择器和Pod标签是匹配的:

  • 服务选择器:app: gceme, role: frontend
  • Pod标签:app: gceme, role: frontend, env: dev

Kubernetes的服务选择器只需要匹配部分标签,不需要完全一致,所以这部分没问题,后续如果遇到"no endpoints available"再回来确认这点。

4. 检查Jenkinsfile的配置修改逻辑

Jenkinsfile里把开发环境的服务类型从LoadBalancer改成了ClusterIP,这个操作是对的,但要确保sed命令正确修改了文件。你可以在Jenkins的构建日志里查看修改后的frontend.yaml内容,确认type: ClusterIP是否生效。

另外,确认sed替换镜像的命令是否正确指向了k8s/dev/*.yaml——你的Deployment确实在dev目录下,这点没问题。

5. 用正确的URL访问ClusterIP服务

因为开发环境是ClusterIP类型的服务,不能直接通过外部IP访问,必须用kubectl proxy,正确的访问URL应该是:

http://localhost:8001/api/v1/namespaces/<你的分支名>/services/gceme-frontend:http/proxy/

注意这里的:http是对应你服务里定义的端口名称(name: http),而不是随便写的端口号,之前你写的${feSvcName}:80/如果feSvcName是gceme-frontend,其实也能工作,但用端口名称更规范。

快速验证流程

  1. 修复frontend-dev.yaml的replicas字段
  2. 重新触发Jenkins构建
  3. 构建完成后执行kubectl --namespace=<分支名> get pods,services,确认Pod处于Running状态,服务存在
  4. 启动kubectl proxy,用上面的URL访问服务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:03:23