跳到主要内容

最佳实践

网格多集群多租户部署

同一网格中的任何服务之间都是能够相互访问的,不管服务属于哪个集群。所以实际应用场景中,生产环境、测试环境不能共用同一套网格。针对客户公司架构特点、或业务规模,支持两种网格部署模式,全局维度和租户维度。

  1. 全局维度部署生产服务网格、UAT服务网格、DAT服务网格等。 (1) 部署项目固定在<系统租户/istio-system命名空间>下。例生产集群A\B\C部署为生产网格;UAT集群D\E部署为UAT网格 (2) 此种部署方式,网格内集群不允许再加入到其它网格中 (3) 部署后,授权本网格集群的租户,其租户&集群(指此网格内集群)上的服务均可接入网格进行统一视图管理和治理
  2. 租户维度部署生产服务网格、UAT服务网格、DAT服务网格等。 (1) 部署项目可选 (2) 加入到此网格的集群,可再次加入其他租户(除系统租户外)的网格内 (3) 部署后,仅本租户&网格内集群上的服务可接入此网格进行统一视图管理和治理
  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。

  1. 项目B& 集群A的服务svcname1、svcname2、svcname4已接入网格
  2. 项目B& 集群B的服务svcname1、svcname2、svcname3已接入网格
  3. 网格A中已部署两个入口网关
  4. svcname4 创建了路由,关联入口网关2
  5. svcname2 创建了路由,关联入口网关1

流量治理:

  • 服务接入网格后,默认是关闭mTLS的。
  • 跨集群调用,需要流量流经eastwest gateway,并且被调服务需要开启mTLS,否则调用不成功。

下面介绍下图三种不同的调用:

  1. 外部请求通过入口网关1访问svcname2 (1) 如果svcname2未开启mTLS,流量只分发到项目B &集群A 的svcname2上 (2) 如果svcname2开启mTLS,流量负载均衡分发到项目B &集群A 的svcname2和项目B &集群B 的svcname2上
  2. 外部请求通过入口网关2访问svcname4 (1) 如果svcname4未开启mTLS,流量分发失败 (2) 如果svcname4开启mTLS,流量负载均衡分发到项目B &集群A 的svcname4上
  3. 网格内部,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

添加注册中心图(2) 正确填写上述各项值,点击“确定”,添加成功,注册中心状态显示“连接正常”。注册中心列表(3) 点击“服务数”列,弹框展示注册中心服务及对应的接入网格情况。注册中心服务

服务接入网格

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