Service Mesh (ASM) では、ASMCircuitBreaker カスタムリソース定義 (CRD) を使用して、宣言的にサーキットブレーキングを構成できます。このトピックでは、ASMCircuitBreaker のフィールドについて説明します。
構成例
例 1: クライアント側のサーキットブレーキング
この例では、バージョン 1.25.6.74 以降の ASM インスタンスが必要です。
次の例は、クライアント側のサーキットブレーキングを構成する方法を示しています。sleep アプリケーションが httpbin アプリケーションにアクセスするときに、10 秒以内にリクエストの 60% 以上が失敗するか、10 件を超える低速リクエストが発生した場合、サーキットブレーカーがトリップします。状態コード 499 が返されます。
例 2: Waypoint サーキットブレーキング
この例は Ambient モードにのみ適用され、バージョン 1.25.6.74 以降の ASM インスタンスが必要です。
この例では、default という名前のウェイポイント上のアプリケーションに対してサーキットブレーキングルールを構成します。サーキットブレーキングルールは例 1 と同じです。
apiVersion
ASM インスタンスのバージョンが 1.15.3.105 以降の場合は、
apiVersion: istio.alibabacloud.com/v1を使用します。Alibaba Cloud Container Service for Kubernetes (ACK) クラスターでこれを構成している場合は、対応する ASMCircuitBreaker CRD のapiVersion: istio.alibabacloud.com/v1beta1フィールドをapiVersion: istio.alibabacloud.com/v1に変更してから、再デプロイします。ASM インスタンスのバージョンが 1.15.3.105 より前の場合は、
apiVersion: istio.alibabacloud.com/v1beta1を使用します。
spec
次の表に、spec セクションのフィールドを示します。ASMCircuitBreaker の特徴とユースケースの詳細については、「ASM でのルートレベルのサーキットブレーキングの使用」をご参照ください。
フィールド | タイプ | 必須 | 説明 |
applyToTraffic | string | いいえ | サーキットブレーキングポリシーが適用されるトラフィックのタイプ。有効な値:
デフォルト値は 説明 このフィールドは、ASM 1.25 以降のバージョンでのみサポートされます。 |
ASMCircuitBreakerSpec
フィールド | タイプ | 必須 | 説明 |
workloadSelector | map<string, string> | はい | 1 つ以上のラベルを使用して、サーキットブレーキング構成が適用される Pod または仮想マシン (VM) の特定のセットを選択します。ラベル検索の範囲は、リソースが配置されている名前空間に限定されます。詳細については、「WorkloadSelector」をご参照ください。 |
isGateway | bool | いいえ | 構成がゲートウェイに適用されるかどうかを指定します。true に設定すると、構成はゲートウェイに適用されます。デフォルト値は false です。 |
configs | はい | サーキットブレーキング構成。複数の構成を指定できます。 |
CircuitBreakerConfig
フィールド | タイプ | 必須 | 説明 |
name | string | いいえ | 単一のサーキットブレーキング構成の名前。 |
match | いいえ | 一致条件。 | |
breaker_config | いいえ | ルートレベルのサーキットブレーキング構成。 | |
target_services | いいえ | サーキットブレーキングポリシーが適用されるサービス。 説明 このフィールドは、ASM 1.25 以降のバージョンでのみサポートされます。 |
TargetServiceRef
これらのフィールドは、ASM 1.25 以降でのみサポートされます。
フィールド | タイプ | 必須 | 説明 |
kind | string | いいえ | サーキットブレーキングポリシーが適用されるサービスの種類。有効な値:
デフォルト値は |
name | string | はい | サーキットブレーキングポリシーが適用されるサービスの名前。 |
namespace | string | いいえ | サーキットブレーキングポリシーが適用されるサービスが配置されている名前空間。デフォルト値は、サーキットブレーキングポリシーを定義する名前空間です。 |
port | int32 | いいえ | サーキットブレーキングポリシーが適用されるサービスのポート。 |
section_name | string | いいえ | サービスの追加プロパティ。このフィールドは
|
例 1
次の例では、ポリシーを default 名前空間の httpbin サービスのポート 8000 に適用します。
target_services:
- kind: Service
namespace: default
name: httpbin
port: 8000例 2
現在のインスタンスに次の ServiceEntry が存在すると仮定します。
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: se-httpbin-external
spec:
hosts:
- httpbin.test.com
location: MESH_EXTERNAL
ports:
- name: http
number: 80
protocol: HTTP
- name: https
number: 443
protocol: HTTPS
resolution: DNS次のポリシーは、この ServiceEntry のポート 80 に適用されます。
target_services:
- kind: ServiceEntry
namespace: default
name: se-httpbin-external
port: 80例 3
現在のインスタンスに次の VirtualService が存在すると仮定します。
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: vs-httpbin
spec:
hosts:
- httpbin.test.com
http:
- name: default
route:
- destination:
host: httpbin
port:
number: 8000次のポリシーは、VirtualService で定義されている default という名前の HTTP ルーティングルールに適用されます。
target_services:
- kind: VirtualService
namespace: default
name: vs-httpbin
section_name: defaultCircuitBreakerMatch
フィールド | タイプ | 必須 | 説明 |
vhost | いいえ | 仮想ホストの一致条件。 |
BreakerConfig
フィールド | タイプ | 必須 | 説明 |
window_size | Duration | いいえ | 統計のタイムウィンドウ。デフォルト値は 10 秒です。最大値は 12 秒です。 |
break_duration | Duration | いいえ | サーキットブレーカーが開いたままでいる期間。デフォルト値は 30 秒です。 |
slow_request_rt | Duration | いいえ | 低速リクエストの応答レイテンシのしきい値を定義します。リクエストの応答時間がこの値を超えると、低速と見なされます。 |
average_request_rt | Duration |
| サービスの平均応答時間を定義します (例: 0.01 秒)。 |
max_slow_requests | uint32 | いいえ | 低速リクエストの最大数。これは整数でなければなりません (例: 1000)。この数を超えると、新しいリクエストは拒否されます。 |
error_percent | いいえ | エラー率。タイムウィンドウ内の 5xx エラーを持つリクエストの割合がこの値を超えると、新しいリクエストは拒否されます。 | |
gateway_error_percent | いいえ | ゲートウェイエラー率。タイムウィンドウ内のゲートウェイエラー (502、503、504) を持つリクエストの割合がこの値を超えると、新しいリクエストは拒否されます。このフィールドは、バージョン 1.24.6.54 以降の ASM インスタンスでのみ有効です。 | |
min_request_amount | uint32 | いいえ | リクエストの最小数。このフィールドは error_percent 条件に対応します。デフォルト値は 0 です。少数の障害によってサーキットブレーカーがトリップするのを防ぐために、リクエストの最小数を構成できます。 |
custom_response | いいえ | リクエストがサーキットブレーカーによって拒否されたときに返すカスタム応答。 |
CustomResponse
フィールド | タイプ | 必須 | 説明 |
status_code | int32 | いいえ | HTTP 応答の状態コード。 |
header_to_add | map[string]string | いいえ | カスタム応答に追加するヘッダー。 |
body | string | いいえ | カスタム応答の本文。 |
VirtualHostMatch
フィールド | タイプ | 必須 | 説明 |
name | string | いいえ | 一致させる仮想ホストの名前。 |
port | int | いいえ | 一致させるリクエストポート。 |
route | はい | 一致させる API ルーティングルールの名前。 |
RouteMatch
フィールド | タイプ | 必須 | 説明 |
name_match | string |
| 一致させるルートの名前。これは VirtualService 内の単一のルート名に対応します。 |
header_match | いいえ | サービスリクエストのヘッダーに一致させます。複数のヘッダーを指定できます。 重要 このフィールドを使用するには、ASM インスタンスがバージョン 1.16 以降であり、対応するゲートウェイインスタンスとサイドカーが最新バージョンである必要があります。ASM インスタンスのスペックアップ方法の詳細については、「ASM インスタンスのスペックアップ」をご参照ください。サイドカープロキシのアップグレード方法の詳細については、「サイドカープロキシのアップグレード」をご参照ください。 |
HeaderMatcher
フィールド | タイプ | 必須 | 説明 | |
name | string | いいえ | ヘッダー名。 | |
次のいずれかを選択します | regex_match | string | いいえ | 正規表現を使用して値に一致させます。 |
exact_match | string | いいえ | 完全に一致を実行します。 | |
prefix_match | string | いいえ | プレフィックス一致を実行します。指定されたプレフィックスで始まる値に一致させます。 | |
suffix_match | string | いいえ | サフィックス一致を実行します。指定されたサフィックスで終わる値に一致させます。 | |
present_match | bool | いいえ |
| |
invert_match | bool | いいえ | デフォルト値は false です。
| |