文档

管理服务版本

更新时间:

在云原生网关中,服务版本主要应用在路由配置中的标签路由功能。通过对路由设置合适的标签路由策略,满足您在金丝雀发布、标签路由和高可用部署等场景下的需求。本文介绍如何为云原生网关中添加的服务设置服务版本。

背景信息

在微服务领域,服务泛指应用程序的功能单元,通常具备独立的业务域,例如订单服务、用户服务等。从物理上看,服务部署运行在具有网络地址的容器、虚拟机和物理机上;从逻辑上看,服务由一组提供相同功能的网络节点组成。

服务版本,可以理解为服务所有节点的子集,是根据节点的元数据信息分组后的实例集。服务版本通常应用在金丝雀发布标签路由高可用部署场景中。

  • 金丝雀发布:在服务持续迭代发展过程中,频繁存在服务新版本发布上线的需求,为了确保流量在服务升级过程中平稳无损,开发者经常会使用金丝雀发布手段来将小部分流量分发到新版本进行验证,验证符合预期后,逐步将流量从老版本完全迁移至新版本。

  • 标签路由:在实际业务中,有的服务本身存在多个版本,各个版本之间功能也有差异,分别应用于有特定信息的请求。例如对于同一个API,带有某个的Header值的请求必须访问服务的某个版本。另一个场景是多套开发环境(测试、预发和生产),利用服务版本可以根据请求的信息来决定分发到哪个开发环境。

  • 高可用部署:为了保证服务的可用性,服务可以部署在不同的K8s集群中,我们可以根据节点上与集群相关的元数据信息对服务所有实例按集群维度进行版本管理,并且可以调整流量到各个集群(各个服务版本)的权重。当某个集群出现故障时,设置流量到该集群的权重为0,即可达到流量切换目的。

说明

服务版本管理依赖服务节点上关联的元数据信息。

  • 对于容器服务K8s,服务节点上的元数据信息来源于Pod的Labels属性。例如,如果使用的是SpringCloud应用并关联了K8sService,那么可以在K8sDeployment YAML的spec.template.metadata.labels下增加标签名及标签值。

  • 对于Nacos注册中心,服务节点上的元数据信息取决于业务应用注册节点时携带的元数据信息。

例如,如果使用的是SpringCloud应用和Nacos注册中心,那么可以通过spring.cloud.nacos.discovery.metadata字段来设置节点的元数据信息。

使用限制

  • 固定地址类型的服务不支持服务版本管理。

  • DNS域名类型服务不支持服务版本管理

添加服务版本

  1. 登录MSE网关管理控制台,并在顶部菜单栏选择地域。

  2. 在左侧导航栏,选择云原生网关 > 网关列表

  3. 在网关列表中选择对应的网关名称,并在操作列下单击路由配置。然后在控制台页面右上角,单击返回旧版

  4. 在左侧导航栏,选择服务管理 > 服务列表

  5. 服务列表页面,单击需要变更的服务名称。

  6. 服务版本区域,单击添加新版本

  7. 在服务版本列表中输入版本名称标签名以及标签值,然后单击操作列下方的完成图标。

    服务版本列表

    服务版本参数说明如下:

    配置项

    说明

    版本名称

    输入服务版本名称,建议使用可读性强、语义明确的版本名称。

    标签名

    显示该服务下所有实例关联的节点元数据信息的Key(键)集合,您需选择其中一个Key作为划分新版本实例集的依据。

    标签值

    显示在所选标签名下所有实例的Value集合,您需要选择其中一个Value作为划分新版本实例集的依据。

    实例数/比例

    • 实例数:根据所设置的标签名和标签值从所有实例中筛选出的实例数,即属于当前版本的实例集。

    • 比例:筛选出属于当前版本的实例占所有实例的比重。

    说明

    标签名标签值共同作为划分当前版本实例集的依据。

  8. 在确定保存对话框中单击确定

    服务版本添加成功后,即显示在服务版本中。

后续操作

编辑服务版本

  1. 服务版本区域,单击操作列下的编辑图标。

  2. 选择新的标签名标签值,然后单击操作列下的完成图标。

  3. 在确定保存对话框中单击确定

删除服务版本

  1. 服务版本列表中单击操作列下的删除图标。

  2. 在确定删除对话框中单击确定