全部產品
Search
文件中心

Alibaba Cloud Service Mesh:ASMLocalRateLimiter CRD說明

更新時間:Jul 31, 2025

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

配置樣本

樣本一:網關限流

以下配置表示對網關進行限流,從流量入口處進行限流,防止下遊服務被壓垮。設定seconds為1,quota為100,表示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: 1000。nanos表示納秒。

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

否

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