Kubernetes Ingress + TLS 故障排查全流程
注:本文虽然为大模型生成和整理,但是却具有极大的实践指导意义,请对大模型生成的文章质量多些信任,本作者通过多次根据指导实践,完成了问题查证,最终实现了预期效果。
注:本文虽然为大模型生成和整理,但是却具有极大的实践指导意义,请对大模型生成的文章质量多些信任,本作者通过多次根据指导实践,完成了问题查证,最终实现了预期效果
Kubernetes Ingress + TLS 故障排查全流程(命令+预期结果+流程图)
本文总结了 Ingress-Nginx 结合 TLS 证书访问不通的标准化排查流程,包含逐段验证命令、预期结果和故障定位逻辑,适用于 GitLab、Jenkins 等各类基于 Ingress 暴露的服务。
一、 故障排查核心流程图
开始
├── 1. 基础连通性验证(端口+进程)
│ ├── 1.1 检查 Ingress-Nginx Pod 状态 → 正常: Running;异常: CrashLoopBackOff/Error
│ ├── 1.2 检查 Ingress-Nginx 端口监听 → 正常: 80/443 端口被 nginx-ingress 占用
│ └── 1.3 检查 Ingress 资源配置 → 正常: HOSTS/SECRET 配置正确;异常: 配置缺失/错误
├── 2. TLS 证书有效性验证
│ ├── 2.1 检查 TLS Secret 是否存在 → 正常: Secret 存在且包含 tls.crt/tls.key
│ ├── 2.2 解码证书验证域名/有效性 → 正常: 域名匹配+私钥证书成对;异常: 域名不匹配/密钥不匹配
│ └── 2.3 检查 Ingress TLS 关联 → 正常: secretName 与 Secret 名称一致;异常: 名称不匹配
├── 3. 域名解析与端口转发验证
│ ├── 3.1 验证域名解析 IP → 正常: 解析到 Ingress 节点 IP;异常: 解析到非监听节点
│ ├── 3.2 直接访问节点 IP+Host 头 → 正常: 建立 SSL 连接;异常: Connection refused/超时
│ └── 3.3 检查防火墙/安全组 → 正常: 80/443 端口放行;异常: 端口被拦截
├── 4. 后端服务转发链路验证
│ ├── 4.1 测试 Ingress → Service 连通性 → 正常: 集群内访问 Service 通;异常: Service 不可达
│ ├── 4.2 测试 Service → Pod 连通性 → 正常: 访问 Pod IP 通;异常: Pod 未运行/端口错误
│ └── 4.3 检查 Pod 内部服务状态 → 正常: 服务进程运行;异常: 进程崩溃/资源不足
└── 5. 高级配置验证(重定向/HTTP2)
├── 5.1 检查 Ingress 注解配置 → 正常: ssl-redirect 等注解正确;异常: 注解缺失/冲突
└── 5.2 查看 Ingress-Nginx 日志 → 正常: 无转发错误;异常: 日志中包含 upstream 错误
结束(定位问题并修复)
二、 分阶段排查步骤(命令+预期结果+故障处理)
阶段 1:基础连通性验证(Ingress 组件是否正常)
核心目标:确认 Ingress-Nginx 控制器本身运行正常,端口监听无误。
|
排查步骤 |
执行命令 |
预期结果 |
异常处理方案 |
|
1.1 检查 Ingress-Nginx Pod 状态 |
|
Pod 状态为 |
1. 异常状态(CrashLoopBackOff):执行 2. 常见原因:资源不足/端口冲突 → 扩容资源/停止占用 80/443 的服务 |
|
1.2 检查节点 80/443 端口监听 |
`netstat -tlnp |
grep -E "80 |
443"` |
|
1.3 检查 Ingress 资源配置 |
|
1. 2. 3. 4. |
1. 域名不匹配:修改 Ingress 2. Secret 名称错误:调整 |
阶段 2:TLS 证书有效性验证(证书是否合法可用)
核心目标:确认 Secret 中的证书/私钥有效,且与 Ingress 配置匹配。
|
排查步骤 |
执行命令 |
预期结果 |
异常处理方案 |
|
2.1 检查 TLS Secret 是否存在 |
|
Secret 存在,Type 为 |
不存在则重新创建: |
|
2.2 解码证书验证域名 |
|
Subject 中 |
域名不匹配:重新生成包含正确域名的证书,再重建 Secret |
|
2.3 验证证书与私钥成对 |
|
1. 私钥验证无报错 2. 两个 MD5 值完全一致 |
1. 私钥无效:重新生成证书私钥对 2. MD5 不一致:确认证书和私钥是成对生成的,重建 Secret |
阶段 3:域名解析与端口转发验证(请求能否到达 Ingress 节点)
核心目标:确认域名解析到正确的 Ingress 节点,且端口可访问。
|
排查步骤 |
执行命令 |
预期结果 |
异常处理方案 |
|
3.1 验证域名解析 IP |
|
解析到的 IP 是 Ingress-Nginx 运行的节点 IP |
1. 解析到错误 IP:修改 hosts 文件或 DNS 记录,指向正确节点 IP 2. 提示未知域名:检查 hosts/DNS 配置是否生效 |
|
3.2 直接访问节点 IP+Host 头 |
|
1. 输出 2. 无 |
1. 连接拒绝:检查 Ingress-Nginx 是否监听 443 端口 → 调整部署模式(NodePort/HostNetwork) 2. SSL 握手失败:回到阶段 2 重新验证证书 |
|
3.3 检查防火墙/安全组 |
```# CentOS 防火墙检查 firewall-cmd --list-ports | grep -E "80 |
443" # NodePort 模式需检查映射端口 kubectl get svc nginx-ingress-controller -n kube-system``` |
1. 80/443 端口已放行 2. NodePort 模式下 443 对应的 NodePort 已放行 |
阶段 4:后端服务转发链路验证(Ingress 能否转发到 Pod)
核心目标:确认 Ingress → Service → Pod 的转发链路畅通。
|
排查步骤 |
执行命令 |
预期结果 |
异常处理方案 |
|
4.1 获取 Service 信息 |
|
1. 2. |
1. 端口不匹配:修改 Ingress 后端端口或 Service 端口 2. 标签不匹配:调整 Service selector 或 Pod 标签 |
|
4.2 测试 Service 连通性 |
|
返回后端服务响应(如 GitLab 的 302 重定向、Jenkins 的 200 响应) |
1. Service 不可达:检查 Service 是否关联到 Pod → |
|
4.3 测试 Pod 连通性 |
|
返回后端服务响应(与 4.2 结果一致) |
1. Pod 不可达:检查 Pod 是否运行 → |
|
4.4 检查 Pod 资源与状态 |
|
1. Events 无 2. 资源使用率未超过 limits |
1. OOM 错误:扩容 Pod 资源限制 2. 启动失败:查看 Pod 日志 → |
阶段 5:高级配置验证(解决 302/400/无响应问题)
核心目标:处理 Ingress 配置导致的重定向、超时等问题。
|
排查步骤 |
执行命令 |
预期结果 |
异常处理方案 |
|
5.1 检查 Ingress 注解配置 |
|
包含以下关键注解(按需配置): |
1. 缺失 ssl-redirect:添加注解强制 HTTP 转 HTTPS 2. 存在 HTTP2 兼容性问题:添加 |
|
5.2 查看 Ingress-Nginx 日志 |
|
无 |
1. upstream 超时:延长 proxy-read-timeout 注解 2. host not found:检查 Ingress host 配置是否正确 |
|
5.3 重启 Ingress-Nginx 生效配置 |
|
Ingress-Nginx Pod 重启后状态为 Running |
重启后仍报错:检查配置文件语法是否正确 → |
三、 常见故障速查表
|
故障现象 |
对应排查阶段 |
高频原因 |
|
|
阶段 1/3 |
Ingress-Nginx 未监听 443 端口;防火墙未放行 |
|
|
阶段 2 |
证书域名不匹配;证书私钥不匹配 |
|
域名解析到错误 IP |
阶段 3 |
hosts/DNS 记录配置错误 |
|
|
阶段 4/5 |
后端 Pod 资源不足;Ingress 超时时间过短 |
|
|
阶段 5 |
缺失 HTTPS 重定向注解;HTTP2 兼容性问题 |
四、 复用说明
- 本文流程适用于 所有基于 Ingress-Nginx 暴露的服务,只需替换
<namespace>/<ingress-name> 等占位符; - 排查时按阶段顺序执行,优先解决前序阶段的问题,再推进到后序阶段;
- 建议将本文保存为 Markdown 文件,结合实际场景补充自定义命令和故障案例。
需要我帮你把这份排查流程整理成一个可直接打印的排查 checklist吗?
更多推荐



所有评论(0)