如何通过MySQL Workbench访问MicroK8s集群中的MySQL数据库?
访问MicroK8s集群中MySQL的可行方案
方案一:用NodePort暴露服务(适合测试/小规模场景)
这是最直接的方式,不需要额外组件:
- 编辑MySQL的Service配置,把类型改成
NodePort:apiVersion: v1 kind: Service metadata: name: mysql-service spec: type: NodePort ports: - port: 3306 targetPort: 3306 nodePort: 30006 # 可选,指定30000-32767之间的端口,不指定会自动分配 selector: app: mysql # 对应你的MySQL Pod标签 - 应用配置:
kubectl apply -f mysql-service.yaml - 查看分配的端口:
kubectl get svc mysql-service - MySQL Workbench里填MicroK8s节点IP:NodePort(比如
192.168.1.100:30006),用你部署MySQL时设置的账号密码连接。
方案二:用MicroK8s自带LoadBalancer(适合需要固定IP的场景)
MicroK8s集成了MetalLB,启用后能给Service分配固定外部IP:
- 先启用MetalLB:
microk8s enable metallb - 按提示输入可用的IP段(比如
192.168.1.200-192.168.1.210) - 修改MySQL Service的类型为
LoadBalancer:apiVersion: v1 kind: Service metadata: name: mysql-service spec: type: LoadBalancer ports: - port: 3306 targetPort: 3306 selector: app: mysql - 应用后查看分配的IP:
kubectl get svc mysql-service - Workbench直接用这个IP加3306端口连接即可。
方案三:临时端口转发(适合调试)
如果只是临时访问,不需要持久化暴露服务,用端口转发最省事:
- 执行命令:
kubectl port-forward svc/mysql-service 33060:3306 - 本地33060端口会转发到集群内MySQL的3306端口
- Workbench连接
localhost:33060就能访问。
排查之前Ingress失败的问题
如果一定要用Ingress,先检查这几点:
- 确认MicroK8s启用了Ingress插件:
microk8s enable ingress - Ingress配置必须加TCP协议注释,MySQL是TCP服务,HTTP规则不生效:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: mysql-ingress annotations: nginx.ingress.kubernetes.io/backend-protocol: "TCP" # 关键注释,不能少 spec: rules: - host: mysql.yourdomain.com http: paths: - path: / pathType: Prefix backend: service: name: mysql-service port: number: 3306 - 检查Ingress Controller Pod状态:
kubectl get pods -n ingress - 确保本地能解析
mysql.yourdomain.com到MicroK8s节点IP,或者在本地hosts文件手动添加映射。
内容的提问来源于stack exchange,提问作者Uvindu Sahan
相关产品推荐
相关产品推荐

