ALB 控制器 - 後端健康情況與計量
了解 Kube 服務和 Pod 的後端健康情況,對於識別問題和疑難排解至關重要。 為了輔助後端健康情況的可見度,ALB 控制器在所有 ALB 控制器部署中,公開了後端健康情況和計量端點。
ALB 控制器的後端健康情況,公開了三種不同的體驗:
- 適用於容器的應用程式閘道資源後端健康情況總結
- Kube 服務後端健康情況總結
- 特定 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 | 服務中狀況不良端點的數目 |