本文主要介紹在使用了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 ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`
可以看到,可以正常訪問。