使用MaxScale连接MariaDB遇超时及权限拒绝问题求助
解决MaxScale连接MariaDB的替代方法及问题排查
一、集群内可用的替代连接方式
1. 直接通过MaxScale Pod IP连接
先获取MaxScale Pod的IP:
kubectl get pods mariadb-galera-maxscale-0 -o jsonpath='{.status.podIP}'
替换<POD_IP>后执行连接命令:
kubectl run mariadb --rm -it --image=mariadb:10.6 -- bash -c "mariadb -h <POD_IP> -P3306 -u mariadb -p'xxxxxxx'"
2. 创建临时ClusterIP服务(绕过MetalLB问题)
当前LoadBalancer服务因MetalLB配置错误无法分配IP,可临时创建ClusterIP服务指向MaxScale:
apiVersion: v1 kind: Service metadata: name: maxscale-clusterip namespace: default spec: selector: app.kubernetes.io/instance: mariadb-galera-maxscale app.kubernetes.io/name: maxscale ports: - protocol: TCP port: 3306 targetPort: 3306
执行kubectl apply -f <上述文件名>后,用新服务名连接:
kubectl run mariadb --rm -it --image=mariadb:10.6 -- bash -c "mariadb -h maxscale-clusterip.default.svc.cluster.local -P3306 -u mariadb -p'xxxxxxx'"
3. 本地端口转发临时连接
如果需要从集群外部/本地调试,用端口转发暴露MaxScale端口:
kubectl port-forward pod/mariadb-galera-maxscale-0 3306:3306
保持窗口打开,在本地终端执行连接:
mariadb -h 127.0.0.1 -P3306 -u mariadb -p'xxxxxxx'
二、根源问题排查与修复
1. 修复MetalLB IP分配错误
从kubectl describe svc的警告可知,指定的172.18.0.229不在MetalLB的可用IP池范围内,需:
- 修改MetalLB配置,将
172.18.0.229加入允许的IP池 - 或删除服务的
metallb.universe.tf/loadBalancerIPs注释,让MetalLB自动分配可用IP
2. 解决MaxScale代理的权限问题
Pod日志的Access denied提示需检查两点:
- 在MariaDB后端节点执行,授予用户跨网段连接权限:
GRANT ALL PRIVILEGES ON *.* TO 'mariadb'@'10.244.%' IDENTIFIED BY 'xxxxxxx'; FLUSH PRIVILEGES; - 检查MaxScale配置,确认
readwritesplit等服务正确指向后端MariaDB节点,且代理规则未拦截用户认证
内容的提问来源于stack exchange,提问作者Saurav K
相关产品推荐
相关产品推荐

