4.4. ステップ 4 - ゲートウェイの RateLimitPolicy をオーバーライドする
設定されたゲートウェイ制限は、一般的なケースに適した制限セットとして使用できます。ただし、Toystore API の開発者は、特定ユーザーのリクエストには具体的な数の制限を、その他のユーザーに対しては汎用の制限を適用することが必要になる場合もあります。
手順
次のコマンドを実行して、特定ユーザーに流量制御を設定します。
kubectl apply -f - <<EOF apiVersion: kuadrant.io/v1 kind: RateLimitPolicy metadata: name: toystore spec: targetRef: group: gateway.networking.k8s.io kind: HTTPRoute name: toystore limits: "general-user": rates: - limit: 1 duration: 3 unit: second counters: - metadata.filter_metadata.envoy\.filters\.http\.ext_authz.identity.userid when: - selector: metadata.filter_metadata.envoy\.filters\.http\.ext_authz.identity.userid operator: neq value: bob "bob-limit": rates: - limit: 2 duration: 3 unit: second when: - selector: metadata.filter_metadata.envoy\.filters\.http\.ext_authz.identity.userid operator: eq value: bob EOF注記クラスターによっては、
RateLimitPolicyが適用されるまでに数分間がかかる場合があります。別の例として、bob に対して、その他ユーザーの 2 倍のリクエスト数を付与できます。
新しいセットアップをテストするには、次のとおり alice としてリクエストを送信します。
while :; do curl --resolve api.${rootDomain}:443:${INGRESS_HOST} --write-out '%{http_code}\n' --silent --output /dev/null -H 'Authorization: APIKEY IAMALICE' "https://api.${rootDomain}/cars" | grep -E --color "\b(429)\b|$"; sleep 1; done次のとおり、bob としてリクエストを送信します。
while :; do curl --resolve api.${rootDomain}:443:${INGRESS_HOST} --write-out '%{http_code}\n' --silent --output /dev/null -H 'Authorization: APIKEY IAMBOB' "https://api.${rootDomain}/cars" | grep -E --color "\b(429)\b|$"; sleep 1; done注記プラットフォームエンジニアのワークフローで説明されているとおり、DNS プロバイダーをセットアップして
DNSPolicyを設定した場合は、--resolve api.${rootDomain}:443:${INGRESS_HOST}フラグを省略できます。たとえば alice の場合は、次のようになります。while :; do curl --write-out '%{http_code}\n' --silent --output /dev/null -H 'Authorization: APIKEY IAMALICE' "https://api.${rootDomain}/cars" | grep -E --color "\b(429)\b|$"; sleep 1; done注記複数のクラスターでこのガイドの手順を実行すると、
HTTPRouteホスト名の DNS レコードに複数の IP アドレスが含まれるようになります。これは、DNS プロバイダーが異なるレスポンスをルックアップに送信するため、リクエストがクラスターをまたいでラウンドロビンパターンで実行されることを意味します。