最佳实践
网格多集群多租户部署
同一网格中的任何服务之间都是能够相互访问的,不管服务属于哪个集群。所以实际应用场景中,生产环境、测试环境不能共用同一套网格。针对客户公司架构特点、或业务规模,支持两种网格部署模式,全局维度和租户维度。
- 全局维度部署生产服务网格、UAT服务网格、DAT服务网格等。 (1) 部署项目固定在<系统租户/istio-system命名空间>下。例生产集群A\B\C部署为生产网格;UAT集群D\E部署为UAT网格 (2) 此种部署方式,网格内集群不允许再加入到其它网格中 (3) 部署后,授权本网格集群的租户,其租户&集群(指此网格内集群)上的服务均可接入网格进行统一视图管理和治理
- 租户维度部署生产服务网格、UAT服务网格、DAT服务网格等。 (1) 部署项目可选 (2) 加入到此网格的集群,可再次加入其他租户(除系统租户外)的网格内 (3) 部署后,仅本租户&网格内集群上的服务可接入此网格进行统一视图管理和治理
- 规则:租户&集群维度仅支持部署一套网格。
注:当前版本是单控制面多集群多网格部署,后续版本会考虑支持多控制面多集群多网格部署。
网格部署模式图如下:
(1) Mode-1:三个租户共用三套集群(已授权),但租户间需要隔离,此时每个租户部署一套网格。 (2) Mode-2:租户内生产环境、测试环境等需要隔离,分别部署网格,此时TenantA代表普通租户。按Mode-2模式部署后,仅TenantA 使用此网格。 (3) Mode-3:基于平台资源、业务特点等考虑,计划使用全局维度网格,某几个租户(或代表不同的业务系统,或不同的业务部门)共用网格。此时Tenant System代表系统租户。按Mode-3模式部署后,跟网格内集群授权的普通租户,都默认使用此网格。
多集群应用统一流量治理
上面已介绍了网格部署方式,当某网格中同时管理了多个Kubernetes集群,且用户在不同集群的相同命名空间下,创建了相同名称的服务,在此网格中,会认为是同一个服务。 因为基于Kubernetes生成服务访问地址,会生成相同的“访问地址”,比如:servicename.namespacename.svc.cluster.local。当有流量通过网格的代理发向这个“访问地址”,网格会同时解析到多个不同集群中的Pod(服务实例)地址,并将流量在多个Kubernetes集群的Pod中负载均衡(前提是服务在各集群上开启mTLS,否则流量不会流向未开启mTLS的集群pod中)。 详细场景说明如下: 网格A,部署租户为租户1,primary集群是集群A,remote集群是集群B。
- 项目B& 集群A的服务svcname1、svcname2、svcname4已接入网格
- 项目B& 集群B的服务svcname1、svcname2、svcname3已接入网格
- 网格A中已部署两个入口网关
- svcname4 创建了路由,关联入口网关2
- svcname2 创建了路由,关联入口网关1
流量治理:
- 服务接入网格后,默认是关闭mTLS的。
- 跨集群调用,需要流量流经eastwest gateway,并且被调服务需要开启mTLS,否则调用不成功。
下面介绍下图三种不同的调用:
- 外部请求通过入口网关1访问svcname2 (1) 如果svcname2未开启mTLS,流量只分发到项目B &集群A 的svcname2上 (2) 如果svcname2开启mTLS,流量负载均衡分发到项目B &集群A 的svcname2和项目B &集群B 的svcname2上
- 外部请求通过入口网关2访问svcname4 (1) 如果svcname4未开启mTLS,流量分发失败 (2) 如果svcname4开启mTLS,流量负载均衡分发到项目B &集群A 的svcname4上
- 网格内部,svcname2调用svcname1
(1) 如果svcname1未开启mTLS,流量只分发到项目B &集群A 的svcname1上
(2) 如果svcname1开启mTLS,流量负载均衡分发到项目B &集群A 的svcname1和项目B &集群B 的svcname1上
注册中心服务接入网格
支持以下四种部署场景:
- 注册中心和业务服务都容器部署在paas平台上
- 仅注册中心在虚拟机上
- 仅业务服务部署在虚拟机上
- 注册中心和业务服务都部署在虚拟机上
注册中心服务成功接入网格,适用网格治理能力的必要条件:
- 对接注册中心
- 业务服务接入网格
- 以上2步需同时满足,但无顺序限制
对接注册中心
操作步骤如下: (1) 进入[服务网格/注册中心管理]页面,点击“添加注册中心”,弹框填写。 a. 填写注册中心名称:nacos.zhang b. 选择注册中心类型:nacos v2.x c. 填写注册中心地址:选择HTTP/HTTPS协议,填写ip:port,例10.111.176.52:8848 d. Nacos设置:此服务部署在nacos的命名空间ID、服务分组group



服务接入网格
如果注册中心中的服务部署在网格所在的集群,进入[服务网格/网格服务管控]页面,切换项目&集群,选择目标服务,一键接入网格,参见服务接入网格。 如果注册中心中的服务部署在网格之外的集群,进入[服务网格/网格服务管控]页面,选择服务要接入的项目&集群,点击“传统主机服务接入”,参见服务接入网格。