ASM網關在縮容或滾動重啟時,會刪除網關Pod而導致少量流量損失。啟用優雅下線功能後,即使刪除網關Pod,現有串連在一定時間內仍能正常傳輸,流量將不會有損失。本文介紹如何使用優雅下線功能。
前提條件
已建立ASM執行個體,且版本為企業版或旗艦版。具體操作,請參見建立ASM執行個體。
步驟一:啟用優雅下線功能
您可以根據實際情況,在建立網關時或為已有網關啟用優雅下線功能。
建立網關時啟用優雅下線功能
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在入口網關頁面,單擊建立。
在建立頁面,選擇部署叢集,設定負載平衡CLB類型為公網訪問,在建立負載平衡CLB下選擇負載平衡規格,設定網關副本數為10,其他配置項保持預設。
關於配置項的說明,請參見建立入口網關。
單擊進階選項,選中優雅下線,配置連線逾時時間(秒),然後單擊建立。
配置項
說明
優雅下線
選中後,當CLB停用時,將不會對網關業務產生影響。
連線逾時時間(秒)
CLB移除網關Pod後,會等待配置的連線逾時時間,然後再斷開與Pod的串連。配置該參數,可以給網關Pod提供一個緩衝時間,來處理現有的串連。網關Pod預設優雅下線時間為30s,CLB側配置的逾時時間通常不應該超過30s。
為已有網關啟用優雅下線功能
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在入口網關頁面,單擊目標網關的名稱。
在網關詳情頁面,單擊進階選項,單擊優雅下線右側的表徵圖,選中優雅下線,配置連線逾時時間(秒),然後單擊確認。
步驟二:部署樣本應用
使用以下內容,建立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網關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個請求都訪問成功,流量沒有損失。