如何在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端口限制
- 编辑配置文件:
/var/snap/microk8s/current/args/kube-apiserver - 找到
--service-node-port-range参数,修改为--service-node-port-range=8000-32767 - 重启Microk8s生效:
microk8s stop && microk8s start - 将上述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
相关产品推荐
相关产品推荐

