8.2. 为特定用户覆盖网关的 low-limit RateLimitPolicy
配置的网关限制为一般情况提供一组很好的限制。但是,作为 Toystore API 的开发人员,您可能只想允许特定用户的请求数量,以及所有其他用户的一般限制。
步骤
在不同命名空间中创建一个新的
RateLimitPolicy,以覆盖之前创建的默认low-limit策略,并为特定用户设置速率限制,如下所示:kubectl apply -f - <<EOF apiVersion: kuadrant.io/v1 kind: RateLimitPolicy metadata: name: toystore-rlp namespace: ${KUADRANT_DEVELOPER_NS} spec: targetRef: group: gateway.networking.k8s.io kind: HTTPRoute name: toystore limits: "general-user": rates: - limit: 5 window: 10s counters: - expression: auth.identity.userid when: - predicate: "auth.identity.userid != 'bob'" "bob-limit": rates: - limit: 2 window: 10s when: - predicate: "auth.identity.userid == 'bob'" EOF注意应用
RateLimitPolicy可能需要几分钟时间,具体取决于您的集群。检查
RateLimitPolicy的状态是否为Accepted和Enforced,如下所示:kubectl get ratelimitpolicy -n ${KUADRANT_DEVELOPER_NS} toystore-rlp -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}{"\n"}{.status.conditions[?(@.type=="Enforced")].message}'检查 HTTPRoute 的状态现在是否受到同一命名空间中的
RateLimitPolicy的影响:kubectl get httproute toystore -n ${KUADRANT_DEVELOPER_NS} -o=jsonpath='{.status.parents[0].conditions[?(@.type=="kuadrant.io/RateLimitPolicyAffected")].message}'