ASM支持部署遠程控制面,您可以選擇將控制面組件部署至您的非阿里云集群中,使得該集群中的網格代理可以直連遠程控制面,提升配置推送效率,降低推送延遲。本文介紹如何部署遠程控制面。
背景信息
數據面集群均基于阿里云VPC構建時,數據面工作負載可以通過阿里云VPC網絡直連ASM托管控制面,網絡延遲低,控制面配置下發順暢,無需使用遠程控制面能力。
當數據面集群位于其他云服務或線下數據中心,與ASM控制面通過公網或其他特殊方式連通,并且連通的網絡環境不穩定或帶寬受限。此時推薦使用ASM遠程控制面來降低推送延遲。
遠程控制面對整體架構如下:
如果所有非ACK集群中的Pod都直連托管ASM控制面,這意味著托管控制面和非ACK集群之間的網絡連接數量以及帶寬占用將與Pod數量正相關。此時如果頻繁發生配置或服務變更,容易出現推送延遲的問題。
使用ASM遠程控制面能力后,遠程控制面為集群的網格代理推送配置。ASM控制面和非ACK集群之間將只有少量的用于控制面組件下發和服務發現的網絡連接,這種方式能將大程度減少對于低延遲、高帶寬網絡環境的需求,提升配置推送效率。
ASM遠程控制面使用注意事項
使用ASM遠程控制面后,服務網格相關Kubernetes資源必須使用ASM的kubeconfig創建。如果使用遠程集群的kubeconfig,該資源有被覆蓋的風險。
ASM提供了全局的服務發現。即被ASM托管控制面管理的工作負載可以訪問被遠程控制面管理的服務,并且默認使用mTLS通信,支持ASM的東西向網關。
ASM遠程控制面與通過數據面KubeAPI訪問Istio資源功能沖突。開啟遠程控制面之前,請確保該功能處于關閉狀態。
前提條件
已創建ASM實例,且實例版本在1.22及以上。具體操作,請參見創建ASM實例。
已添加兩個數據面集群到ASM實例。具體操作,請參見添加集群到ASM實例。
cluster-1表示阿里云ACK集群,該集群中的網格代理可以和ASM控制面直連。
cluster-2表示外部注冊集群或遠程集群,該集群中的網格代理不可以直連ASM控制面,或者連接的網絡環境受限。關于如何添加非阿里云集群到ASM實例,請參見通過ASM管理注冊集群應用或管理通過Kubeconfig導入的Kubernetes集群。
步驟一:開啟遠程控制面能力
使用ASM實例的kubeconfig,執行以下命令修改集群中的ASMMeshConfig資源。
kubectl edit ASMMeshconfig
將以下內容中的
.spec.externalIstiodConfigurations
配置到ASMMeshConfig中。apiVersion: istio.alibabacloud.com/v1beta1 kind: ASMMeshConfig metadata: name: default spec: ...... externalIstiodConfigurations: ${cluster-2的集群ID}: replicas: 2 # 這里也支持resources配置,和Pod的資源配置字段結構相同,為空時使用ASM提供的默認配置
說明切換為遠程控制面后,該集群中的ASM網關會重啟,請評估后再進行操作。
步驟二:部署應用并進行測試
部署sleep應用和httpbin應用到cluster-2。具體應用部署步驟,請參見部署httpbin應用。
使用cluster-2的kubeconfig,執行以下命令。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE httpbin-7df7fxxxxx-xxxxx 2/2 Running 0 3h15m sleep-6b7f9xxxxx-xxxxx 2/2 Running 0 3h15m
可以看到兩個Pod中均被注入了Sidecar,并且處于Running狀態。
執行以下命令,從sleep應用訪問httpbin。
kubectl exec deploy/sleep -it -- curl httpbin:8000/status/418
預期輸出:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`
步驟三:集群互相訪問說明
被托管控制面管理的工作負載默認可以訪問到遠程控制面的服務,遠程控制面的服務默認不可以訪問托管控制面的服務。
如果您不需要集群之間互相訪問,可以使用集群內流量保持功能。具體操作,請參見多集群場景下啟用ASM本地集群內流量保持功能。
如果您需要集群間相互訪問,請參見實現遠程控制面和托管控制面工作負載相互訪問。