限流實作可以在Istio中用EnvoyFilter部署的這個政策來控管流入,EnvoyFilter是Istio自定義的一種網路資源物件,主要實行原理在於Istio網路中的Sidecar機制,可透過Sidecar的監聽作用得知服務的Request然而去做相對應的回應或是動作,比方來說叢集中特定服務中的特定API路徑可以根據EnvoyFilter中的route可指定name方式鎖定該API限制該流量。
關於流量的流速(T/min)需要部署在ratelimit服務上,至於EnvoyFilter該服務需設置在istio-system上的namespace以下有EnvoyFilter設定例子:
spec:
configPatches:
applyTo: HTTP_ROUTE
match:
context: GATEWAY
routeConfiguration:
vhost:
name: www.test.com:80 #對應網址
route:
action: ANY
name: api_path #API路徑
patch:
operation: MERGE
value:
route:
rate_limits:
actions:
generic_key:
descriptor_value: testkey #ratelimit服務限制key
remote_address:
applyTo: HTTP_ROUTE
match:
context: GATEWAY
routeConfiguration:
vhost:
name: www.test.com:443
route:
action: ANY
name: api_path
patch:
operation: MERGE
value:
route:
rate_limits:
actions:
generic_key:
descriptor_value: testkey
remote_address: