Controller ALB - Integrità e metriche back-end
Comprendere l'integrità back-end dei servizi e pod Kubernetes è fondamentale per l'identificazione e la risoluzione dei problemi. Per migliorare la visibilità dell'integrità back-end, il controller ALB espone gli endpoint di integrità e metriche back-end in tutte le distribuzioni del controller ALB.
L'integrità back-end del controller ALB espone tre esperienze diverse:
- Riepilogo dell'integrità back-end in base alla risorsa del gateway applicativo per contenitori
- Riepilogo dell'integrità back-end tramite il servizio Kubernetes
- Informazioni dettagliate sull'integrità back-end per un determinato servizio Kubernetes
L'endpoint delle metriche del controller ALB espone sia le metriche sia il riepilogo dell'integrità back-end. Questo endpoint consente l'esposizione a Prometheus.
L'accesso a questi endpoint può essere ottenuto tramite gli URL seguenti:
- Integrità back-end - http://<alb-controller-pod-ip>:8000/backendHealth
- L'output è in formato JSON
- Metriche - http://<alb-controller-pod-ip>:8001/metrics
- L'output è in formato testo
Qualsiasi client o pod con connettività al pod e alla porta specificati può accedere a questi endpoint. Per limitare l'accesso a determinati client, è consigliabile usare i criteri di rete Kubernetes.
Integrità del back-end
Individuazione dell'integrità back-end
Il controller ALB espone l'integrità back-end nel pod del controller ALB che funge da primario.
Per trovare il pod primario, eseguire il comando seguente:
CONTROLLER_NAMESPACE='azure-alb-system'
kubectl get lease -n $CONTROLLER_NAMESPACE alb-controller-leader-election -o jsonpath='{.spec.holderIdentity}' | awk -F'_' '{print $1}'
- Accedere all'integrità back-end tramite il comando Kubectl
- Accedere all'integrità back-end tramite pod controller direttamente
Per l'accesso indiretto tramite l'utilità Kubectl, è possibile creare un listener come proxy del traffico al pod.
kubectl port-forward <pod-name> -n $CONTROLLER_NAMESPACE 8000 8001
Quando il comando Kubectl è in ascolto, aprire un altro terminale (o sessione di Cloud Shell) ed eseguire curl a 127.0.0.1 per essere reindirizzato al pod.
curl http://127.0.0.1:8000
Esempio di risposta:
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
Riepilogo dell'integrità back-end in base al gateway applicativo per contenitori
Questa esperienza riepiloga tutti i servizi Kubernetes con riferimenti al gateway applicativo per contenitori e lo stato integrità corrispondente.
È possibile accedere a questa esperienza specificando l'ID risorsa del gateway applicativo per contenitori nella query della richiesta al pod alb-controller.
È possibile usare il comando seguente per eseguire il probe di integrità back-end per la risorsa del gateway applicativo per contenitori specificato.
curl http://\<alb-controller-pod-ip-address\>:8000/backendHealth?alb-id=/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzzzzzz
Output di esempio:
{
"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
}
]
}
]
}
Riepilogo dell'integrità back-end tramite il servizio Kubernetes
Questa esperienza consente di cercare lo stato di riepilogo dell'integrità di un determinato servizio.
È possibile accedere a questa esperienza specificando lo spazio dei nomi, il servizio e il numero di porta del servizio con una stringa di query per il pod alb-controller nel formato seguente: <namespace>/<service>/<service-port-number>
È possibile usare il comando seguente per eseguire il probe di integrità back-end per il servizio Kubernetes specificato.
curl http://\<alb-controller-pod-ip-address\>:8000/backendHealth?service-name=default/service-hello-world/80
Output di esempio:
{
"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
}
]
}
]
}
Informazioni dettagliate sull'integrità back-end per un determinato servizio Kubernetes
Questa esperienza mostra tutti gli endpoint che compongono il servizio, inclusi lo stato integrità e l'indirizzo IP corrispondenti. Lo stato dell'endpoint viene segnalato come INTEGRO o NON INTEGRO.
È possibile accedere a questa esperienza specificando detailed=true nella stringa di query per il pod alb-controller.
Ad esempio, è possibile verificare l'integrità di un singolo endpoint eseguendo il comando seguente:
curl http://\<alb-controller-pod-ip-address\>:8000/backendHealth?service-name=default/service-hello-world/80\&detailed=true
Output di esempio:
{
"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"
}
}
]
}
]
}
]
}
Metrica
Il controller ALB presenta attualmente metriche in formato basato su testo da esporre a Prometheus. L'accesso a questi log è disponibile sulla porta 8001 del pod del controller alb primario http://\<alb-controller-pod-ip\>:8001/metrics
.
Le metriche seguenti sono esposte oggi:
Nome misurazione | Descrizione |
---|---|
alb_connection_status | Stato di connessione per una risorsa del gateway applicativo per contenitori |
alb_reconnection_count | Numero di tentativi di riconnessione alle risorse del gateway applicativo per contenitori |
total_config_updates | Numero di operazioni di configurazione del routing del servizio |
total_endpoint_updates | Numero di operazioni di configurazione del pool back-end |
total_deployments | Numero di distribuzioni della risorsa del gateway applicativo per contenitori |
total_endpoints | Numero di endpoint in un servizio |
total_healthy_endpoints | Numero di endpoint integri in un servizio |
total_unhealthy_endpoints | Numero di endpoint non integri in un servizio |