Condividi tramite


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:

  1. Riepilogo dell'integrità back-end in base alla risorsa del gateway applicativo per contenitori
  2. Riepilogo dell'integrità back-end tramite il servizio Kubernetes
  3. 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}'

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