Ingress诊断

容器智能运维平台提供Ingress诊断功能,帮助您诊断Ingress常见问题。本文介绍Ingress诊断对应的检查项以及修复方案。

Ingress诊断包括Ingress检查、启动参数配置、Ingress Pod错误日志、Ingress Controller SLB等检查项。

重要

使用故障诊断功能时,系统将在您的集群节点上执行数据采集程序并收集检查结果。采集的信息包括系统版本,负载、Docker、Kubelet等运行状态及系统日志中关键错误信息。数据采集程序不会采集您的业务信息及敏感数据。

Ingress诊断对应的检查项

说明

根据集群配置,具体检查项可能稍有不同。实际结果请以诊断页面结果为准。

诊断项分组

说明

Ingress

检查集群Ingress资源可用性等。

Addon

检查Ingress组件启动参数配置、Ingress Service及Pod等。

SLB

检查Ingress Controller SLB状态、最大连接数、QPS、健康检查等。

Ingress

检查项

检查项说明

修复方案

Ingress存在

检查是否通过提供的信息找到了对应的Ingress资源。

检查所提供的URL信息是否有能够对应的Ingress规则。若URL信息无误,可能是Ingress规则存在问题,例如,使用了正则表达式作路径,而没有使用use-regex注解等。

使用base-url-scheme

使用了nginx.ingress.kubernetes.io/base-url-scheme,该注解已在0.22.0版本废弃。

确认当前Ingress Controller版本,移除该注解或使用其他注解代替。

使用grpc-backend

使用了nginx.ingress.kubernetes.io/grpc-backend,该注解已在0.21.0版本废弃。

确认当前Ingress Controller版本,移除该注解或使用其他注解代替。

使用mirror-uri

使用了nginx.ingress.kubernetes.io/mirror-uri,该注解已在0.24.0版本废弃。

确认当前Ingress Controller版本,移除该注解或使用其他注解代替。

使用secure-backends

使用了nginx.ingress.kubernetes.io/secure-backends,该注解已在0.21.0版本废弃。

确认当前Ingress Controller版本,移除该注解或使用其他注解代替。

使用session-cookie-hash

使用了nginx.ingress.kubernetes.io/session-cookie-hash,该注解已在0.24.0版本废弃。

确认当前Ingress Controller版本,移除该注解或使用其他注解代替。

使用nginx.com/nginx.org注解

检查Ingress上是否使用了商业版Ingress的注解配置(以nginx.com/nginx.org开头),该配置无法在社区版Nginx Ingress Controller上使用。

请使用对应功能的正确用法。关于Ingress更多信息,请参见Nginx Ingress管理或社区官方文档Nginx Ingress Controller

启用Canary

当使用Canary相关功能时,需要指定nginx.ingress.kubernetes.io/canary: "true"。如果没有指定开启,Canary功能不会生效。

如果您需要在该Ingress上开启Canary功能,请在Ingress规则上添加nginx.ingress.kubernetes.io/canary: "true"注解。

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使用nginx.ingress.kubernetes.io开头的Annotation,而不是以nginx.com/nginx.org开头。因为使用nginx.com/nginx.org开头的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及以上版本时,使用nginx.ingress.kubernetes.io/rewrite-target注解时,需要配合捕获组一起使用,否则可能会导致转发路径出错。

请正确配置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

使用了--force-namespace-isolation启动参数,该参数已经在0.24.0版本废弃。

确认当前Ingress Controller版本,移除该启动参数。

使用--sort-backends

使用了--sort-backends启动参数,该参数已经在0.22.0版本废弃。

确认当前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异常问题排查