你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

适用于容器的应用程序网关的自定义运行状况探测

默认情况下,适用于容器的应用程序网关可监视所有后端目标的运行状况。 当后端目标变为正常或不正常时,适用于容器的应用程序网关只会将流量分配给运行正常的终结点。

除了使用默认的运行状况探测监视以外,还可以根据应用程序的要求自定义运行状况探测。 本文介绍默认和自定义的运行状况探测。

运行状况探测的顺序和逻辑如下所示:

  1. 使用 HealthCheckPolicy 自定义资源 (CR) 的定义。
  2. 如果没有 HealthCheckPolicy CR,请使用就绪情况探测
  3. 如果未定义就绪情况探测,请使用默认运行状况探测

以下属性构成自定义运行状况探测:

properties 默认值
interval 应将运行状况探测发送到后端目标的频率(以秒为单位)。 最小间隔必须为 > 0 秒。
timeout 在请求被标记为失败前应等待的时长(以秒为单位)。最小间隔必须 > 0 秒。
healthyThreshold 在将目标终结点标记为正常之前的运行状况探测数。 最小间隔必须为 > 0。
unhealthyTreshold 在将后端目标标记为不正常之前失败的运行状况探测数。 最小间隔必须为 > 0。
(http) host 在对后端目标的请求中指定的主机名。
(http) path 请求的特定路径。 如果应加载单个文件,则路径可能是 /index.html。
(http -> match) statusCodes 包含两个属性,即 startend,用于定义从后端返回的有效 HTTP 状态代码的范围。

显示使用自定义运行状况探测功能确定后端运行状况的适用于容器的应用程序网关的关系图。

默认运行状况探测

如果没有定义自定义探测配置或配置就绪情况探测,则适用于容器的应用程序网关会自动配置默认运行状况探测。 监视行为的工作方式是向配置的后端目标的 IP 地址发出 HTTP GET 请求。 对于默认探测,如果后端目标是针对 HTTPS 配置的,则探测会使用 HTTPS 测试后端目标的运行状况。

有关更多实现详细信息,请参阅 API 规范中的 HealthCheckPolicyConfig

使用默认运行状况探测时,将使用每个运行状况探测属性的以下值:

properties 默认值
interval 5 秒
timeout 30 秒
healthyTrehshold 1 个探测
unhealthyTreshold 3 个探测
port 使用的端口号由入口资源中的后端端口号或 HttpRoute 资源中的 HttpRoute 后端端口定义。
protocol HTTP 或 HTTPS1
(http) host localhost
(http) path /

1 当 backendTLSPolicy 引用目标后端服务(针对网关 API 实现)或指定 backendSetting 协议为 HTTPS 的 IngressExtension(针对入口 API 实现)时,将使用 HTTPS。

注意

运行状况探测以 Microsoft-Azure-Application-LB/AGCUser-Agent 值启动。

自定义的运行状况探测

在网关 API 和流入量 API 中,可以通过定义 HealthCheckPolicyPolicy 资源并引用运行状况探测应检查的服务来定义自定义运行状况探测。 由于服务由 HTTPRoute 或 Ingress 资源引用,并具有对适用于容器的应用程序网关的类引用,因此自定义运行状况探测将用于每个引用。

在此示例中,适用于容器的应用程序网关发出的运行状况探测会将主机名 contoso.com 发送到构成测试服务的 Pod。 请求路径为 /,探测每 5 秒发出一次并等待 3 秒,然后确定连接已超时。如果收到响应,则 200 到 299 之间的 HTTP 响应代码(包括 200 和 299)将被视为正常,所有其他响应均被视为不正常。

kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: HealthCheckPolicy
metadata:
  name: gateway-health-check-policy
  namespace: test-infra
spec:
  targetRef:
    group: ""
    kind: Service
    name: test-service
    namespace: test-infra
  default:
    interval: 5s
    timeout: 3s
    healthyThreshold: 1
    unhealthyThreshold: 1
    http:
      host: contoso.com
      path: /
      match:
        statusCodes: 
        - start: 200
          end: 299
EOF