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

如何在Kubernetes中暴露MariaDB?Microk8s单节点部署连接失败如何解决

问题核心原因

  • 宿主机直接访问3306失败:Deployment中声明的containerPort仅为端口标识,没有做宿主机到Pod的端口映射,Pod默认运行在K8s集群私有网络,宿主机无法直接访问Pod端口
  • Service暴露8081后无法访问:Service的端口配置错误,MariaDB实际监听3306端口,需要将Service的目标端口指向3306,不能直接将服务端口和目标端口都设为8081,同时Microk8s默认NodePort端口范围为30000-32767,8081不在默认允许范围内

具体配置方案

方案1:临时宿主机直连测试

如果仅需要在单节点宿主机上直接访问3306端口,可以直接修改Deployment配置,新增hostPort映射:

# 其余配置和你现有配置保持一致,只修改ports段
ports:
- containerPort: 3306
  hostPort: 3306 # 新增该行,将Pod的3306端口直接映射到宿主机3306端口

执行microk8s kubectl apply -f <你的deployment文件名>生效后,即可直接用宿主机IP:3306访问MariaDB,该方式仅限测试使用,不推荐生产环境部署。

方案2:通过Service对外暴露(推荐)

第一步:配置Service
apiVersion: v1
kind: Service
metadata:
  name: mariadb-svc
spec:
  type: NodePort
  selector:
    app: mariadb # 必须和Deployment中Pod的标签完全匹配
  ports:
    - protocol: TCP
      port: 3306 # 集群内部访问Service的端口
      targetPort: 3306 # 必须对应Pod的containerPort,即MariaDB实际监听的端口
      nodePort: 30081 # 宿主机暴露端口,默认范围30000-32767,配置后可通过宿主机IP:30081访问
第二步:如果需要自定义暴露为8081端口,需先放开Microk8s端口限制
  1. 编辑配置文件:/var/snap/microk8s/current/args/kube-apiserver
  2. 找到--service-node-port-range参数,修改为--service-node-port-range=8000-32767
  3. 重启Microk8s生效:microk8s stop && microk8s start
  4. 将上述Service配置中的nodePort值改为8081后apply即可
临时端口转发测试

不需要修改配置的快速测试方式,执行命令:
microk8s kubectl port-forward service/mariadb-svc 8081:3306
执行后即可直接通过127.0.0.1:8081连接MariaDB。


访问校验

  • 集群内服务访问:用mariadb-svc.default.svc.cluster.local:3306连接
  • 外部/宿主机访问:用宿主机IP:<你配置的nodePort端口>连接,访问前确认宿主机防火墙没有封禁对应端口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:06:04