Kubernetes部署Node应用遇问题:服务'gceme-frontend'未找到
看起来你在把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,其实也能工作,但用端口名称更规范。
快速验证流程
- 修复
frontend-dev.yaml的replicas字段 - 重新触发Jenkins构建
- 构建完成后执行
kubectl --namespace=<分支名> get pods,services,确认Pod处于Running状态,服务存在 - 启动
kubectl proxy,用上面的URL访问服务
内容的提问来源于stack exchange,提问作者Artem Zakharov

