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与证书问题串联起来,帮助运维人员按步骤缩小故障范围。

DNS与证书故障排查流程图 DNS与证书故障排查流程 用户访问失败 步骤1:DNS解析检查 nslookup / dig / 集群内CoreDNS状态 DNS正常? DNS异常 排查方向: • 域名注册状态 • DNS记录配置 • 缓存/TTL策略 DNS正常 步骤2:SSL/TLS证书检查 openssl s_client / cert-manager状态 证书有效? 证书异常 排查方向: • 证书过期时间 • 域名匹配检查 • 证书链完整性 证书正常 检查后端服务与网络

3.4 实战案例:证书过期导致IDP门户中断

场景描述:某日,用户反馈无法访问IDP自助门户,浏览器显示“NET::ERR_CERT_DATE_INVALID”。运维团队立即介入排查。

  1. 初步验证:使用openssl s_client -connect portal.idp.company.com:443 -servername portal.idp.company.com 2>/dev/null | openssl x509 -noout -dates确认证书有效期。
  2. 根因定位:发现证书已于前一天过期。检查cert-manager日志,发现Let's Encrypt的HTTP-01挑战因Ingress网络策略限制而失败。
  3. 临时修复:手动申请新证书并更新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 -
  4. 长期修复:调整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的协作关系。

cert-manager自动证书管理架构 cert-manager自动证书管理架构 Let's Encrypt / 内部CA 证书颁发机构 cert-manager ClusterIssuer / Certificate Ingress Controller Nginx / Traefik / Envoy Kubernetes Secret tls.crt / tls.key 申请/续期 写入证书 读取 用户请求 说明:cert-manager通过ClusterIssuer与CA交互,自动将新证书写入Secret,Ingress Controller从Secret读取证书并加载

3.7 本章小结

  • DNS故障是接入层最常见的问题之一,排查时应从公共DNS、内部DNS、集群DNS三个层面逐级检查。
  • 证书故障包括过期、域名不匹配、链不完整、私钥错误等,使用openssl s_client和curl -vI可快速定位。
  • 自动化管理是减少人为失误的关键,推荐在IDP门户中部署cert-manager并配置自动续期。
  • 监控与告警应覆盖证书剩余有效期和DNS解析成功率,确保在故障发生前提前介入。