phpMyAdmin Ingress 必须匹配 MySQL Service 名称和命名空间,backend.service.name 必须严格等于 MySQL Service 名(如 mysql)且同 namespace,跨 namespace 时需用全限定域名 mysql.default.svc.cluster.local,否则出现 502 或 “Connection refused”。
phpMyAdmin Ingress 必须匹配 Service 名称和命名空间
phpmyadmin 连不上 mysql 的根本原因,90% 出现在 ingress 的 backend.service.name 指向错误——它必须严格等于 mysql 的 service 名(如 mysql),且两者必须在同一个 namespace;若跨 namespace,得写成 mysql.default.svc.cluster.local。
常见错误现象:502 Bad Gateway 或 phpMyAdmin 页面报 “Connection refused”;检查 kubectl logs -n ingress-nginx ingress-nginx-controller 通常能看到 upstream connect error 或 no endpoints found。
- 确认 MySQL Service 存在且 ready:
kubectl get svc -n default(假设部署在 default ns) - Ingress 中的
service.name字段不能填 Pod 名、Deployment 名或 IP - 如果 phpMyAdmin 和 MySQL 不在同一 namespace,Ingress 的
service.name必须用全限定域名(FQDN),否则 DNS 解析失败
Ingress 路径配置要匹配 phpMyAdmin 的实际访问路径
phpMyAdmin 默认根路径是 /,但如果你用的是带子路径的部署(比如通过 subPath 挂载或反向代理前置),Ingress 的 path 就必须对齐,否则会 404 或静态资源加载失败。
典型场景:你把 phpMyAdmin 部署在 http://example.com/phpmyadmin,那 Ingress 的 path 得写成 /phpmyadmin,且需配合 nginx.ingress.kubernetes.io/rewrite-target: / 注解,否则 PHP 脚本内部重定向会出错。
-
pathType: Prefix是安全选择;Exact容易漏掉/index.php等子请求 - 若使用 rewrite,
rewrite-target值必须是/(单斜杠),不是"/"字符串字面量 - 不加 rewrite 注解时,phpMyAdmin 的
$cfg['PmaAbsoluteUri']必须设为完整路径(如https://example.com/phpmyadmin/),否则链接生成错误
PHPMYADMIN_ABSOLUTE_URI 和 Ingress TLS 配置必须协同
Ingress 本身不改应用逻辑,但 phpMyAdmin 依赖 PHPMYADMIN_ABSOLUTE_URI 环境变量生成正确跳转链接。如果 Ingress 启用了 TLS 终止,而该变量仍设为 http://,就会触发混合内容警告甚至重定向死循环。
立即学习“PHP免费学习笔记(深入)”;
常见错误现象:登录后页面空白、JS 报 CORS 错误、反复重定向到 http:// 地址。
- 务必在 phpMyAdmin 的 Deployment 中设置:
PHPMYADMIN_ABSOLUTE_URI: https://your-domain.com/(注意末尾斜杠) - Ingress 的
spec.tls块中hosts列表必须包含该域名,且secretName对应的 TLS Secret 已存在 - 若用 Let’s Encrypt,推荐 cert-manager +
cert-manager.io/issuer注解,避免手动更新证书
别忽略 Ingress Controller 的健康检查与超时设置
phpMyAdmin 执行 SQL 导出或大查询时可能耗时较长,默认的 Ingress 超时(60 秒)会导致连接中断,表现为下载中断或“Gateway Timeout”。
这不是 phpMyAdmin 代码问题,而是 Nginx Ingress Controller 的 upstream timeout 限制。
- 在 Ingress 的 annotations 中加:
nginx.ingress.kubernetes.io/proxy-read-timeout: "300" - 同步加:
nginx.ingress.kubernetes.io/proxy-send-timeout: "300" - 如果 phpMyAdmin 后端 Pod 有就绪探针(liveness/readiness),确保其
initialDelaySeconds≥ 10,避免 Ingress controller 在启动阶段误判为不可用
最易被忽略的是:Ingress 的 host 域名未被 DNS 解析到 Ingress Controller 的 LoadBalancer 或 NodePort IP —— 此时浏览器连 TCP 握手都失败,但日志里却看不到任何 upstream 记录。先 ping 和 curl -v http://your-domain.com --resolve 排查网络层。



















