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

ALB 控制器 - 后端运行状况和指标

了解 Kubernetes 服务和 Pod 的后端运行状况对于识别问题和帮助故障排除至关重要。 为了帮助了解后端运行状况,ALB 控制器在所有 ALB 控制器部署中公开后端运行状况和指标终结点。

ALB 控制器的后端运行状况公开三种不同的体验:

  1. 按适用于容器的应用程序网关资源汇总的后端运行状况
  2. 按 Kubernetes 服务汇总的后端运行状况
  3. 指定 Kubernetes 服务的详细后端运行状况

ALB 控制器的指标终结点公开了后端运行状况的指标和摘要。 此终结点允许向 Prometheus 公开。

可以通过以下 URL 访问这些终结点:

  • 后端运行状况 - http://<alb-controller-pod-ip>:8000/backendHealth
    • 输出为 JSON 格式
  • 指标 - http://<alb-controller-pod-ip>:8001/metrics
    • 输出为文本格式

连接到此 Pod 和端口的任何客户端或 Pod 都可访问这些终结点。 若要限制访问,建议使用 Kubernetes 网络策略来限制对某些客户端的访问。

后端运行状况

发现后端运行状况

ALB 控制器在充当主 Pod 的 ALB 控制器 Pod 上公开后端运行状况。

要查找主 Pod,请运行以下命令:

CONTROLLER_NAMESPACE='azure-alb-system'
kubectl get lease -n $CONTROLLER_NAMESPACE alb-controller-leader-election -o jsonpath='{.spec.holderIdentity}' | awk -F'_' '{print $1}'

若要通过 kubectl 实用工具进行间接访问,可以创建一个侦听器,将流量代理到 Pod。

kubectl port-forward <pod-name> -n $CONTROLLER_NAMESPACE 8000 8001

kubectl 命令侦听后,打开另一个终端(或 cloud shell 会话),并将 curl 执行到 127.0.0.1 以重定向到 Pod。

curl http://127.0.0.1:8000

示例响应:

Available paths:
Path: /backendHealth
Description: Prints the backend health of the ALB.
Query Parameters:
        detailed: if true, prints the detailed view of the backend health
        alb-id: Resource ID of the Application Gateway for Containers to filter backend health for.
        service-name: Service to filter backend health for. Expected format: \<namespace\>/\<service\>/\<service-port-number\>

Path: /
Description: Prints the help

按适用于容器的应用程序网关汇总的后端运行状况

此体验总结了所有 Kubernetes 服务,并引用了适用于容器的应用程序网关及其相应的运行状况。

可以通过在 alb-controller pod 的请求查询中指定适用于容器的应用程序网关资源 ID 来访问此体验。

可以使用以下命令探测指定的适用于容器的应用程序网关资源的后端运行状况。

curl http://\<alb-controller-pod-ip-address\>:8000/backendHealth?alb-id=/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzzzzzz

示例输出:

{
  "services": [
    {
      "serviceName": "default/service-hello-world/80",
      "serviceHealth": [
        {
          "albId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzzzzzz",
          "totalEndpoints": 1,
          "totalHealthyEndpoints": 1,
          "totalUnhealthyEndpoints": 0
        }
      ]
    },
    {
      "serviceName": "default/service-contoso/443",
      "serviceHealth": [
        {
          "albId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzzzzzz",
          "totalEndpoints": 1,
          "totalHealthyEndpoints": 1,
          "totalUnhealthyEndpoints": 0
        }
      ]
    }
  ]
}

按 Kubernetes 服务汇总的后端运行状况

此体验搜索给定服务的运行状况摘要状态。

可以通过在以下格式的 alb-controller pod 查询字符串中指定命名空间的名称、服务和服务的端口号来访问此体验:<namespace>/<service>/<service-port-number>

可以使用以下命令探测指定的 Kubernetes 服务的后端运行状况。

curl http://\<alb-controller-pod-ip-address\>:8000/backendHealth?service-name=default/service-hello-world/80

示例输出:

{
  "services": [
    {
      "serviceName": "default/service-hello-world/80",
      "serviceHealth": [
        {
          "albId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzzzzzz",
          "totalEndpoints": 1,
          "totalHealthyEndpoints": 1,
          "totalUnhealthyEndpoints": 0
        }
      ]
    }
  ]
}

指定 Kubernetes 服务的详细后端运行状况

此体验显示构成服务的所有终结点,包括相应的运行状况和 IP 地址。 终结点状态报告为 HEALTHY 或 UNHEALTHY

可以通过在 alb-controller pod 的查询字符串中指定 detailed=true 来访问此服务。

例如,可以通过执行以下命令来验证单个终结点的运行状况:

curl http://\<alb-controller-pod-ip-address\>:8000/backendHealth?service-name=default/service-hello-world/80\&detailed=true

示例输出:

{
  "services": [
    {
      "serviceName": "default/service-hello-world/80",
      "serviceHealth": [
        {
          "albId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzzzzzz",
          "totalEndpoints": 1,
          "totalHealthyEndpoints": 1,
          "totalUnhealthyEndpoints": 0,
          "endpoints": [
            {
              "address": "10.1.1.22",
              "health": {
                "status": "HEALTHY"
              }
            }
          ]
        }
      ]
    }
  ]
}

指标

ALB 控制器当前按照基于文本的格式呈现向 Prometheus 公开的指标。 主 ALB 控制器 Pod http://\<alb-controller-pod-ip\>:8001/metrics 端口 8001 上提供了对这些日志的访问。

目前公开了以下指标:

标准名称 说明
alb_connection_status 与适用于容器的应用程序网关资源的连接状态
alb_reconnection_count 尝试重新连接适用于容器的应用程序网关资源的次数
total_config_updates 服务路由配置操作数
total_endpoint_updates 后端池配置操作数
total_deployments 适用于容器的应用程序网关资源部署数量
total_endpoints 服务中的终结点数量
total_healthy_endpoints 服务中的运行正常终结点数量
total_unhealthy_endpoints 服务中的运行不正常终结点数量