次の方法で共有


Application Gateway for Containers のカスタム正常性プローブ

Application Gateway for Containers では、既定ですべてのバックエンド ターゲットの正常性を監視します。 バックエンド ターゲットが正常または異常になると、Application Gateway for Containers はトラフィックを正常なエンドポイントにのみ分散します。

既定の正常性プローブによる監視を行うだけでなく、アプリケーションの要件に合わせて正常性プローブをカスタマイズすることもできます。 この記事では、既定とカスタムの両方の正常性プローブについて説明します。

正常性プローブの順序とロジックは次のとおりです。

  1. HealthCheckPolicy カスタム リソース (CR) の定義を使用します。
  2. HealthCheckPolicy CR がない場合は、readiness probe を使用します
  3. readiness probe が定義されていない場合は、既定の正常性プローブを使用します

カスタムの正常性プローブは次のプロパティで構成されています。

プロパティ Default Value
interval 正常性プローブをバックエンド ターゲットに送信する頻度 (秒単位)。 最小間隔は、0 秒より大きい必要があります。
タイムアウト 要求を失敗とマークするまで待機する秒数。 最小間隔は、0 秒より大きい必要があります。
healthyThreshold ターゲット エンドポイントを正常にマークする前の正常性プローブの数。 最小間隔は、0 より大きい必要があります。
port バックエンド ターゲットをプローブするときに使用されるポート番号。
unhealthyTreshold バックエンド ターゲットを異常とラベル付けする前に失敗する正常性プローブの数。 最小間隔は、0 より大きい必要があります。
grpc バックエンド サービスが gRPC 接続を想定している場合に指定します。 値は {} である必要があります。
(http) バックエンド サービスが http 接続を想定している場合に指定します。
(http) host バックエンド ターゲットへの要求で指定されたホスト名。
(http) path 要求に対する特定のパス。 1 つのファイルを読み込む必要がある場合、パスは例えば /index.html になります。
(http -> match) statusCodes バックエンドから返される有効な HTTP 状態コードの範囲を定義する、startend の 2 つのプロパティが含まれています。
useTLS 正常性チェックで TLS を適用するかどうかを指定します。 指定しておらず、正常性チェックに同じポートが使用される場合、正常性チェックはサービスと同じプロトコルを使用します。 ポートが異なる場合、正常性チェックはクリアテキストです。

カスタム正常性プローブを使用してバックエンドの正常性を判断する Application Gateway for Containers を示す図。

既定の正常性プローブ

カスタム プローブ構成を定義しない場合、または readiness probe を構成しない場合は、Application Gateway for Containers により既定の正常性プローブが自動で構成されます。 監視は、構成済みのバックエンド ターゲットの IP アドレスに対して HTTP GET 要求を行うことで実行されます。 既定のプローブでは、バックエンド ターゲットが HTTPS に対応するように構成されている場合、プローブはバックエンド ターゲットの正常性をテストする際に HTTPS を使用します。

実装の詳細については、API 仕様の「HealthCheckPolicyConfig」を参照してください。

既定の正常性プローブを使用する場合は、各正常性プローブ プロパティに対して次の値が使用されます。

プロパティ Default Value
interval 5 秒
タイムアウト 30 秒
healthyTrehshold 1 プローブ
unhealthyTreshold 3 プローブ
port 使われるポート番号は、Ingress リソースのバックエンド ポート番号、または HttpRoute リソースの HttpRoute バックエンド ポートによって定義されます。
(http) host localhost
(http) path /
useTLS HTTP の場合は HTTP、TLS が指定されている場合は HTTPS。

1 HTTPS は、backendTLSPolicy がターゲット バックエンド サービスを参照する場合 (ゲートウェイ API 実装用)、または HTTPS の backendSetting プロトコルによる IngressExtension を指定する場合 (イングレス API 実装用) に使用されます。

Note

正常性プローブは、Microsoft-Azure-Application-LB/AGCUser-Agent 値で開始します。

カスタムの正常性プローブ

Gateway API と Ingress API の両方で、HealthCheckPolicyPolicy リソースを定義し、正常性プローブがチェックする必要があるサービスを参照することで、カスタム正常性プローブを定義できます。 このサービスは、Application Gateway for Containers へのクラス参照を持つ HTTPRoute または Ingress リソースによって参照されるため、カスタム正常性プローブは各参照に使用されます。

この例では、Application Gateway for Containers によって出力される正常性プローブは、ホスト名 contoso.com を、test-service を構成するポッドに送信します。 要求されるプロトコルは http (/ のパス付き) です。 プローブは 5 秒ごとに出力され、接続がタイムアウトしたことを確認するまで 3 秒待ちます。応答を受信した場合、200 から 299 の HTTP 応答コード (200 と 299 を含む) が正常と見なされ、他のすべての応答は異常と見なされます。

kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: HealthCheckPolicy
metadata:
  name: gateway-health-check-policy
  namespace: test-infra
spec:
  targetRef:
    group: ""
    kind: Service
    name: test-service
    namespace: test-infra
  default:
    interval: 5s
    timeout: 3s
    healthyThreshold: 1
    unhealthyThreshold: 1
    port: 8123
    # grpc: {} # defined if probing a gRPC endpoint
    http:
      host: contoso.com
      path: /
      match:
        statusCodes: 
        - start: 200
          end: 299
    useTLS: true
EOF