ArgoCD部署成功但无法访问Kubernetes服务问题排查求助
问题排查:ArgoCD部署后服务无法访问
核心问题定位
从你提供的信息中,能直接发现端口不匹配的关键矛盾:
- Kubernetes Service
whale的TargetPort配置为80,但你的Dockerfile声明EXPOSE 3000,且Node.js应用默认监听3000端口(除非代码修改) - Endpoints显示已关联Pod的80端口,但Pod内的应用并未在该端口提供服务
排查与修复步骤
1. 验证Pod内应用的实际监听端口
先确认应用确实运行在3000端口:
# 替换为你的whale Pod名称 kubectl exec -it <whale-pod-name> -- /bin/sh # 容器内执行curl测试 curl localhost:3000 # 或者查看端口监听状态 netstat -tulpn | grep node
如果curl能返回应用内容,说明应用确实在3000端口提供服务。
2. 修正Deployment的容器端口配置
检查ArgoCD关联代码仓库中的Deployment YAML,确保容器端口设置为3000:
containers: - name: whale image: hcwxd/kubernetes-demo:<你的镜像标签> ports: - containerPort: 3000 # 必须与应用实际监听端口一致
3. 修正Service的TargetPort配置
修改Service的targetPort,使其与容器端口匹配:
spec: ports: - port: 80 # Service在集群内对外暴露的端口 targetPort: 3000 # 指向容器实际监听的端口
4. 同步ArgoCD应用
触发ArgoCD同步,让新配置生效:
argocd app sync whale
5. 验证访问
集群内可直接用Service IP测试:
curl 10.104.41.34:80
若需要外部访问,可将Service类型改为NodePort/LoadBalancer,或配置Ingress规则。
额外注意点
- Dockerfile中的
EXPOSE仅为声明,不影响应用实际监听端口,需以代码中的端口配置为准(可查看源码仓库的index.js确认) - 若修改后仍无法访问,可检查Pod的日志:
kubectl logs <whale-pod-name>,确认应用是否正常启动
内容的提问来源于stack exchange,提问作者Howard
相关产品推荐
相关产品推荐

