为了演示跨集群访问,在第一个Kubernetes集群cluster1中部署sleep应用服务和版本v1的helloworld服务,在第二个集群cluster2中部署版本v2的helloworld服务,然后验证sleep应用是否可以调用本地或者远程集群的helloworld服务。
1)部署sleep和版本v1的helloworld服务到第一个集群cluster1中,执行如下命令:
kubectl create namespace app1
kubectl label namespace app1 istio-injection=enabled
kubectl apply -n app1 -f multicluster/sleep/sleep.yaml
kubectl apply -n app1 -f multicluster/helloworld/service.yaml
kubectl apply -n app1 -f multicluster/helloworld/helloworld.yaml -l version=v1
export SLEEP_POD=$(kubectl get -n app1 pod -l app=sleep -o jsonpath={.items..metadata.name})
2)部署版本v2的helloworld服务到第二个集群cluster2中,执行如下命令:
kubectl create namespace app1 kubectl label namespace app1 istio-injection=enabled kubectl apply -n app1 -f multicluster/helloworld/service.yaml kubectl apply -n app1 -f multicluster/helloworld/helloworld.yaml -l version=v2
3)验证在集群cluster1中的sleep服务是否可以正常调用本地或者远程集群的helloworld服务,在集群cluster1下执行如下命令:
kubectl exec $SLEEP_POD -n app1 -c sleep -- curl helloworld.app1:5000/hello
如果设置正确,则在返回的调用结果中可以看到两个版本的helloworld服务,同时可以通过查看sleep容器组中的istio-proxy容器日志来验证访问的端点IP地址,返回结果如下所示:

4)验证Istio路由规则是否生效。
创建针对上述两个版本的helloworld服务的路由规则,以便验证Istio配置是否可以正常工作。
创建Istio虚拟服务VirtualService,执行如下命令:
kubectl apply -n app1 -f multicluster/helloworld/virtualservice.yaml
接着,创建Istio目标规则DestinationRule:
·如果启用了双向TLS通信,则需要如下配置参数:
kubectl apply -n app1 -f multicluster/helloworld/destinationrule.yaml
·如果不需要启用双向TLS通信,配置参数则需要做出修改,在YAML定义中添加traff icPolicy.tls.mode:ISTIO_MUTUAL,定义如下所示:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: helloworld
spec:
host: helloworld
**trafficPolicy:
tls:
mode: ISTIO_MUTUAL**
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
通过执行命令kubectl apply创建启用双向TLS的Istio目标规则,如下所示:
kubectl apply -n app1 -f multicluster/helloworld/destinationrule-auth.yaml
多次调用helloworld服务,只会返回版本v2的响应结果,如下所示:
