共用方式為


適用於容器的應用程式閘道的自訂健全狀態探查

適用於容器的應用程式閘道預設會監視所有後端目標的健康情況。 後端目標狀況良好或狀況不良時,適用於容器的應用程式閘道只會將流量散發至狀況良好的端點。

除了使用預設的健全狀況探查監視,您也可以自訂健全狀況探查,以符合應用程式的需求。 本文討論預設和自訂健全狀態探查。

健全狀態探查的順序和邏輯如下:

  1. 使用 HealthCheckPolicy 自訂資源 (CR) 的定義。
  2. 如果沒有 HealthCheckPolicy CR,則請使用整備度探查
  3. 如果未定義整備度探查,則請使用預設健全狀態探查

下列屬性構成自訂健全狀態探查:

屬性 預設值
interval 應該將健全狀態探查傳送至後端目標的頻率 (以秒為單位)。 最小間隔必須 > 0 秒。
timeout 要求在標示為失敗之前應該等待多久的時間 (以秒為單位)。 最小間隔必須 > 0 秒。
healthyThreshold 將目標端點標示為狀況良好之前的健全狀態探查數目。 最小間隔必須 > 0。
port 探查後端目標時所使用的連接埠號碼。
unhealthyTreshold 要在後端目標應該標示為狀況不良之前失敗的健全狀態探查數目。 最小間隔必須 > 0。
grpc 如果後端服務預期 gRPC 連線,則加以指定。 值必須是 {}
(http) 如果後端服務預期 http 連線,則加以指定。
(http) host 後端目標要求中所指定的主機名稱。
(http) path 要求的特定路徑。 如果應該載入單一檔案,則路徑可能是 /index.html。
(http -> match) statusCodes 包含兩個屬性 (startend),其定義從後端傳回的有效 HTTP 狀態碼範圍。
useTLS 指定健康情況檢查是否應該強制執行 TLS。 如果未指定,若健康狀態檢查使用相同的連接埠,健康情況檢查會使用與服務相同的通訊協定。 如果連接埠不同,健康情況檢查是純文字。

此圖表顯示適用於容器的應用程式閘道,使用自訂健康情況探查判斷後端健康情況。

預設的健全狀況探查

當您未定義自訂探查設定或未設定整備度探查時,適用於容器的應用程式閘道會自動設定預設健全狀況探查。 監視行為的運作方式是對已設定後端目標的 IP 位址提出 HTTP GET 要求。 針對預設探查,如果後端目標設定為使用 HTTPS,則探查會使用 HTTPS 來測試後端目標的健康狀態。

如需更多實作詳細資料,請參閱 API 規格中的 HealthCheckPolicyConfig

使用預設健全狀態探查時,會使用每個健全狀態探查屬性的下列值:

屬性 預設值
interval 5 秒鐘
timeout 30 秒
healthyTrehshold 1 個探查
unhealthyTreshold 3 個探查
port 所使用的連接埠號碼是由輸入資源中的後端連接埠號碼或 HttpRoute 資源中的 HttpRoute 後端連接埠所定義。
(http) host localhost
(http) path /
useTLS 指定 TLS 時 HTTP 和 HTTPS 的 HTTP。

1 當後端 TLSPolicy 參考了目標後端服務時 (適用於閘道 API 實作),或指定了具有 HTTPS 的 backendSetting 通訊協定的 IngressExtension 時 (適用於輸入 API 實作),將會使用 HTTPS。

注意

健康情況探查會以 Microsoft-Azure-Application-LB/AGCUser-Agent 值起始。

自訂的健全狀況探查

在閘道 API 和輸入 API 中,可以定義 HealthCheckPolicy 資源,並參考健全狀態探查應檢查的服務,來定義自訂健全狀態探查。 因為 HTTPRoute 或輸入資源使用適用於容器的應用程式閘道的類別參考來參考服務,所以會針對每個參考使用自訂健全狀態探查。

在此範例中,適用於容器的應用程式閘道所發出的健全狀態探查會將主機名稱 contoso.com 傳送至構成 test-service 的 Pod。 要求的通訊協定是 http,其路徑為 /。 每 5 秒會發出一次探查,並在判斷連線逾時之前等候 3 秒。如果收到回應,則會將 200 與 299 (含 200 和 299) 之間的 HTTP 回應碼視為狀況良好,並將所有其他回應都視為狀況不良。

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