Windows下Minikube集群异常:Web应用无法加载
问题排查:Minikube部署Node.js应用无法访问
环境与问题概述
- 本地使用Minikube(Docker驱动)搭建Kubernetes集群
- 本地无法构建镜像,将应用镜像上传至Docker Hub后从集群拉取使用
- 集群及应用部署完成,但访问对应地址无任何内容返回,尝试NodePort/LoadBalancer/ClusterIP三种Service类型均未解决问题
用到的代码文件
app.js
const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => res.send('Hello World!')); app.listen(port, () => console.log(`App listening at http://localhost:${port}`));
Dockerfile
FROM node:14 WORKDIR /usr/src/app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD ["node", "app.js"]
deployment.yaml
apiVersion: v1 kind: Service metadata: name: my-node-app-service spec: selector: app: my-node-app ports: - protocol: TCP port: 80 targetPort: 3000 type: nodePort --- apiVersion: apps/v1 kind: Deployment metadata: name: my-node-app-deployment spec: replicas: 2 selector: matchLabels: app: my-node-app template: metadata: labels: app: my-node-app spec: containers: - name: my-node-app image: hub-acc/my-node-app:latest
package.json
{ "name": "my-node-app", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "express": "^4.18.2" } }
执行步骤
- 镜像推送至Docker Hub:
docker tag my-node-app:latest name/my-node-app:latest docker push name/my-node-app:latest - 部署应用到Minikube:
kubectl apply -f deployment.yaml # 注:此命令在minikube启动前执行无效,后续已重新执行 minikube start kubectl apply -f deployment.yaml - 获取服务访问链接:
minikube service my-node-app-service --url
当前状态
执行kubectl get services输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-node-app-service NodePort 10.107.246.196 <none> 80:32720/TCP 9h
打开生成的链接后无任何内容显示。
排查建议
- 检查Pod运行状态:执行
kubectl get pods确认Pod是否处于Running状态。若为CrashLoopBackOff或Error,执行kubectl logs <pod-name>查看容器日志,定位启动失败原因。 - 验证镜像可用性:确认deployment.yaml中的镜像地址
hub-acc/my-node-app:latest正确,本地执行docker pull hub-acc/my-node-app:latest测试镜像是否可正常拉取。 - 修正应用监听地址:app.js中
app.listen(port)默认仅监听容器内localhost,外部无法访问。需修改为监听0.0.0.0:
重新构建、推送镜像后重新部署应用。app.listen(port, '0.0.0.0', () => console.log(`App listening at http://0.0.0.0:${port}`)); - 测试集群内部访问:进入集群内任意Pod,执行
curl my-node-app-service:80,判断是服务转发问题还是外部访问路径问题。 - 直接访问NodePort端口:执行
minikube ip获取节点IP,访问http://<minikube-ip>:32720(对应Service的NodePort端口),验证是否能正常返回内容。
内容的提问来源于stack exchange,提问作者Dulana
相关产品推荐
相关产品推荐

