配置流量降級可以使請求的目標服務沒有可用端點時,將請求降級轉發到提前指定的另一組服務端點。本文介紹如何配置流量降級。
前提條件
已完成準備工作,并部署helloworld服務和sleep服務。具體操作,請參見準備工作。
操作步驟
使用以下內容,配置目標規則。具體操作,請參見管理目標規則。
apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: helloworld namespace: default spec: host: helloworld subsets: - labels: version: v1 name: v1 - labels: version: v2 name: v2
使用以下內容,創建虛擬服務,設置發往helloworld服務的請求都發往helloworld的v1子集,當v1子集不存在可用端點時,請求將降級到helloworld服務的v2子集。具體操作,請參見管理虛擬服務。
驗證流量降級是否生效。
在ACK集群對應的KubeConfig環境下,執行以下命令。
kubectl exec deploy/sleep -- sh -c "for i in \$(seq 1 100); do curl -s http://helloworld:5000/hello; done"
預期輸出:
Hello version: v1, instance: helloworld-v1-9585666c8-8**** Hello version: v1, instance: helloworld-v1-9585666c8-8**** Hello version: v1, instance: helloworld-v1-9585666c8-8**** Hello version: v1, instance: helloworld-v1-9585666c8-8**** ... Hello version: v1, instance: helloworld-v1-9585666c8-8****
預期輸出表明當helloworld服務的v1子集存在時,所有請求發往helloworld服務的v1子集。
將helloworld服務的v1子集縮容至0,模擬故障情況。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在無狀態頁面的操作列,單擊helloworld-v1工作負載對應的伸縮,在伸縮對話框,設置所需容器組數量為0,單擊確定。
在ACK集群對應的KubeConfig環境下,執行以下命令,重新驗證helloworld服務訪問。
kubectl exec deploy/sleep -- sh -c "for i in \$(seq 1 100); do curl -s http://helloworld:5000/hello; done"
預期輸出:
Hello version: v2, instance: helloworld-v2-68bb8c995b-t**** Hello version: v2, instance: helloworld-v2-68bb8c995b-t**** ... Hello version: v2, instance: helloworld-v2-68bb8c995b-t**** Hello version: v2, instance: helloworld-v2-68bb8c995b-t**** Hello version: v2, instance: helloworld-v2-68bb8c995b-t****
預期輸出表明當helloworld服務的v1子集不存在可用端點時,請求全部發送到服務的v2子集,流量降級生效。
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: helloworld
spec:
hosts:
- helloworld
http:
- route:
- destination:
host: helloworld
subset: v1
fallback:
target:
host: helloworld
subset: v2
文檔內容是否對您有幫助?