Kubernetes集群中Flask应用无法连接本地MariaDB求助
问题排查与解决方案
一、Kubernetes Auth服务无法连接本地MariaDB(错误:MySQLdb.OperationalError: (2002, "Can't connect to MySQL server on 'host.minikube.internal' (115)"))
错误码115表示连接操作无法立即完成,核心原因是宿主机的MariaDB未对Kubernetes集群开放访问权限,按以下步骤排查:
修改MariaDB绑定地址
默认MariaDB仅监听127.0.0.1,容器无法通过宿主机IP访问。编辑MariaDB配置文件(通常为/etc/mysql/mariadb.conf.d/50-server.cnf):[mysqld] bind-address = 0.0.0.0 # 或宿主机的实际IP(如192.168.49.1,可通过minikube ip查看)重启MariaDB服务:
sudo systemctl restart mariadb开放宿主机防火墙端口
Debian 12默认启用ufw,需允许3306端口的入站请求:sudo ufw allow 3306/tcp sudo ufw reload授权数据库用户跨网络访问
确保连接MariaDB的用户允许从Kubernetes集群IP段访问,登录MariaDB执行:-- 替换auth_user、your_password、auth_db为实际信息 CREATE USER 'auth_user'@'%' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON auth_db.* TO 'auth_user'@'%'; FLUSH PRIVILEGES;验证Pod内的网络可达性
进入Auth服务的Pod,测试与MariaDB的连接:kubectl exec -it <auth-pod-name> -- /bin/bash # 测试ping宿主机 ping host.minikube.internal # 测试3306端口连通性 telnet host.minikube.internal 3306如果ping不通,改用minikube的实际IP(执行
minikube ip获取)替代host.minikube.internal作为数据库连接地址。
二、自定义域名mp3converter.com的/login接口无法连接(ping正常但curl失败)
ping正常说明域名解析正确,问题出在服务暴露或防火墙规则:
检查Ingress配置(若使用Ingress)
- 确认已启用minikube Ingress插件:
minikube addons enable ingress - 查看Ingress资源状态,确认ADDRESS为minikube IP:
kubectl get ingress - 检查Ingress规则是否正确指向Auth服务的端口(如80),示例Ingress配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: auth-ingress spec: rules: - host: mp3converter.com http: paths: - path: /login pathType: Prefix backend: service: name: auth-service port: number: 80
- 确认已启用minikube Ingress插件:
检查服务暴露方式(NodePort/LoadBalancer)
- 若使用NodePort,需确认curl时加上对应端口:
# 先获取NodePort端口 kubectl get service auth-service # 示例端口为30001,执行 curl mp3converter.com:30001/login - 若使用LoadBalancer,minikube环境下需执行
minikube tunnel获取外部IP。
- 若使用NodePort,需确认curl时加上对应端口:
开放宿主机对应端口
- 若用Ingress,开放80/443端口:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp - 若用NodePort,开放对应端口(如30001):
sudo ufw allow 30001/tcp
- 若用Ingress,开放80/443端口:
验证Auth服务状态
确认Pod正常运行且服务已启动:kubectl get pods kubectl logs <auth-pod-name>检查日志中是否有服务启动失败的报错(如依赖缺失、端口占用)。
内容的提问来源于stack exchange,提问作者kashish patel
相关产品推荐
相关产品推荐

