You need to enable JavaScript to run this app.
导航

Ingress 诊断

最近更新时间2024.04.11 10:35:04

首次发布时间2024.04.10 10:21:09

Ingress 诊断可以帮助用户发现容器服务集群中 Ingress 资源可能存在的潜在风险,涉及的资源包括:Nginx Ingress、ALB Ingress、CLB Ingress 等。本文为您介绍如何配置 Ingress 诊断。

说明

邀测·申请试用】:该功能目前处于邀测阶段,如需使用,请提交申请。

前提条件

配置诊断

  1. 登录 容器服务控制台
  2. 单击左侧导航栏中的 集群
  3. 在集群列表页面,单击需要配置的目标集群。
  4. 在集群管理页面的左侧导航栏中,单击 故障诊断
  5. 单击 创建诊断任务,配置节点诊断任务。
    alt
    配置项说明
    诊断类型配置需要进行诊断的资源类型,本示例中选择 Ingress
    URL 地址配置需要进行诊断的 URL 地址。
  6. 单击 确定,完成配置,系统开始进行诊断,并生成诊断报告。

查看诊断结果

诊断任务执行完成后,如果当前诊断任务的状态为 异常,则说明节点中存在风险项。您可以单击诊断任务列表 操作 列中对应的 查看详情,查看诊断报告。
alt

诊断结果中会展示所有的诊断项、成功诊断项、未通过诊断项和警告诊断项,您需要查看 待处理 下的诊断项,并完成问题修复。
alt

下载诊断报告

诊断任务完成后,您可以下载 PDF 格式的诊断报告。

  1. 诊断完成后,单击诊断任务列表 操作 列中对应的 查看详情,查看诊断结果。
  2. 单击右上角 下载报告,即可下载 PDF 格式的诊断报告。

alt

诊断项说明和修复建议

Ingress 诊断

Ingress 诊断主要检查集群中 Ingress 资源的可用性、注解使用的规范性等。主要检查项如下表所示。

诊断项检查内容修复建议参考文档

Ingress 存在

检查是否存在对应的 Ingress 资源。

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

注意

提供的 URL 必须包含完整的域名和路径。例如example.com/demo。否则会导致诊断失败,提示 Ingress 不存在。

-

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 中。

  • 确认 Service 的标签选择器是否配置正确。
  • 确认 Service 的后端 Pod 是否被误删除,并修复问题。

-

Ingress Service 为 LoadBalancer 类型

检查 Ingress 启动参数中指定的 Service 是否为 LoadBalancer 类型。不为该类型时,可能导致 Ingress Controller 无法被外网访问。

确认是否需要 LoadBalancer 类型的 Service:

  • 不需要:可忽略该警告。
  • 需要:请将 Service 修改为 LoadBalancer 类型。

通过控制台创建负载均衡服务

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 诊断

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 规则时,是否同时配置了HostSecretName字段。同时配置HostSecret字段,并且确保Host与证书信息对应。Nginx Ingress 配置 HTTPS 协议