ASM通過ASMLocalRateLimiter CRD實現本地限流的聲明式配置。本文介紹ASMLocalRateLimiter的配置樣本和欄位說明。
配置樣本
以下配置表示對網關進行限流,從流量入口處進行限流,防止下遊服務被壓垮。設定seconds
為1
,quota
為100
,表示1s內發放100個令牌,即網關1s內最多處理100個請求。
配置中的limit.quota
只針對單個網關執行個體生效,若網關有n個執行個體,test1該路由對應的後端服務限流閾值則為n * quota,若調整了網關執行個體個數,需要對應調整限流閾值。
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMLocalRateLimiter
metadata:
name: for-api-test
namespace: default
spec:
workloadSelector:
labels:
app: istio-ingressgateway
isGateway: true
configs:
- match:
vhost:
name: "www.example1.com" # 如果gateway中配置了多個host網域名稱,填寫最後一個即可。
port: 80
route:
name_match: "test1" # VirtualService路由配置中對應route的name,若VirtualService路由配置下沒有對應name的路由,則不生效。
limit:
fill_interval:
seconds: 1
quota: 10
- match:
vhost:
name: "www.example2.com"
port: 80
route:
name_match: "test1"
limit:
fill_interval:
seconds: 1
quota: 100
欄位說明
apiVersion
若ASM執行個體版本為1.15.3.105及以上,支援使用
apiVersion: istio.alibabacloud.com/v1
。若您在ACK叢集進行了相關配置,請將對應的ASMLocalRateLimiter CRD中的apiVersion: istio.alibabacloud.com/v1beta1
修改為apiVersion: istio.alibabacloud.com/v1
,再重新進行部署。若ASM執行個體版本為1.15.3.105以下,支援使用
apiVersion: istio.alibabacloud.com/v1beta1
。
spec
spec欄位配置說明如下。關於ASMLocalRateLimiter的功能介紹和使用樣本,請參見為入口網關配置本地限流。
欄位 | 類型 | 是否必須 | 說明 |
workloadSelector | map<string, string> | 是 | 通過一個或多個標籤,指明限流配置生效的一組特定的Pod。標籤搜尋的範圍限制在資源所在的配置命名空間。更多資訊,請參見Workload Selector。 |
isGateway | bool | 否 | 是否作用於網關,預設為 |
configs | 是 | 本地限流配置,可配置多條。 |
LocalRateLimiterConfig
欄位 | 類型 | 是否必須 | 說明 |
name | string | 是 | 單條限流配置的名稱。 |
match | 是 | 匹配條件。 | |
limit | 是 | 限流閾值配置。 | |
limit_overrides | 否 | 限流閾值覆蓋配置。可通過該欄位針對特定的請求指定單獨的限流閾值。支援配置多個覆蓋配置。 說明 僅支援ASM 1.19.0及以上版本。 |
RatelimitMatch
欄位 | 類型 | 是否必須 | 說明 |
vhost | 否 | VirtualHost匹配條件。 |
LimitConfig
欄位 | 類型 | 是否必須 | 說明 |
fill_interval | Duration | 否 | 令牌填充時間單位,例如 |
quota | int | 否 | 令牌數量,必須為整數,例如:1000。 |
per_downstream_connection | bool | 否 | 指定速率限制器的令牌桶的範圍。預設為 取值說明如下:
說明 僅支援ASM 1.13.4及以上版本。 |
custom_response_body | string | 否 | 當請求被限制時,自訂返回Body內容。 說明 僅支援ASM 1.13.4及以上版本。 |
response_header_to_add | map[string]string | 否 | 當請求被限制時,自訂添加Header內容。 說明 僅支援ASM 1.13.4及以上版本。 |
RateLimitOverrideConfig
欄位 | 類型 | 是否必須 | 說明 |
request_match | 是 | 限流閾值覆蓋配置指定的請求匹配條件。只有匹配條件的請求會應用覆蓋配置中的限流閾值。 | |
limit | 是 | 限流閾值覆蓋配置指定的請求限流閾值。 說明 當在限流閾值覆蓋配置(RateLimitOverrideConfig)中聲明limit欄位時,只有fill_interval和quota欄位生效,其它欄位(per_downstream_connection、custom_response_body、response_header_to_add)與LocalRateLimiterConfig.limit欄位中的聲明保持一致。 |
VirtualHostMatch
欄位 | 類型 | 是否必須 | 說明 |
name | string | 是 | 匹配的 |
port | int | 否 | 匹配的請求連接埠。 |
route | 否 | 匹配的請求介面對應的路由名稱。 |
RouteMatch
欄位 | 類型 | 是否必須 | 說明 |
name_match | string | 否 | 匹配的路由名稱,對應 |
header_match | 否 | 匹配服務要求的header,支援配置多個。 重要 在ASM 1.19.0及以上版本,該欄位被標註為廢棄(Deprecated),請使用RateLimitOverrideConfig對請求進行匹配。 |
RequestMatcher
RequestMatcher中的多個欄位可以同時使用。同時使用時,請求必須同時符合每個欄位的匹配條件才會被匹配。
欄位 | 類型 | 是否必須 | 說明 |
header_match | 否 | 匹配請求的header,支援配置多個。 | |
query_match | 否 | 匹配請求的查詢參數(query params),支援配置多個。 |
HeaderMatcher
欄位 | 類型 | 是否必須 | 說明 | |
name | string | 否 | Header名稱。 | |
任選其一 | regex_match | string | 否 | Regex匹配。 |
exact_match | string | 否 | 精確匹配。 | |
prefix_match | string | 否 | 首碼匹配,以什麼開頭進行匹配。 | |
suffix_match | string | 否 | 尾碼匹配,以什麼結尾進行匹配。 | |
present_match | bool | 否 |
| |
invert_match | bool | 否 | 預設為false。
|
QueryParameterMatcher
欄位 | 類型 | 是否必須 | 說明 | |
name | string | 是 | 查詢參數的名稱。 | |
任選其一 | exact_match | string | 否 | 精確匹配查詢參數的內容。 |
prefix_match | string | 否 | 首碼匹配查詢參數的內容。 | |
suffix_match | string | 否 | 尾碼匹配查詢參數的內容。 | |
regex_match | string | 否 | Regex匹配查詢參數的內容。 | |
contains_match | string | 否 | 包含匹配查詢參數的內容,即要求查詢參數的內容必須包含某個子串。 | |
present_match | bool | 否 |
| |
ignore_case | bool | 否 | 是否在匹配查詢參數時忽略大小寫。 |