使用優(yōu)雅下線功能避免流量損失
ASM網(wǎng)關(guān)在縮容或滾動重啟時,會刪除網(wǎng)關(guān)Pod而導(dǎo)致少量流量損失。啟用優(yōu)雅下線功能后,即使刪除網(wǎng)關(guān)Pod,現(xiàn)有連接在一定時間內(nèi)仍能正常傳輸,流量將不會有損失。本文介紹如何使用優(yōu)雅下線功能。
前提條件
已創(chuàng)建ASM實例,且版本為企業(yè)版或旗艦版。具體操作,請參見創(chuàng)建ASM實例。
步驟一:啟用優(yōu)雅下線功能
您可以根據(jù)實際情況,在新建網(wǎng)關(guān)時或為已有網(wǎng)關(guān)啟用優(yōu)雅下線功能。
新建網(wǎng)關(guān)時啟用優(yōu)雅下線功能
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在入口網(wǎng)關(guān)頁面,單擊創(chuàng)建。
在創(chuàng)建頁面,選擇部署集群,設(shè)置負載均衡CLB類型為公網(wǎng)訪問,在新建負載均衡CLB下選擇負載均衡規(guī)格,設(shè)置網(wǎng)關(guān)副本數(shù)為10,其他配置項保持默認。
關(guān)于配置項的說明,請參見創(chuàng)建入口網(wǎng)關(guān)。
單擊高級選項,選中優(yōu)雅下線,配置連接超時時間(秒),然后單擊創(chuàng)建。
配置項
說明
優(yōu)雅下線
選中后,當(dāng)CLB停用時,將不會對網(wǎng)關(guān)業(yè)務(wù)產(chǎn)生影響。
連接超時時間(秒)
CLB移除網(wǎng)關(guān)Pod后,會等待配置的連接超時時間,然后再斷開與Pod的連接。配置該參數(shù),可以給網(wǎng)關(guān)Pod提供一個緩沖時間,來處理現(xiàn)有的連接。網(wǎng)關(guān)Pod默認優(yōu)雅下線時間為30s,CLB側(cè)配置的超時時間通常不應(yīng)該超過30s。
為已有網(wǎng)關(guān)啟用優(yōu)雅下線功能
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在入口網(wǎng)關(guān)頁面,單擊目標網(wǎng)關(guān)的名稱。
在網(wǎng)關(guān)詳情頁面,單擊高級選項,單擊優(yōu)雅下線右側(cè)的圖標,選中優(yōu)雅下線,配置連接超時時間(秒),然后單擊確認。
步驟二:部署示例應(yīng)用
使用以下內(nèi)容,創(chuàng)建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
執(zhí)行以下命令,部署httpbin應(yīng)用。
kubectl apply -f httpbin.yaml -n default
步驟三:創(chuàng)建虛擬服務(wù)和網(wǎng)關(guān)規(guī)則
創(chuàng)建虛擬服務(wù)。
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 ,然后單擊使用YAML創(chuàng)建。
在創(chuàng)建頁面,選擇命名空間和任意場景模版,配置以下YAML,然后單擊創(chuàng)建。
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
創(chuàng)建網(wǎng)關(guān)規(guī)則。
在網(wǎng)格詳情頁面左側(cè)導(dǎo)航欄,選擇 ,然后在右側(cè)頁面,單擊使用YAML創(chuàng)建。
在創(chuàng)建頁面,選擇命名空間和任意場景模版,配置以下YAML,然后單擊創(chuàng)建。
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網(wǎng)關(guān)地址,具體操作,請參見創(chuàng)建入口網(wǎng)關(guān)。
在瀏覽器地址欄中,輸入http://<ASM網(wǎng)關(guān)地址>。
顯示如下,說明路由配置成功。
步驟四:驗證啟用優(yōu)雅下線功能后的效果
根據(jù)您使用的操作系統(tǒng),安裝并下載輕量級壓測工具hey的對應(yīng)版本。具體操作,請參見hey。
縮容ASM網(wǎng)關(guān)。
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在入口網(wǎng)關(guān)頁面,單擊目標網(wǎng)關(guān)右側(cè)的查看YAML。
在編輯對話框,設(shè)置replicaCount的參數(shù)值為1,然后單擊確定。
執(zhí)行以下命令,以200并發(fā),50000請求數(shù)請求httpbin應(yīng)用,查看啟用優(yōu)雅下線功能前后的流量損失情況。
hey -c 200 -n 50000 -disable-keepalive http://{ASM網(wǎng)關(guān)IP}/
類型
結(jié)果分析
未啟用優(yōu)雅下線功能
輸出結(jié)果如下:
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狀態(tài)碼。說明僅49747個請求訪問成功,流量有少量的損失。
啟用優(yōu)雅下線功能
輸出結(jié)果如下:
............ Status code distribution: [200] 50000 responses
50000個請求全部返回200狀態(tài)碼。說明50000個請求都訪問成功,流量沒有損失。