普通网友 2025-11-27 16:49 采纳率: 0%
浏览 3

K8s环境中MySQL外部访问连接失效的问题

我们这边使用k8s部署的开发环境(单master节点,master节点同时作为工作节点),其中MySQL也是使用k8s部署的
现在的问题是,从外部访问MySQL(8.3.0版本)的时候会出现连接持续一段时间后就失效了,具体现象是查询会有很长的超时等待,重新建立连接后恢复。

这个问题只有从外部访问MySQL的时候会出现,我们把应用部署到k8s中,应用通过k8s的集群内网连接不会出现这个问题。

外部访问是通过NodePort端口访问的,内部访问是通过Headless访问的。

同样方式部署在开发环境的Redis不会有这个问题。

问题补充:
补充:
MySQL只部署了1个pod。

目前发现问题应该是和NodePort有关,因为尝试直接用hostPort的方式访问的时候问题就消失了。

所以现在的问题是,NodePort这里发生了什么?同样使用NodePort端口访问的Redis没有这个问题

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-11-27 17:07
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题分析

    • 您的K8s环境中部署了MySQL 8.3.0版本。
    • 从外部访问MySQL时,连接会持续一段时间后失效。
    • 环境中使用单master节点,master节点同时作为工作节点。

    可能原因

    1. K8s服务类型: MySQL服务可能使用的是ClusterIP类型,这意味着外部无法直接访问MySQL服务。
    2. 负载均衡: 如果使用了负载均衡器,可能导致连接失效。
    3. 连接超时: MySQL连接超时可能导致连接失效。
    4. K8s网络配置: K8s网络配置可能导致外部访问MySQL时连接失效。

    解决方案

    1. 使用NodePort或LoadBalancer类型的服务: 将MySQL服务类型改为NodePort或LoadBalancer,允许外部访问MySQL服务。
    2. 配置负载均衡器: 如果使用了负载均衡器,请检查其配置是否正确。
    3. 调整连接超时: 调整MySQL连接超时时间,确保连接不被中断。
    4. 检查K8s网络配置: 检查K8s网络配置是否正确,确保外部可以访问MySQL服务。

    核心代码

    apiVersion: v1
    kind: Service
    metadata:
      name: mysql
    spec:
      selector:
        app: mysql
      ports:
      - name: mysql
        port: 3306
        targetPort: 3306
      type: LoadBalancer
    

    请根据您的实际情况调整上述配置。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月27日