概述
应用服务网格支持多集群架构,在开通网格实例时选择的云容器引擎集群我们称为主集群(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版本: