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

OpenShift Pod连接外部MySQL数据库失败问题求助

OpenShift 4 Pod无法连接外部MySQL服务器的问题

我正尝试在OpenShift 4(本地使用CRC测试)上创建一个通用Pod,以连接运行在集群外独立VM上的MySQL服务器,但部署后无法从Pod内部连接到该MySQL服务器。

部署配置

kind: "Service"
apiVersion: "v1"
metadata:
  name: "mysql"
spec:
  ports:
    - name: "mysql"
      protocol: "TCP"
      port: 3306
      targetPort: 3306 
      nodePort: 0
selector: {}
---
kind: "Endpoints"
apiVersion: "v1"
metadata:
  name: "mysql" 
subsets: 
  - addresses:
      - ip: "***ip of host with mysql database on it***" 
    ports:
      - port: 3306 
        name: "mysql"
---
apiVersion: v1
kind: DeploymentConfig
metadata:
  name: "deployment"
spec: 
  template:
    metadata:
      labels:
        name: "mysql"
    spec:
      containers:
        - name: "test-mysql"
          image: "***image repo with docker image that has mysql package installed***"
          ports:
            - containerPort: 3306
              protocol: "TCP"
          env:
            - name: "MYSQL_USER"
              value: "user" 
            - name: "MYSQL_PASSWORD"
              value: "******" 
            - name: "MYSQL_DATABASE"
              value: "mysql_db"  
            - name: "MYSQL_HOST"
              value: "***ip of host with mysql database on it***" 
            - name: "MYSQL_PORT"
              value: "3306"  

测试步骤与错误

我使用的是预装了net-tools、openjdk等标准软件包的测试镜像,通过以下命令进入Pod:

$ oc rsh {{ deployed pod name }}

执行连接命令后无法成功:

$ mysql --host **hostname** --port 3306 -u user -p

得到的错误信息:

ERROR 2003 (HY000): Can't connect to MySQL server on '**hostname**:3306' (111)

补充测试情况:

  • 尝试通过Service创建Route,用FQDN替代IP连接,仍然失败
  • Pod内部ping该MySQL主机不通,但能正常ping通google.com、github.com等外部站点
  • 集群外可以正常访问该MySQL主机

镜像Dockerfile参考

FROM ubi:8.0

RUN dnf install -y python3 \
                   wget \
                   java-1.8.0-openjdk \ 
                   https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm \
                   postgresql-devel

WORKDIR /tmp


RUN wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm && \
    rpm -ivh mysql-community-release-el7-5.noarch.rpm && \
    dnf update -y && \
    dnf install mysql -y && \
    wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.48.tar.gz && \
    tar zxvf mysql-connector-java-5.1.48.tar.gz && \
    mkdir -p /usr/share/java/ && \
    cp mysql-connector-java-5.1.48/mysql-connector-java-5.1.48-bin.jar /usr/share/java/mysql-connector-java.jar

RUN dnf install -y tcping \
                   iputils \
                   net-tools 

排查与解决建议

  • 网络连通性排查

    • 检查CRC集群的NetworkPolicy:默认OpenShift可能限制Pod出站流量,确认是否有策略阻止访问MySQL主机的3306端口
    • 检查MySQL主机防火墙:确保3306端口允许CRC集群节点的IP访问(Pod出站流量由节点IP转发)
    • 确认网络路由:确保CRC虚拟网络与MySQL VM的网络处于同一网段或路由可达
  • MySQL配置检查

    • 修改bind-address:默认MySQL仅绑定127.0.0.1,需改为0.0.0.0或允许CRC集群IP段访问
    • 验证用户权限:确保user账号允许从Pod所在IP段或任意地址连接(如执行GRANT ALL ON mysql_db.* TO 'user'@'%' IDENTIFIED BY 'password';)
  • Service/Endpoints优化

    • 将DeploymentConfig中的MYSQL_HOST改为Service名称mysql,Pod可通过Kubernetes内部DNS解析到外部MySQL IP,无需直接使用硬编码IP
  • 精准测试连通性

    • 在Pod内使用tcping <mysql-ip> 3306测试端口连通性(ping可能被防火墙拦截,但端口可能开放)
    • 确认mysql客户端与外部MySQL服务器版本兼容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:20:36