本文主要介绍在使用了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应用。具体操作,请参见使用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 ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`