ASM網關在縮容或滾動重啟時,會刪除網關Pod而導致少量流量損失。啟用優雅下線功能後,即使刪除網關Pod,現有串連在一定時間內仍能正常傳輸,流量將不會有損失。本文介紹如何使用優雅下線功能。
適用範圍
已建立ASM執行個體,且版本為企業版或旗艦版。具體操作,請參見建立ASM執行個體。
步驟一:啟用優雅下線功能
已有網關啟用功能
從ASM的1.26版本開始,變更優雅下線配置會導致網關重啟,請在低峰期操作。
控制台
登入ASM控制台,在左側導覽列,選擇。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇。
在入口網關頁面,單擊目標網關的名稱。
在網關詳情頁面,單擊進階選項,單擊優雅下線右側的
表徵圖,選中優雅下線,配置連線逾時時間(秒),然後單擊確認。
YAML配置(ASM版本低於1.26)
為網關YAML配置添加註解(serviceAnnotations)。
apiVersion: istio.alibabacloud.com/v1
kind: IstioGateway
metadata:
name: ingressgateway
namespace: istio-system
spec:
gatewayType: ingress
serviceAnnotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain: 'on' # 開啟負載平衡串連排空功能,即優雅下線
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout: '10' # 串連排空逾時時間長度,取值範圍[10, 30]
...YAML配置(ASM版本為1.26及以上)
為網關YAML配置添加註解(annotations)。
apiVersion: istio.alibabacloud.com/v1
kind: IstioGateway
metadata:
annotations:
# 如果是CLB、NLB類型的網關,取值範圍[10, 890]
# 如果是ClusterIP和NodePort類型,不設上限。
asm.alibabacloud.com/gateway-drain-timeout-seconds: "30"
name: ingressgateway
namespace: istio-system
...建立網關時啟用功能
登入ASM控制台,在左側導覽列,選擇。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇。
在入口網關頁面,單擊建立。
在建立頁面,選擇部署叢集,設定負載平衡CLB類型為公網訪問,在建立負載平衡CLB下選擇負載平衡規格,設定網關副本數為10,其他配置項保持預設。
關於配置項的說明,請參見建立入口網關。
單擊進階選項,選中優雅下線,配置連線逾時時間(秒),然後單擊建立。
配置項
說明
優雅下線
選中後,當網關Pod滾動重啟時,CLB會平滑排空現有串連,從而最大限度減少對業務的影響。能更好地支援配置變更、網關升級等情境。
連線逾時時間(秒)
CLB移除網關Pod後,會等待配置的連線逾時時間,然後再斷開與Pod的串連。配置該參數,可以給網關Pod提供一個緩衝時間,來處理現有的串連。網關Pod預設優雅下線時間為30秒,CLB側配置的逾時時間通常不應該超過30秒。
1.26版本開始支援最長890秒的逾時配置。
步驟二:部署樣本應用
使用以下內容,建立httpbin.yaml。
部署httpbin應用。
kubectl apply -f httpbin.yaml -n default
步驟三:建立虛擬服務和網關規則
建立虛擬服務。
登入ASM控制台,在左側導覽列,選擇。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇,然後單擊使用YAML建立。
在建立頁面,選擇命名空間和任意情境模板,配置以下YAML,然後單擊建立。
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: httpbin namespace: default spec: gateways: - httpbin-gateway hosts: - '*' http: - route: - destination: host: httpbin port: number: 8000
建立網關規則。
在網格詳情頁面左側導覽列,選擇,然後在右側頁面,單擊使用YAML建立。
在建立頁面,選擇命名空間和任意情境模板,配置以下YAML,然後單擊建立。
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: httpbin-gateway namespace: default spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP
驗證路由配置是否成功。
擷取ASM網關地址,具體操作,請參見建立入口網關。
在瀏覽器地址欄中,輸入http://<ASM網關地址>。
顯示如下,說明路由配置成功。

步驟四:驗證啟用優雅下線功能的效果
根據您使用的作業系統,下載並安裝輕量級壓測工具hey的對應版本。具體操作,請參見hey。
縮容ASM網關。
登入ASM控制台,在左側導覽列,選擇。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇。
在入口網關頁面,單擊目標網關右側的查看YAML。
在編輯對話方塊,將
replicaCount的參數值設定為1,然後單擊確定。
執行以下命令,以200並發、50000請求數請求httpbin應用,查看啟用優雅下線功能前後的流量損失情況。
hey -c 200 -n 50000 -disable-keepalive http://<ASM網關地址>/類型
結果分析
未啟用優雅下線功能
輸出結果如下:
Status code distribution: [200] 49747 responses Error distribution: [253] Get "http://47.55.2xx.xx": dial tcp 47.55.2xx.xx:80: connect: connection refused50000個請求中僅49747個請求返回200狀態代碼,說明僅49747個請求訪問成功,流量有少量損失。
啟用優雅下線功能
輸出結果如下:
............ Status code distribution: [200] 50000 responses50000個請求全部返回200狀態代碼,說明50000個請求都訪問成功,流量沒有損失。