全部產品
Search
文件中心

Alibaba Cloud Service Mesh:ASMLocalRateLimiter CRD說明

更新時間:Jul 31, 2025

ASM通過ASMLocalRateLimiter CRD實現本地限流的聲明式配置。本文介紹ASMLocalRateLimiter的配置樣本和欄位說明。

配置樣本

樣本一:網關限流

以下配置表示對網關進行限流,從流量入口處進行限流,防止下遊服務被壓垮。設定seconds1quota100,表示1s內發放100個令牌,即網關1s內最多處理100個請求。

說明

配置中的limit.quota只針對單個網關執行個體生效,若網關有n個執行個體,test1該路由對應的後端服務限流閾值則為n * quota,若調整了網關執行個體個數,需要對應調整限流閾值。

展開查看YAML內容

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

樣本二:用戶端限流

說明

本樣本需要執行個體版本≥1.25.6.74。

以下樣本限制了 sleep 應用 10 秒內只能請求一次 httpbin 服務。

展開查看YAML內容

apiVersion: istio.alibabacloud.com/v1
kind: ASMLocalRateLimiter
metadata:
  name: client-limit
spec:
  configs:
    - limit:
        custom_response_body: '{"ret_code": xxx, "message": "Your request be limited" }'
        fill_interval:
          seconds: 10
        quota: 1
      target_services:
      - name: httpbin
        port: 8000
  applyToTraffic: sidecar_outbound
  workloadSelector:
    labels:
      app: sleep

樣本三:服務端限流

說明

本樣本需要執行個體版本≥1.25.6.74。

以下樣本限制了 httpbin 應用 10 秒內只能被訪問一次。

展開查看YAML內容

apiVersion: istio.alibabacloud.com/v1
kind: ASMLocalRateLimiter
metadata:
  name: server-limit
spec:
  configs:
    - limit:
        custom_response_body: '{"ret_code": xxx, "message": "Your request be limited" }'
        fill_interval:
          seconds: 10
        quota: 1
      target_services:
      - name: httpbin
        port: 8000
  applyToTraffic: sidecar_inbound
  workloadSelector:
    labels:
      app: httpbin

樣本四:Waypoint限流

以下樣本限制了名為default的 waypoint 10 秒內只能轉寄一個請求至 httpbin 服務。

本樣本僅適用於Ambient模式,且需要執行個體版本≥1.25.6.74

展開查看YAML內容

apiVersion: istio.alibabacloud.com/v1
kind: ASMLocalRateLimiter
metadata:
  name: waypoint-limit
spec:
  configs:
    - limit:
        custom_response_body: '{"ret_code": xxx, "message": "Your request be limited" }'
        fill_interval:
          seconds: 10
        quota: 1
      target_services:
      - name: httpbin
        port: 8000
  applyToTraffic: waypoint
  workloadSelector:
    labels:
      gateway.networking.k8s.io/gateway-name: default

欄位說明

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

是否作用於網關,預設為false

configs

LocalRateLimiterConfig[]

本地限流配置,可配置多條。

applyToTraffic

string

限流策略應用的流量類型。選擇性參數:

  • sidecar_inbound:sidecar入向流量,即掛載了sidecar的應用作為服務端接收的流量。

  • sidecar_outbound:sidecar出向流量,即掛載了sidecar的應用作為用戶端發送的流量。

  • waypoint:Ambient模式下,通過Waypoint處理的流量。

  • gateway:網關流量。

預設值為sidecar_inbound

說明

該欄位僅支援ASM 1.25及以上版本。

LocalRateLimiterConfig

欄位

類型

是否必須

說明

name

string

單條限流配置的名稱。

match

RatelimitMatch

匹配條件。

limit

LimitConfig

限流閾值配置。

limit_overrides

RateLimitOverrideConfig[]

限流閾值覆蓋配置。可通過該欄位針對特定的請求指定單獨的限流閾值。支援配置多個覆蓋配置。

說明

僅支援ASM 1.19.0及以上版本。

target_services

TargetServiceRef[]

限流策略作用的服務。

說明

該欄位僅支援ASM 1.25及以上版本。

TargetServiceRef

說明

此類型欄位僅支援ASM 1.25及以上版本。

欄位

類型

是否必須

說明

kind

string

限流策略作用的服務 kind。可選值:

  • Service

  • ServiceEntry

  • VirtualService

預設為Service

name

string

限流策略作用的服務名稱。

namespace

string

限流策略作用的服務所處的命名空間。預設為您定義的限流策略所處命名空間。

port

int32

限流策略作用的服務連接埠。

section_name

string

服務的額外屬性,當前只對VirtualService生效。

  • VirtualService:取值為VirtualService中定義的 route 名稱。

樣本一

以下樣本定義了 default 命名空間的 httpbin Service 的 8000 連接埠上。

target_services:
- kind: Service
  namespace: default
  name: httpbin
  port: 8000

樣本二

當前執行個體中存在如下 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

樣本三

當前執行個體中存在以下 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 中定義的 http 名為 default 的路由規則上。

target_services:
- kind: VirtualService
  namespace: default
  name: vs-httpbin
  section_name: default

RemoteAddressMatcher

欄位

類型

是否必須

說明

distinct

bool

是否根據請求的不同源 IP 分別限流,如果distinct設為true,不能填寫 address。

說明

該欄位僅支援ASM 1.25及以上版本。

RatelimitMatch

欄位

類型

是否必須

說明

vhost

VirtualHostMatch

VirtualHost匹配條件。

LimitConfig

欄位

類型

是否必須

說明

status

int

自訂被限流時的HTTP響應代碼,當請求被限流後,該響應代碼被返回,預設值為429,該值必須>=400。

說明

支援此欄位需ASM版本 >= 1.24.6.64

fill_interval

Duration

令牌填充時間單位,例如seconds: 1或者nanos: 1000nanos表示納秒。

quota

int

令牌數量,必須為整數,例如:1000。

per_downstream_connection

bool

指定速率限制器的令牌桶的範圍。預設為false

取值說明如下:

  • false:令牌桶將在所有背景工作執行緒共用,速率限制將應用於每個Envoy進程。

  • true:為每個串連分配一個令牌桶,速率限制適用於每個串連,允許在每個串連的基礎上對請求進行速率限制。

說明

僅支援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

RequestMatcher

限流閾值覆蓋配置指定的請求匹配條件。只有匹配條件的請求會應用覆蓋配置中的限流閾值。

limit

LimitConfig

限流閾值覆蓋配置指定的請求限流閾值。

說明

當在限流閾值覆蓋配置(RateLimitOverrideConfig)中聲明limit欄位時,只有fill_interval和quota欄位生效,其它欄位(per_downstream_connection、custom_response_body、response_header_to_add)與LocalRateLimiterConfig.limit欄位中的聲明保持一致。

VirtualHostMatch

欄位

類型

是否必須

說明

name

string

匹配的VirtualHost名稱。

port

int

匹配的請求連接埠。

route

RouteMatch

匹配的請求介面對應的路由名稱。

RouteMatch

欄位

類型

是否必須

說明

name_match

string

匹配的路由名稱,對應VirtualService下的單條路由名稱。

header_match

HeaderMatcher[]

匹配服務要求的header,支援配置多個。

重要

在ASM 1.19.0及以上版本,該欄位被標註為廢棄(Deprecated),請使用RateLimitOverrideConfig對請求進行匹配。

RequestMatcher

說明

RequestMatcher中的多個欄位可以同時使用。同時使用時,請求必須同時符合每個欄位的匹配條件才會被匹配。

欄位

類型

是否必須

說明

header_match

HeaderMatcher[]

匹配請求的header,支援配置多個。

query_match

QueryParameterMatcher[]

匹配請求的查詢參數(query params),支援配置多個。

HeaderMatcher

欄位

類型

是否必須

說明

name

string

Header名稱。

任選其一

regex_match

string

Regex匹配。

exact_match

string

精確匹配。

prefix_match

string

首碼匹配,以什麼開頭進行匹配。

suffix_match

string

尾碼匹配,以什麼結尾進行匹配。

present_match

bool

  • 配置為true,表示存在Header即可,無需關注Header Value的取值。

  • 配置為false,表示不存在Header。

invert_match

bool

預設為false

  • 配置為true,表示上述匹配結果取反。

  • 配置為false,表示遵循上述匹配結果。

distinct

bool

是否為相同要求標頭的不同值分別分配限流 bucket,如果distinct設為true,不能使用其他 match 類型。

說明

該欄位僅支援ASM 1.25及以上版本。

QueryParameterMatcher

欄位

類型

是否必須

說明

name

string

查詢參數的名稱。

任選其一

exact_match

string

精確匹配查詢參數的內容。

prefix_match

string

首碼匹配查詢參數的內容。

suffix_match

string

尾碼匹配查詢參數的內容。

regex_match

string

Regex匹配查詢參數的內容。

contains_match

string

包含匹配查詢參數的內容,即要求查詢參數的內容必須包含某個子串。

present_match

bool

  • 配置為true,表示進行存在性匹配,即存在指定的查詢參數即可,不關注內容。

  • 不能配置false,配置為false等同於不配置,需要指定其他匹配條件。

ignore_case

bool

是否在匹配查詢參數時忽略大小寫。