容器服务平台提供Ingress诊断功能,帮助您诊断Ingress常见问题。本文介绍Ingress诊断对应的检查项以及修复方案。
Ingress诊断包括Ingress检查、启动参数配置、Ingress Pod错误日志、Ingress Controller SLB等检查项。
使用故障诊断功能时,系统将在您的集群节点上执行数据采集程序并收集检查结果。采集的信息包括系统版本,负载、Docker、Kubelet等运行状态及系统日志中关键错误信息。数据采集程序不会采集您的业务信息及敏感数据。
Ingress诊断对应的检查项
根据集群配置,具体检查项可能稍有不同。实际结果请以诊断页面结果为准。
诊断项分组 | 说明 |
检查集群Ingress资源可用性等。 | |
检查Ingress组件启动参数配置、Ingress Service及Pod等。 | |
检查Ingress Controller SLB状态、最大连接数、QPS、健康检查等。 |
Ingress
检查项 | 检查项说明 | 修复方案 |
Ingress存在 | 检查是否通过提供的信息找到了对应的Ingress资源。 | 检查所提供的URL信息是否有能够对应的Ingress规则。若URL信息无误,可能是Ingress规则存在问题,例如,使用了正则表达式作路径,而没有使用use-regex注解等。 |
使用base-url-scheme | 使用了 | 确认当前Ingress Controller版本,移除该注解或使用其他注解代替。 |
使用grpc-backend | 使用了 | 确认当前Ingress Controller版本,移除该注解或使用其他注解代替。 |
使用mirror-uri | 使用了 | 确认当前Ingress Controller版本,移除该注解或使用其他注解代替。 |
使用secure-backends | 使用了 | 确认当前Ingress Controller版本,移除该注解或使用其他注解代替。 |
使用session-cookie-hash | 使用了 | 确认当前Ingress Controller版本,移除该注解或使用其他注解代替。 |
使用nginx.com/nginx.org注解 | 检查Ingress上是否使用了商业版Ingress的注解配置(以 | 请使用对应功能的正确用法。关于Ingress更多信息,请参见Nginx Ingress管理或社区官方文档Nginx Ingress Controller。 |
启用Canary | 当使用Canary相关功能时,需要指定 | 如果您需要在该Ingress上开启Canary功能,请在Ingress规则上添加 |
Addon
检查项名称 | 检查项说明 | 修复方案 |
Ingress就绪Pod百分比 | Ingress Deployment已就绪的Pod百分比,此值小于100表明Ingress Pod可能出现问题导致启动或健康检查失败。 | 请根据错误日志查找问题Pod并修复。关于Ingress异常问题排查,请参见Nginx Ingress异常问题排查。 |
Ingress资源上存在地址 | 检查Ingress资源被Ingress Controller成功更新了地址。 | 该值不存在时,检查Ingress的IngressClass是否存在对应的Ingresse Controller,以及Controller是否正常工作。具体问题可查看其他检查点的检查结果。 |
Leader Pod存在 | 选主成功,存在Leader Pod。若该值不存在,可能是由于Pod启动时间过短或Ingress Controller权限配置问题导致。 | 检查Ingress Pod是否存在错误日志,并修复日志问题。关于Ingress异常问题排查,请参见Nginx Ingress异常问题排查。 |
Nginx Ingress使用正确的Annotation | 社区版Nginx Ingress Controller使用 | 请设置正确的Annotation。关于Annotation更多信息,请参见Annotations。 |
Nginx Ingress中rewrite-target配合捕获组使用 | 检查使用了rewrite-target的Nginx Ingress规则是否与捕获组一起使用。在0.22.0及以上版本使用rewrite-target时,需要显式指定捕获组,否则会造成流量转发异常。 | 请正确配置Ingress。关于Ingress配置更多信息,请参见Nginx Ingress高级用法。 |
Nginx Ingress灰度规则 | 检查service-match和service-weight是否指定不超过2个目标服务。service-match和service-weight仅支持2个服务间的流量分发,配置大于2个将导致多出的配置被忽略,出现流量不符合预期的情况。 | 请调整规则中的服务数量。 |
Ingress名称 | 展示所匹配到的Ingress规则名称。 | 无。 |
Pod错误日志 | Ingress Controller Pod中存在错误日志。出现错误日志可能表示Ingress Controller工作异常。 | 根据错误日志查找原因并修复。关于Ingress异常问题排查,请参见Nginx Ingress异常问题排查。 |
使用rewrite-target时路径中使用捕获组 | 在0.22.0及以上版本时,使用 | 请正确配置Ingress信息。有关Ingress更多信息,请参见配置URL重定向的路由服务。 |
service-*配置多个目标 | service-weight和service-weight仅支持2个服务之间的流量分发,不支持3个及以上的服务。 | 请正确配置service-weight或service-match。有关配置更多信息,请参见通过Nginx Ingress实现灰度发布和蓝绿发布。 |
Ingress Service存在 | Ingress启动参数中指定的Service是否存在。该Service被删除可能会导致Ingress启动异常等情况。 | 在Deployment启动参数中确认被删除的Service名称,并修复问题。更多信息,请参见网络与负载均衡相关高危操作。 |
Ingress Service存在端点 | Ingress Service正确存在端点。若不存在,会导致SLB无法正常将流量转发到Ingress Controller中。 | 检查Service的标签选择器是否正常。 |
Ingress Service存在事件 | Ingress Service上存在Warning或Error事件。可能是由于SLB配置出现问题导致的。 | 检查Service异常事件,查找原因并修复问题。有关Service异常问题排查,请参见Service异常事件及处理方式。 |
Ingress Service外部流量策略 | 外部流量策略影响流量进入集群后的分发方式。默认为Local,可以更改为Cluster。推荐使用Local模式,在不使用Local模式时,客户端源IP可能无法正常保留,且会导致SLB健康检查不准确。 | 若您确认要使用Cluster模式或有集群内部通过SLB地址访问Ingress Controller的需求,请忽略该警告。否则,推荐将外部流量策略改为Local。 |
Ingress Service有外部IP地址 | Service上有通过CCM(Cloud Controller Manager)分配的IP地址。若不存在该地址,可能导致Ingress无法通过公网访问。 | 检查Service状态、CCM状态、SLB配额等指标是否正常。大部分问题通过事件的形式暴露。 |
Ingress Service为LoadBalancer类型 | Ingress启动参数中指定的Service为LoadBalancer类型。如果不为该类型时,可能会导致Ingress Controller无法被外网访问。 | 如果确认不需要LoadBalancer类型的Service,可忽略该警告。否则,请将Service类型改为LoadBalancer。 |
使用--force-namespace-isolation | 使用了 | 确认当前Ingress Controller版本,移除该启动参数。 |
使用--sort-backends | 使用了 | 确认当前Ingress Controller版本,移除该启动参数。 |
SLB
检查项名称 | 检查项说明 | 修复方案 |
SLB存在 | 检查Ingress Controller的SLB是否存在。 | 请检查Ingress Controller Service是否存在,且无异常事件,以及SLB控制台中是否存在对应SLB实例。若SLB实例被误删,可通过重建Service的方式进行恢复。具体操作,请参见误删除SLB怎么办?。 |
Ingress Controller SLB当前健康检查状态 | 检查当前事件SLB后端的健康检查状态。 | 当前SLB后端健康检查状态异常。请检查Ingress Controller Service有无异常事件,组件负载是否过高。关于组件异常问题排查,请参见Nginx Ingress异常问题排查。 |
SLB ID | 展示对应SLB实例的ID。 | 无。 |
Ingress Controller SLB最大连接数检查 | 检查SLB过去三天最大连接数是否超过上限的80%以上。连接数达到上限后无法建立新连接,可能会导致客户端无法访问。 | SLB实例连接数过高,为避免业务受损,请提升实例规格。具体操作,请参见使用指定的SLB实例。 |
Ingress Controller SLB新建连接速率检查 | 检查SLB过去三天最大新建连接速率是否超过上限的80%以上。新建连接速率达到上限后,短时间内无法建立新连接,导致客户端无法访问。 | SLB实例新建连接速率过高,为避免业务受损,请提升实例规格。具体操作,请参见使用指定的SLB实例。 |
Ingress Controller SLB QPS检查 | 检查SLB过去三天最大QPS是否达到上限的80%。QPS达到上限后,可能导致客户端无法访问。 | SLB实例QPS过高,为避免业务受损,请提升实例规格。具体操作,请参见使用指定的SLB实例。 |
TLS同时配置Host与SecretName | 配置Ingress TLS规则时,需要同时配置Host和SecretName字段。 | 请同时配置Host与Secret字段,并且确保Host与证书信息对应。 |
Ingress Controller SLB 健康检查失败检查 | 检查SLB过去三天是否存在健康检查失败的情况,可能由于组件负载过高或配置错误引起。 | 过去三天内存在健康检查失败,为避免业务受损,请检查Ingress Controller Service有无异常事件,组件负载是否过高。关于组件异常问题排查,请参见Nginx Ingress异常问题排查。 |