共用方式為


ALB 控制器 - 後端健康情況與計量

了解 Kube 服務和 Pod 的後端健康情況,對於識別問題和疑難排解至關重要。 為了輔助後端健康情況的可見度,ALB 控制器在所有 ALB 控制器部署中,公開了後端健康情況和計量端點。

ALB 控制器的後端健康情況,公開了三種不同的體驗:

  1. 適用於容器的應用程式閘道資源後端健康情況總結
  2. Kube 服務後端健康情況總結
  3. 特定 Kube 服務的詳細後端健康情況

ALB 控制器的計量端點,公開了後端健康情況的計量和摘要。 這個端點可向 Prometheus 曝光。

您可以透過以下 URL,觸達這些端點:

  • 後端健康情況 - http://<alb-controller-pod-ip>:8000/backendHealth
    • 輸出是 JSON 格式
  • 計量 - http://<alb-controller-pod-ip>:8001/metrics
    • 輸出是文字格式

任何可與這個 Pod 和連接埠連線的用戶端或 Pod,都可以存取這些端點。 若要限制存取,建議使用 Kube 網路原則,限制某些用戶端的存取。

後端健康情況

探索後端健康情況

ALB 控制器會在做為主要節點的 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 公用程式間接存取,您可以建立接聽程式來 Proxy 流量到 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

適用於容器的應用程式閘道後端健康情況總結

這個經驗總結了所有 Kube 服務,並引用了適用於容器的應用程式閘道,以及其對應的健全狀態。

在 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
        }
      ]
    }
  ]
}

Kube 服務後端健康情況總結

這個體驗會搜尋指定服務的健康情況摘要狀態。

在 alb-controller pod 的查詢字串中,依以下格式指定命名空間的名稱、服務,以及服務的連接埠號碼,即可存取這個體驗:<命名空間>/<服務>/<服務連接埠號碼>

以下命令可針對指定的 Kube 服務,探查後端健康情況。

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
        }
      ]
    }
  ]
}

特定 Kube 服務的詳細後端健康情況

這個體驗顯示組成服務的所有端點,包括其對應的健全狀態和 IP 位址。 回報的端點狀態不是良好,就是狀況不良

在 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 服務中狀況不良端點的數目