Flask除法微服务部署Kubernetes遇连接拒绝(net::ERR_CONNECTION_REFUSED)
解决Minikube中除法微服务连接拒绝问题
针对你部署到Minikube的除法微服务出现net::ERR_CONNECTION_REFUSED的问题,按以下步骤排查修复:
1. 修正Flask服务绑定地址
默认情况下,Flask的app.run(port=5004)仅绑定127.0.0.1,容器内仅能本地访问,Kubernetes无法转发外部请求。修改代码中的启动行:
if __name__ == '__main__': app.run(host='0.0.0.0', port=5004)
重新构建Docker镜像并推送至仓库。
2. 使用正确的Minikube访问方式
NodePort服务不能直接用localhost:5004访问,需通过Minikube节点IP+分配的NodePort端口访问:
- 执行命令直接获取服务访问URL:
用输出的URL拼接路径minikube service divide-service-py --url/divide?num1=10&num2=2即可访问。 - 或手动获取NodePort:
查看输出中kubectl get service divide-service-pyPORT(S)列的第二个端口(格式为5004:3XXXX/TCP,3XXXX即为NodePort),然后访问$(minikube ip):3XXXX/divide?num1=10&num2=2。
3. 验证容器内服务可用性
进入运行中的Pod,测试服务是否正常响应:
kubectl exec -it $(kubectl get pods -l app=divide-service-py -o jsonpath='{.items[0].metadata.name}') -- /bin/bash
在容器内执行:
curl localhost:5004/divide?num1=8&num2=2
若返回正确的JSON结果,说明容器内服务正常;否则检查代码或依赖安装是否存在问题。
4. 确认Docker镜像正确性
本地先测试镜像是否正常运行:
docker run -p 5004:5004 katzir/divide-py:latest
在本地访问localhost:5004/divide?num1=6&num2=3,确认服务正常后再推送到镜像仓库。
5. 检查Kubernetes资源状态
- 确认Pod处于Running状态:
kubectl get pods - 查看Pod事件,排查启动异常:
kubectl describe pod $(kubectl get pods -l app=divide-service-py -o jsonpath='{.items[0].metadata.name}') - 确认Service的Selector与Pod的Labels完全匹配(你的配置中已匹配
app: divide-service-py,可忽略此步)。
内容的提问来源于stack exchange,提问作者Adar Katzir
相关产品推荐
相关产品推荐

