概述
应用服务网格支持多集群架构,在开通网格实例时选择的云容器引擎集群我们称为主集群(primary),服务网格的控制面会部署在主集群上,后续可以添加同VPC下的其他云容器引擎集群到网格内,我们称为从集群(remote),整体架构如下图:
添加集群
选择集群与工作负载 -> 容器集群菜单,可以看到当前网格内的集群列表;
在添加从集群之前,首先确定主集群控制面是否已经完成暴露(可以被从集群连接、使用),选择右侧查看集群状态选项,如果在开通网格之后超过半小时控制面服务暴露还未完成,请联系客服解决。
当前已经完成主集群控制面暴露,可以通过左上角的 添加从集群按钮添加同vpc内的其他集群。
删除集群
当前只支持删除从集群,选择 集群与工作负载 -> 容器集群菜单,可以看到当前网格内的集群列表,在从集群右侧操作栏可以看到删除选项,点击删除即可。
多集群管理部署示例
前置条件
- 已开通服务网格实例,控制面部署在主集群,我们称为C1。
 - 在网格中添加另外一个集群,我们称为C2。
 
部署应用
在集群C1中创建命名空间bookinfo
kubectl create ns bookinfo;
kubectl label nsbookinfo istio-injection=enabled;
部署bookinfo应用的productpage、details、rating以及reviews(版本v1)服务(yaml文件参考快速入门-部署bookinfo应用到CSM实例)。
部署完成后,C1集群pod如下:

在集群C2中创建命名空间bookinfo
kubectl create ns bookinfo;
kubectl label ns bookinfo istio-injection=enabled;
部署reviews服务的v2和v3版本(yaml文件参考快速入门-部署bookinfo应用到CSM实例)。
部署完成后,C2集群pod如下:

在C1中部署sleep应用,验证访问
apiVersion: v1
kind: ServiceAccount
metadata:
  name: sleep
---
apiVersion: v1
kind: Service
metadata:
  name: sleep
  labels:
    app: sleep
    service: sleep
spec:
  ports:
  - port: 80
    name: http
  selector:
    app: sleep
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sleep
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sleep
  template:
    metadata:
      labels:
        app: sleep
    spec:
      terminationGracePeriodSeconds: 0
      serviceAccountName: sleep
      containers:
      - name: sleep
        image: registry-vpc-crs-huadong1.cnsp-internal.ctyun.cn/library/curl
        command: ["/bin/sleep", "infinity"]
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - mountPath: /etc/sleep/tls
          name: secret-volume
      volumes:
      - name: secret-volume
        secret:
          secretName: sleep-secret
          optional: true
通过sleep应用多次访问productpage服务:
kubectl exec -it -n bookinfo sleep-7fb478946b-44t5x -c istio-proxy -- curl
http://productpage:9080/productpage -svo/dev/null
查看productpage sidecar日志:
kubectl logs productpage-v1-7d78657c55-j4t42 -n bookinfo -c istio-proxy | grep reviews

可以看到productpage服务访问到了reviews服务的三个版本的pod。
配置DestinationRule 、VirtualService资源,限制只能访问reviews的v3版本
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  - name: v3
    labels:
      version: v3
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v3
      weight: 100
再次多次访问productpage服务,查看productpage sidecar日志如下,可以看到总是访问到reviews的v3版本:
