AHAS為網格化應用提供控制全局流量的能力,例如Istio、Envoy服務網格。本文介紹如何在AHAS中接入Istio服務網格(包括阿里云服務網格ASM)、Envoy集群并為其配置流控規則。
前提條件
已開通AHAS專業版,若沒有開通,請進入開通頁面。背景信息
阿里云服務網格ASM(Alibaba Cloud Service Mesh)提供了一個全托管式的服務網格平臺,兼容于社區Istio開源服務網格,用于簡化服務的治理。更多信息,請參見什么是服務網格ASM?。AHAS Mesh防護基于Envoy Global Rate Limiting Service(RLS)接口實現,防護原理如下圖所示。
說明 Service Mesh與AHAS Token Server的通信會帶來一定的網絡開銷,響應時間可能會略有上升(同個Region一般會在2 ms~5 ms左右)。
操作步驟
- 登錄AHAS控制臺,在左側導航欄選擇 。
- 單擊頁面右上角的申請Mesh流控集群。
- 在防護詳情頁面,填寫集群名稱等信息。
參數 描述 集群名稱 填寫集群的名稱。集群名稱應包含1~63個字符。 Envoy流控domain 流控服務的域,需要與步驟5中要配置的EnvoyFilter里面的domain相對應。 集群預計QPS 該集群內需要流控的接口預估的最大QPS,代表可能到來的最大流量,而非限流閾值,用于為Token Server自動分配提供參考。 - 單擊下一步,集群申請成功。
- 單擊Mesh流控接入,可選擇接入Istio或Envoy。
- 接入Istio
AHAS為Istio服務網格提供集群流控的能力。要為Istio集群接入AHAS Mesh流控,需要為Istio創建對應的EnvoyFilter CRD配置。
- 單擊Istio接入頁簽。
- 復制代碼,將其粘貼至新建的YAML文件中。
- 在Istio集群中,通過執行
kubectl apply
命令使其生效,完成接入。
說明 目前Istio流控基于Envoy global rate limiting實現,支持根據來源集群、目標集群、Header值等請求屬性進行流控,詳情請參見Envoy相關文檔。 - 接入Envoy
AHAS為Envoy HTTP流量提供集群流控的能力。Envoy接入需要按下面步驟編輯Envoy配置文件。
- 單擊Envoy接入頁簽。
- 復制頁面中第一步的示例代碼,為需要進行流控的路由(route)所在的VirtualHost配置流控項(rate_limits),流控項由一系列的流控參數rate_limit_action構成。說明
- action里面的generic_key需要配置成AHAS集群流控的license,否則流控將不會生效。該項將不會作為流控的判斷屬性。當前集群流控的license會在頁面的代碼中顯示。
- Envoy目前支持根據來源集群、目標集群、通用標識(generic_key)、Header值等請求屬性進行流控,詳情請參考Envoy相關文檔。
- 復制頁面中第二步的示例代碼,在Clusters中添加AHAS Mesh流控Cluster,配置對應的RLS token server IP和端口。
- 復制頁面中第三步的示例代碼,在http_filters中添加envoy.rate_limit配置,指定上一步配置的AHAS Mesh流控Cluster。
- 配置文件修改完成后,重啟Envoy或通過xDS動態reload配置文件,完成接入。
- 接入Istio
- 在集群規則配置區域,單擊添加,進入規則配置對話框,為目標集群添加規則。
參數 描述 規則名稱 用于標識該規則,不超過64個字符,規則名稱不能重復。 閾值 集群閾值,滿足流控條件的請求量到達該閾值后會被拒絕。 統計窗口時長 集群流控統計的時間窗口長度,取值范圍為1秒~24小時。 匹配規則 流控針對的請求屬性的匹配規則,如針對不同來源的請求分別限制不同的規則。目前支持以下匹配規則(與Envoy descriptor保持一致): - 來源集群:source_cluster。
- 目標集群:destination_cluster。
- 通用標識:generic_key。
- 自定義:自定義Key,名稱不可重復。
- 單擊確定,完成規則創建。執行結果:
觸發Mesh中的服務調用,觀察服務的返回值來判斷流控是否生效。返回
429 Too Many Requests
狀態碼即表示流控成功。
文檔內容是否對您有幫助?