Application Gateway for Containers のカスタム正常性プローブ
Application Gateway for Containers では、既定ですべてのバックエンド ターゲットの正常性を監視します。 バックエンド ターゲットが正常または異常になると、Application Gateway for Containers はトラフィックを正常なエンドポイントにのみ分散します。
既定の正常性プローブによる監視を行うだけでなく、アプリケーションの要件に合わせて正常性プローブをカスタマイズすることもできます。 この記事では、既定とカスタムの両方の正常性プローブについて説明します。
正常性プローブの順序とロジックは次のとおりです。
- HealthCheckPolicy カスタム リソース (CR) の定義を使用します。
- HealthCheckPolicy CR がない場合は、readiness probe を使用します
- 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 状態コードの範囲を定義する、start と end の 2 つのプロパティが含まれています。 |
useTLS | 正常性チェックで TLS を適用するかどうかを指定します。 指定しておらず、正常性チェックに同じポートが使用される場合、正常性チェックはサービスと同じプロトコルを使用します。 ポートが異なる場合、正常性チェックはクリアテキストです。 |
既定の正常性プローブ
カスタム プローブ構成を定義しない場合、または 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/AGC
の User-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