本文主要介紹在使用了ASM遠端控制面功能後,如何?叢集之間的互相訪問。
前提條件
已完成使用ASM遠端控制面降低推送延遲中所有步驟,其中cluster-1表示雲上ACK叢集(由ASM託管控制面管理),cluster-2表示非ACK叢集(由ASM遠端控制面管理)。
本文中的步驟涉及到多次切換kubeconfig,建議將cluster-1和cluster-2的kubeconfig配置到同一個config檔案中,並使用
kubectl config use-context進行切換。也可以使用kubecm或kubectx來管理多個叢集的kubeconfig。配置叢集網路和東西向網關,並在cluster-1和cluster-2中部署httpbin和sleep應用。具體操作,請參見不同VPC下多ACK叢集的容災情境(基於ASM跨叢集網格代理實現網路互連)。
步驟一:測試cluster-1訪問cluster-2
使用cluster-1的kubeconfig執行以下命令,將cluster-1中的httpbin應用縮容至0以方便測試。
kubectl scale deployment httpbin --replicas 0使用cluster-1的kubeconfig執行以下命令,從cluster-1中的sleep訪問httpbin應用。
kubectl exec deployment/sleep -it -- curl httpbin:8000/status/418預期輸出:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`可以看到此時依然成功訪問。該請求被cluster-2的httpbin應用處理,並且兩者之間的通訊使用mTLS進行了加密。
步驟二:測試cluster-2訪問cluster-1
使用以下YAML在cluster-1中建立ClusterRole和ClusterRoleBinding資源。cluster-2的遠端控制面會使用這個ClusterRole來擷取cluster-1中的服務資訊。
請確保已經配置好了kubectl的context,並且cluster-1對應的context名稱為cluster-1,cluster-2對應的context名稱為cluster-2。
安裝istioctl工具,請確保安裝的istioctl版本與ASM版本對應。將工作目錄切換到解壓後的istio檔案夾後,執行以下命令。
# 以下<YOUR_CLUSTER1_ID>替換為cluster-1的叢集id bin/istioctl create-remote-secret \ --context=cluster-1 \ --name=<YOUR_CLUSTER1_ID> | \ kubectl apply -f - --context=cluster-2本步驟執行完成後,cluster-2的istio-system命名空間下會產生一個對應的secret,secret中儲存有串連cluster-1所用到的訪問憑證,請妥善管理該secret的許可權,確保該secret不會泄露。
使用cluster-1的kubeconfig執行以下命令,將httpbin應用副本修改為1。
kubectl scale deployment httpbin --replicas 1使用cluster-2的kubeconfig執行以下命令,將httpbin應用副本修改為0。
kubectl scale deployment httpbin --replicas 0使用cluster-2的kubeconfig執行以下命令,測試從cluster-2中訪問cluster-1的httpbin應用。
kubectl exec deployment/sleep -it -- curl httpbin:8000/status/418預期輸出:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`