AKS集群跨命名空间部署GLPI无法连接MariaDB求助
跨命名空间连接MariaDB失败的排查与解决建议
一、验证跨命名空间DNS解析与端口连通性
- 进入GLPI Pod内部,执行
nslookup db1-service.database1.svc.cluster.local,确认能解析到对应Service的ClusterIP。若解析失败,检查CoreDNS组件状态,或确认服务名称、命名空间拼写是否正确。 - 解析正常的话,执行
telnet db1-service.database1.svc.cluster.local 3306(替换为你的MariaDB实际端口),测试端口是否能连通。
二、检查MariaDB Service配置
- 确认Service的
spec.selector与MariaDB Pod的标签完全匹配,确保服务能正确关联到Pod。 - 核对
spec.ports配置:port(集群内访问端口)和targetPort(Pod内MariaDB监听端口)需保持一致,默认MariaDB端口为3306,避免端口不匹配。
三、确认MariaDB Pod的监听配置
- 进入MariaDB Pod,执行
netstat -tulpn | grep mysqld,确认进程监听地址为0.0.0.0:3306,而非仅127.0.0.1(仅本地监听会导致跨Pod无法连接)。 - 查看MariaDB配置文件(通常在
/etc/mysql/mariadb.conf.d/50-server.cnf),检查bind-address参数是否设为0.0.0.0,若为127.0.0.1则修改后重启Pod。
四、修正MariaDB权限设置
- 不要用初始化容器硬改权限(易导致Pod启动失败),直接进入运行中的MariaDB Pod,执行以下SQL命令创建允许跨命名空间访问的用户:
注:mysql -u root -p CREATE USER 'glpi_user'@'%' IDENTIFIED BY '你的数据库密码'; GRANT ALL PRIVILEGES ON glpi_db.* TO 'glpi_user'@'%'; FLUSH PRIVILEGES;%允许所有来源访问,测试通过后可改为GLPI命名空间的Pod CIDR以提升安全性。
五、排查网络策略限制
- 检查database1命名空间是否存在NetworkPolicy,若有需添加允许glpi-one命名空间访问的规则:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-glpi-access namespace: database1 spec: podSelector: matchLabels: app: mariadb # 替换为你的MariaDB Pod标签 ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: glpi-one ports: - protocol: TCP port: 3306 - 确认AKS集群网络插件(如Azure CNI)未限制跨命名空间Pod到Service的流量。
六、直接从GLPI Pod测试数据库连接
- 若GLPI镜像未预装mysql客户端,可执行
apt update && apt install -y mysql-client(Debian/Ubuntu镜像)安装,然后执行:
根据报错精准排查:mysql -u glpi_user -p -h db1-service.database1.svc.cluster.local glpi_dbAccess denied为权限问题,Connection refused为网络/监听问题,Unknown database需确认数据库是否已创建。
内容的提问来源于stack exchange,提问作者Dunvael
相关产品推荐
相关产品推荐

