You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes集群中Flask应用无法连接本地MariaDB求助

问题排查与解决方案

一、Kubernetes Auth服务无法连接本地MariaDB(错误:MySQLdb.OperationalError: (2002, "Can't connect to MySQL server on 'host.minikube.internal' (115)"))

错误码115表示连接操作无法立即完成,核心原因是宿主机的MariaDB未对Kubernetes集群开放访问权限,按以下步骤排查:

  1. 修改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
    
  2. 开放宿主机防火墙端口
    Debian 12默认启用ufw,需允许3306端口的入站请求:

    sudo ufw allow 3306/tcp
    sudo ufw reload
    
  3. 授权数据库用户跨网络访问
    确保连接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;
    
  4. 验证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正常说明域名解析正确,问题出在服务暴露或防火墙规则:

  1. 检查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
      
  2. 检查服务暴露方式(NodePort/LoadBalancer)

    • 若使用NodePort,需确认curl时加上对应端口:
      # 先获取NodePort端口
      kubectl get service auth-service
      # 示例端口为30001,执行
      curl mp3converter.com:30001/login
      
    • 若使用LoadBalancer,minikube环境下需执行minikube tunnel获取外部IP。
  3. 开放宿主机对应端口

    • 若用Ingress,开放80/443端口:
      sudo ufw allow 80/tcp
      sudo ufw allow 443/tcp
      
    • 若用NodePort,开放对应端口(如30001):
      sudo ufw allow 30001/tcp
      
  4. 验证Auth服务状态
    确认Pod正常运行且服务已启动:

    kubectl get pods
    kubectl logs <auth-pod-name>
    

    检查日志中是否有服务启动失败的报错(如依赖缺失、端口占用)。

内容的提问来源于stack exchange,提问作者kashish patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:16:13