本文主要介紹在使用了ASM遠程控制面功能后,如何實現集群之間的互相訪問。
本文依舊沿用使用ASM遠程控制面降低推送延遲中的cluster-1和cluster-2,即cluster-1表示云上ACK集群(由ASM托管控制面管理),cluster-2表示非ACK集群(由ASM遠程控制面管理)。請確保您已經完成了使用ASM遠程控制面降低推送延遲中所有步驟。
本文中的步驟涉及到多次切換kubeconfig,建議您將cluster-1和cluster-2的kubeconfig配置到同一個config文件中,并使用
kubectl config use-context
進行切換。您也可以使用kubecm或kubectx來管理多個集群的kubeconfig。
步驟一:cluster-1訪問cluster-2
配置集群網絡和東西向網關。具體操作,請參見使用ASM東西向網關實現多集群跨網絡互通。
使用cluster-1的kubeconfig,部署httpbin和sleep應用。具體應用部署步驟,請參見部署httpbin應用。
此時兩個集群中都存在httpbin和sleep應用,ASM會將兩個集群中的httpbin服務視為同一個服務,如果在cluster-1中使用sleep訪問httpbin,請求將會平均分發到兩個集群的httpbin工作負載上。
執行以下命令,將cluster-1中的httpbin服務縮容至0以方便測試。
kubectl scale deployment httpbin --replicas 0
執行以下命令,從cluster-1中的sleep訪問httpbin服務。
kubectl exec deployment/sleep -it -- curl httpbin:8000/status/418
預期輸出:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`
可以看到此時依然成功訪問。該請求被cluster-2的httpbin服務處理,并且兩者之間的通信使用mTLS進行了加密。
步驟二:測試cluster-2訪問cluster-1
本節操作步驟依賴于istiocli工具,請確保安裝的istiocli版本與ASM版本對應。
由于遠程控制面管理的工作負載默認不會發現被托管控制面管理的服務,本節將演示如何使cluster-2可以訪問cluster-1中的服務。
將工作目錄切換到解壓后的istio文件夾后,執行以下命令。
bin/istioctl create-remote-secret \ --context=cluster-1 \ --name=${cluster-1 ID} | \ kubectl apply -f role.yaml --context=cluster-2
說明本步驟執行完成后,cluster-2的istio-system命名空間下會生成一個對應的secret,secret中存儲有連接cluster-1所用到的證書,請妥善保管此secret。
切換context到cluster-1,執行以下命令,將httpbin服務副本修改為1。
kubectl scale deployment httpbin --replicas 1
切換context到cluster-2,執行以下命令,將httpbin服務副本修改為0。
kubectl scale deployment httpbin --replicas 0
執行以下命令,測試從cluster-2中訪問httpbin服務。
kubectl exec deploy/sleep -it -- curl httpbin:8000/status/418
預期輸出:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`
可以看到,可以正常訪問。