Ingress 诊断可以帮助用户发现容器服务集群中 Ingress 资源可能存在的潜在风险,涉及的资源包括:Nginx Ingress、ALB Ingress、CLB Ingress 等。本文为您介绍如何配置 Ingress 诊断。
配置项 | 说明 |
---|---|
诊断类型 | 配置需要进行诊断的资源类型,本示例中选择 Ingress。 |
URL 地址 | 配置需要进行诊断的 URL 地址。 |
诊断任务执行完成后,如果当前诊断任务的状态为 异常,则说明节点中存在风险项。您可以单击诊断任务列表 操作 列中对应的 查看详情,查看诊断报告。
诊断结果中会展示所有的诊断项、成功诊断项、未通过诊断项和警告诊断项,您需要查看 待处理 下的诊断项,并完成问题修复。
诊断任务完成后,您可以下载 PDF 格式的诊断报告。
Ingress 诊断主要检查集群中 Ingress 资源的可用性、注解使用的规范性等。主要检查项如下表所示。
诊断项 | 检查内容 | 修复建议 | 参考文档 |
---|---|---|---|
Ingress 存在 | 检查是否存在对应的 Ingress 资源。 |
注意 提供的 URL 必须包含完整的域名和路径。例如 | - |
Ingress 资源上存在地址 | 检查 Ingress 资源是否被 Ingress Controller 成功更新了地址。 | 确认 IngressClass 是否存在对应的 Ingress Controller,以及 Controller 是否正常工作。详情可参考其他检查项的检查结果。 | - |
使用 nginx.com/nginx.org 注解 | 检查是否使用了商业版 Ingress 的注解(以nginx.com/nginx.org 开头),该配置无法在社区版 Nginx Ingress Controller 上使用。 | 确认当前 Ingress Controller 版本,移除该注解或使用其他注解代替。 | - |
使用 mirror-uri | 检查是否使用了nginx.ingress.kubernetes.io/mirror-uri 注解,该注解已在 0.24.0 版本废弃。 | 确认当前 Ingress Controller 版本,移除该注解或使用其他注解代替。 | - |
使用 grpc-backend | 检查是否使用了nginx.ingress.kubernetes.io/grpc-backend 注解,该注解已在 0.21.0 版本废弃。 | 确认当前 Ingress Controller 版本,移除该注解或使用其他注解代替。 | - |
使用 base-url-scheme | 检查是否使用了nginx.ingress.kubernetes.io/base-url-scheme 注解,该注解已在 0.22.0 版本废弃。 | 确认当前 Ingress Controller 版本,移除该注解或使用其他注解代替。 | - |
使用 session-cookie-hash | 检查是否使用了nginx.ingress.kubernetes.io/session-cookie-hash 注解,该注解已在 0.24.0 版本废弃。 | 确认当前 Ingress Controller 版本,移除该注解或使用其他注解代替。 | - |
使用 secure-backends | 检查是否使用了nginx.ingress.kubernetes.io/secure-backends 注解,该注解已在 0.21.0 版本废弃。 | 确认当前 Ingress Controller 版本,移除该注解或使用其他注解代替。 | - |
组件诊断主要检查 Ingress 组件启动参数、Ingress Service 及 Pod 是否工作正常等。主要检查项如下表所示。
诊断项 | 检查内容 | 修复建议 | 参考文档 |
---|---|---|---|
Ingress 就绪 Pod 百分比 | 检查 Ingress Deployment 已就绪 Pod 的百分比是否为 100%。如果小于 100% 则表示 Ingress Pod 出现问题没有正常启动或健康检查失败。 | 查看 kube-system 命名空间下的无状态负载 ingress-nginx-controller 的就绪状态,必要时查看事件并根据事件提示处理故障。 | - |
Ingress Service 存在 | 检查 Ingress 启动参数中的 Service 是否存在。该 Service 被删除后可能会导致 Ingress 启动异常。 | 确认 Service 是否被误删除,并修复问题。 | 通过控制台创建 Nginx Ingress |
Ingress Service 存在事件 | Ingress Service 上是否存在 Warning 或 Error 事件。可能是由于 CLB 配置出现问题。 | 查看 Service 的 Warning 或 Error 事件,根据事件提示处理故障。 | - |
Ingress Service 存在端点 | 检查 Ingress Service 是否正确存在端点。如果不存在,会导致 CLB 无法正常将流量转发到 Ingress Controller 中。 |
| - |
Ingress Service 为 LoadBalancer 类型 | 检查 Ingress 启动参数中指定的 Service 是否为 LoadBalancer 类型。不为该类型时,可能导致 Ingress Controller 无法被外网访问。 | 确认是否需要 LoadBalancer 类型的 Service:
| |
Ingress Service 有外部 IP 地址 | 检查 Service 上有分配的 IP 地址。如果不存在,可能导致无法从公网访问 Ingress。 | 查看 Serivce 事件,检查 Service 状态、CLB 配额等是否正常。 | - |
Leader Pod 存在 | 检查选主是否成功,存在 Leader Pod。如果不存在,可能是由于 Pod 启动时间过短,或者 Ingress Controller 权限配置存在问题。 | - | - |
Ingress Service 外部流量策略 | 检查 Service 的外部流量策略,即外部流量进入集群后的分发方式。 | 外部流量策略默认为Local ,可以更改为Cluster 。推荐使用Local 模式,否则客户端源 IP 可能无法正常保留,导致 CLB 健康检查不准确。 | 节点端口访问(NodePort) |
CLB 诊断主要检查 Ingress Controller CLB 的状态、最大连接数、QPS、健康检查等。主要检查项如下表所示。
诊断项 | 检查内容 | 修复建议 | 参考文档 |
---|---|---|---|
Ingress Controller CLB 健康检查失败检查 | 检查 CLB 过去 3 天是否存在健康检查失败。可能由于组件负载过高或配置错误引起。 | 检查 Ingress Controller Service 有无异常事件,组件负载是否过高。并根据事件提示处理故障。 | - |
Ingress Controller CLB 实例存在 | 检查 Ingress Controller 的 CLB 是否存在。 | 在 CLB 控制台 中确认是否存在对应的 CLB 实例。若 CLB 实例被误删除,可通过重建 Service 的方式进行恢复。 | - |
CLB ID | 检查 Ingress Controller 的 CLB ID 是否存在。 | - | - |
Ingress Controller CLB 当前健康检查状态 | 检查 Ingress 对应 CLB 后端的健康检查状态是否正常。 | 检查 Ingress Controller Service 有无异常事件,组件负载是否过高。 | - |
Ingress Controller CLB 新建连接速率检查 | 检查 CLB 过去 3 天最大新建连接速率是否超过上限的 80%。新建连接速率达到上限后,短时间内无法建立新连接,会导致客户端访问无法访问。 | CLB 新建连接数过高,为避免业务受损,请提升实例规格。 | 使用 Annotation 配置负载均衡服务 |
Ingress Controller CLB 最大连接数检查 | 检查 CLB 过去 3 天最大连接数是否超过上限的 80%。连接数达到上限后无法建立新连接,可能会导致客户端无法访问。 | CLB 最大连接数过高,为避免业务受损,请提升实例规格。 | 使用 Annotation 配置负载均衡服务 |
TLS 同时配置 Host 与 SecretName | 检查配置 Ingress TLS 规则时,是否同时配置了Host 和SecretName 字段。 | 同时配置Host 与Secret 字段,并且确保Host 与证书信息对应。 | Nginx Ingress 配置 HTTPS 协议 |