次の方法で共有


ALB コントローラー - バックエンドの正常性とメトリック

Kubernetes サービスとポッドのバックエンドの正常性を理解することは、問題を特定し、トラブルシューティングを支援するうえで非常に重要です。 バックエンドの正常性の可視化を支援するために、ALB コントローラーでは、すべての ALB コントローラー デプロイにおけるバックエンドの正常性とメトリック エンドポイントが公開されます。

ALB コントローラーのバックエンドの正常性によって公開される 3 つの異なるエクスペリエンスを次に示します。

  1. Application Gateway for Containers リソース別バックエンドの正常性の概要
  2. Kubernetes サービス別バックエンドの正常性の概要
  3. 指定された Kubernetes サービスの詳細なバックエンドの正常性

ALB コントローラーのメトリック エンドポイントでは、バックエンドの正常性の概要とメトリックの両方が公開されます。 このエンドポイントにより、Prometheus への公開が可能になります。

これらのエンドポイントには次の URL からアクセスできます。

  • バックエンドの正常性 - http://<alb-controller-pod-ip>:8000/backendHealth
    • 出力は JSON 形式です
  • メトリック - http://<alb-controller-pod-ip>:8001/metrics
    • 出力はテキスト形式です

これらのエンドポイントには、このポッドとポートに接続されているすべてのクライアントまたはポッドがアクセスできます。 アクセスを制限するには、Kubernetes ネットワーク ポリシーを使用して、特定のクライアントへのアクセスを制限することをお勧めします。

バックエンドの正常性

バックエンドの正常性の検出

ALB コントローラーは、プライマリとして動作している ALB コントローラー ポッドでバックエンドの正常性を公開します。

プライマリ ポッドを見つけるには、次のコマンドを実行します。

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

kubectl ユーティリティを介した間接アクセスの場合は、ポッドへのトラフィックをプロキシするリスナーを作成できます。

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

kubectl コマンドでリッスンが開始されたら、別のターミナル (または Cloud Shell セッション) を開き、curl を 127.0.0.1 に実行してポッドにリダイレクトします。

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

Application Gateway for Containers 別バックエンドの正常性の概要

このエクスペリエンスでは、Application Gateway for Containers を参照するすべての Kubernetes サービスと、それに対応する正常性状態の概要を示しています。

このエクスペリエンスにアクセスするには、alb-controller ポッドに対する要求のクエリで Application Gateway for Containers リソース ID を指定します。

次のコマンドを使用すると、指定された Application Gateway for Containers リソースのバックエンドの正常性をプローブできます。

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 ポッドに対する次のクエリ文字列の形式で指定します: <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 ポッドに対するクエリ文字列で 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 コントローラー ポッドのポート 8001 (http://\<alb-controller-pod-ip\>:8001/metrics) で使用できます。

現在、以下のメトリックが公開されます。

メトリックの名前 説明
alb_connection_status Application Gateway for Containers リソースへの接続状態
alb_reconnection_count Application Gateway for Containers リソースへの再接続試行回数
total_config_updates サービス ルーティング構成操作の数
total_endpoint_updates バックエンド プール構成操作の数
total_deployments Application Gateway for Containers リソース デプロイの数
total_endpoints サービス内のエンドポイントの数
total_healthy_endpoints サービス内の正常なエンドポイントの数
total_unhealthy_endpoints サービス内の異常なエンドポイントの数