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本地叢集內流量保持功能。
如果您需要叢集間相互訪問,請參見實現遠端控制面和託管控制面工作負載相互訪問。