ASM網關在縮容或滾動重啟時,會刪除網關Pod而導致少量流量損失。啟用優雅下線功能后,即使刪除網關Pod,現有連接在一定時間內仍能正常傳輸,流量將不會有損失。本文介紹如何使用優雅下線功能。
前提條件
已創建ASM實例,且版本為企業版或旗艦版。具體操作,請參見創建ASM實例。
步驟一:啟用優雅下線功能
您可以根據實際情況,在新建網關時或為已有網關啟用優雅下線功能。
新建網關時啟用優雅下線功能
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 。
在入口網關頁面,單擊創建。
在創建頁面,選擇部署集群,設置負載均衡CLB類型為公網訪問,在新建負載均衡CLB下選擇負載均衡規格,設置網關副本數為10,其他配置項保持默認。
關于配置項的說明,請參見創建入口網關。
單擊高級選項,選中優雅下線,配置連接超時時間(秒),然后單擊創建。
配置項
說明
優雅下線
選中后,當CLB停用時,將不會對網關業務產生影響。
連接超時時間(秒)
CLB移除網關Pod后,會等待配置的連接超時時間,然后再斷開與Pod的連接。配置該參數,可以給網關Pod提供一個緩沖時間,來處理現有的連接。網關Pod默認優雅下線時間為30s,CLB側配置的超時時間通常不應該超過30s。
為已有網關啟用優雅下線功能
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 。
在入口網關頁面,單擊目標網關的名稱。
在網關詳情頁面,單擊高級選項,單擊優雅下線右側的圖標,選中優雅下線,配置連接超時時間(秒),然后單擊確認。
步驟二:部署示例應用
使用以下內容,創建httpbin.yaml。
apiVersion: v1 kind: ServiceAccount metadata: name: httpbin --- apiVersion: v1 kind: Service metadata: name: httpbin labels: app: httpbin service: httpbin spec: ports: - name: http port: 8000 targetPort: 80 selector: app: httpbin --- apiVersion: apps/v1 kind: Deployment metadata: name: httpbin spec: replicas: 1 selector: matchLabels: app: httpbin version: v1 template: metadata: labels: app: httpbin version: v1 spec: serviceAccountName: httpbin containers: - image: docker.io/kennethreitz/httpbin imagePullPolicy: IfNotPresent name: httpbin ports: - containerPort: 80
執行以下命令,部署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網關IP}/
類型
結果分析
未啟用優雅下線功能
輸出結果如下:
Status code distribution: [200] 49747 responses Error distribution: [253] Get "http://47.55.2xx.xx": dial tcp 47.55.2xx.xx:80: connect: connection refused
50000個請求中僅49747個請求返回200狀態碼。說明僅49747個請求訪問成功,流量有少量的損失。
啟用優雅下線功能
輸出結果如下:
............ Status code distribution: [200] 50000 responses
50000個請求全部返回200狀態碼。說明50000個請求都訪問成功,流量沒有損失。