MacBook上Minikube集群中Pod间连接拒绝问题排查
可能的原因及排查步骤
1. 前端请求地址缺少后端服务端口
前端Deployment的环境变量REACT_APP_DEV_BASE_URL仅设置为backend,但后端Service监听的是7500端口。React应用默认会用80端口发起请求,与后端实际端口不匹配,导致连接被拒绝。
验证操作:进入前端Pod内部测试连接:
kubectl exec -it <前端Pod名称> -- curl backend:7500 # 若此命令能正常返回,说明前端代码中未在请求地址后添加端口
修复方案:修改frontend.yml中的环境变量,补充端口号:
env: - name: REACT_APP_DEV_BASE_URL value: backend:7500
重新部署前端:
kubectl apply -f frontend.yml
2. 后端服务仅绑定本地回环地址
Node.js后端若默认监听127.0.0.1(localhost),则仅能在Pod内部访问,Service无法将外部流量转发到Pod。
验证操作:进入后端Pod查看服务监听地址:
kubectl exec -it <后端Pod名称> -- netstat -tulpn # 确认是否监听在`0.0.0.0:7500`,而非`127.0.0.1:7500`
修复方案:修改后端代码,让服务监听所有网卡:
app.listen(7500, '0.0.0.0', () => { console.log('Server running on port 7500'); });
重新构建后端镜像并更新Deployment。
3. Service与Pod标签不匹配
尽管kubectl get svc显示backend Service的selector为app=backend,仍需确认Pod实际标签是否一致:
kubectl describe pod <后端Pod名称> | grep Labels
若标签不匹配,Service无法找到对应Pod,流量无法转发。
修复方案:确保Deployment的Pod模板标签与Service的selector完全一致,重新应用配置。
4. 后端容器内服务未正常启动
Pod状态显示Running不代表内部服务已成功启动,需查看后端Pod日志排查:
kubectl logs <后端Pod名称>
检查是否存在启动错误(如数据库连接失败),导致服务未监听端口。
5. 集群网络策略限制流量
若集群配置了NetworkPolicy,可能阻止了前端Pod到后端Service的流量:
kubectl get networkpolicy
若存在相关策略,需确认是否允许app=frontend标签的Pod访问app=backend标签Pod的7500端口。
修复方案:添加或修改NetworkPolicy,允许前端到后端的流量:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-frontend-to-backend spec: podSelector: matchLabels: app: backend ingress: - from: - podSelector: matchLabels: app: frontend ports: - protocol: TCP port: 7500
内容的提问来源于stack exchange,提问作者etranz

