本文主要介绍在使用了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 ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`