3、接入层故障排查(二):DNS与证书
域名解析失败、SSL/TLS证书过期或配置错误导致的访问中断问题
在IDP自助门户的接入层中,DNS(域名系统)与SSL/TLS证书是用户请求到达门户前的两道关键关卡。DNS负责将用户友好的域名解析为后端IP地址,而证书则负责加密通信与身份验证。任何一环节出现故障,都会直接导致用户无法访问门户或触发安全警告。本章聚焦于这两类故障的根因定位与修复方法。
3.1 DNS解析故障:症状与根因
DNS解析失败通常表现为用户在浏览器中输入域名后长时间无响应,或收到“无法找到服务器”的错误。在IDP自助门户场景下,DNS故障可能发生在多个层级:公共DNS、内部DNS服务器、或Kubernetes集群内的CoreDNS。
| 故障类型 | 典型症状 | 常见根因 |
|---|---|---|
| 域名未注册/过期 | nslookup返回NXDOMAIN | 域名注册商处未续费或记录被删除 |
| DNS记录配置错误 | 解析到错误的IP地址 | A记录/CNAME记录指向已废弃的负载均衡器 |
| DNS缓存污染 | 部分用户可访问,部分不可 | 公共DNS或本地DNS缓存了过期记录 |
| 内部DNS解析失败 | 集群内服务名无法解析 | CoreDNS配置错误或上游DNS不可达 |
| TTL设置不合理 | 变更后长时间不生效 | TTL值设置过长(如24小时) |
排查命令速查:
nslookup portal.idp.company.com — 基础解析测试dig +trace portal.idp.company.com — 递归追踪解析路径kubectl exec -it pod-name -- nslookup service-name.namespace.svc.cluster.local — 集群内服务解析测试
3.2 SSL/TLS证书故障:症状与根因
证书问题通常表现为浏览器显示“连接不安全”或“NET::ERR_CERT_DATE_INVALID”。在IDP门户中,证书管理涉及证书颁发、自动续期、以及正确的挂载配置。
| 故障类型 | 典型症状 | 常见根因 |
|---|---|---|
| 证书过期 | 浏览器提示证书已过期 | 未配置自动续期或续期失败 |
| 证书域名不匹配 | 证书CN/SAN与访问域名不一致 | 使用了通配符证书但子域名未覆盖 |
| 证书链不完整 | 中间证书未正确部署 | 仅部署了叶证书,缺少CA中间证书 |
| 证书私钥不匹配 | SSL握手失败 | 证书与私钥不配对或私钥被加密 |
| 证书被吊销 | OCSP响应显示已吊销 | 私钥泄露或CA主动吊销 |
⚠️ 关键提醒: 在Kubernetes环境中,证书通常通过Secret对象挂载到Ingress Controller或Gateway API。务必检查Secret的base64编码是否正确,以及证书和私钥的格式是否为PEM。
3.3 DNS与证书故障排查流程
下图展示了从用户访问失败到根因定位的完整排查路径。该流程将DNS与证书问题串联起来,帮助运维人员按步骤缩小故障范围。
3.4 实战案例:证书过期导致IDP门户中断
场景描述:某日,用户反馈无法访问IDP自助门户,浏览器显示“NET::ERR_CERT_DATE_INVALID”。运维团队立即介入排查。
- 初步验证:使用
openssl s_client -connect portal.idp.company.com:443 -servername portal.idp.company.com 2>/dev/null | openssl x509 -noout -dates确认证书有效期。 - 根因定位:发现证书已于前一天过期。检查cert-manager日志,发现Let's Encrypt的HTTP-01挑战因Ingress网络策略限制而失败。
- 临时修复:手动申请新证书并更新Kubernetes Secret:
kubectl create secret tls portal-tls \ --cert=/tmp/new-cert.pem \ --key=/tmp/new-key.pem \ --dry-run=client -o yaml | kubectl apply -f - - 长期修复:调整cert-manager的ClusterIssuer配置,添加正确的网络策略白名单,并设置续期提醒。
💡 最佳实践: 建议将证书过期监控纳入IDP门户的SLO体系。使用Prometheus Exporter定期检查证书剩余有效期,并在到期前14天、7天、1天分别发送告警。
3.5 证书链验证与常见错误
证书链不完整是仅次于过期的常见问题。许多运维人员只部署了叶证书,而忽略了中间CA证书,导致部分客户端(尤其是移动端)无法建立信任。
| 验证命令 | 预期输出 | 异常表现 |
|---|---|---|
openssl s_client -connect host:443 -showcerts |
显示完整的证书链(3个证书) | 仅显示1个证书,缺少中间CA |
openssl verify -CAfile ca-bundle.crt cert.pem |
返回 cert.pem: OK |
返回 unable to get local issuer certificate |
curl -vI https://portal.idp.company.com |
SSL连接成功,返回HTTP状态码 | SSL握手错误或证书警告 |
⚠️ 常见陷阱: 在Kubernetes Ingress中,如果使用
tls字段引用Secret,请确保Secret中的tls.crt包含完整的证书链(叶证书 + 中间证书),而不仅仅是叶证书。错误的拼接顺序会导致Ingress Controller拒绝加载证书。
3.6 自动化证书管理方案
在IDP自助门户架构中,推荐使用cert-manager实现证书的自动申请与续期。下图展示了cert-manager与Ingress Controller的协作关系。
3.7 本章小结
- DNS故障是接入层最常见的问题之一,排查时应从公共DNS、内部DNS、集群DNS三个层面逐级检查。
- 证书故障包括过期、域名不匹配、链不完整、私钥错误等,使用
openssl s_client和curl -vI可快速定位。 - 自动化管理是减少人为失误的关键,推荐在IDP门户中部署cert-manager并配置自动续期。
- 监控与告警应覆盖证书剩余有效期和DNS解析成功率,确保在故障发生前提前介入。