在云原生API网关中,服务版本主要应用在路由配置中的标签路由功能。通过对路由设置合适的标签路由策略,满足您在金丝雀发布、标签路由和高可用部署等场景下的需求。
固定地址和DNS域名类型的服务不支持服务版本管理。
背景信息
在微服务领域,服务泛指应用程序的功能单元,通常具备独立的业务域,例如订单服务、用户服务等。从物理上看,服务部署运行在具有网络地址的容器、虚拟机和物理机上;从逻辑上看,服务由一组提供相同功能的网络节点组成。
服务版本,可以理解为服务所有节点的子集,是根据节点的元数据信息分组后的实例集。服务版本通常应用在金丝雀发布、标签路由和高可用部署场景中。
金丝雀发布:在服务持续迭代发展过程中,频繁存在服务新版本发布上线的需求,为了确保流量在服务升级过程中平稳无损,开发者经常会使用金丝雀发布手段来将小部分流量分发到新版本进行验证,验证符合预期后,逐步将流量从老版本完全迁移至新版本。
标签路由:在实际业务中,有的服务本身存在多个版本,各个版本之间功能也有差异,分别应用于有特定信息的请求。例如对于同一个API,带有某个Header值的请求必须访问服务的某个版本。另一个场景是多套开发环境(测试、预发和生产),利用服务版本可以根据请求的信息来决定分发到哪个开发环境。
高可用部署:为了保证服务的可用性,服务可以部署在不同的K8s集群中,我们可以根据节点上与集群相关的元数据信息对服务所有实例按集群维度进行版本管理,并且可以调整流量到各个集群(各个服务版本)的权重。当某个集群出现故障时,设置流量到该集群的权重为0,即可达到流量切换目的。
服务版本管理依赖服务节点上关联的元数据信息。
对于容器服务K8s,服务节点上的元数据信息来源于Pod的Labels属性。例如,如果使用的是SpringCloud应用并关联了K8sService,那么可以在K8sDeployment YAML的
spec.template.metadata.labels
下增加标签名及标签值。对于Nacos注册中心,服务节点上的元数据信息取决于业务应用注册节点时携带的元数据信息。例如,如果使用的是SpringCloud应用和Nacos注册中心,那么可以通过
spring.cloud.nacos.discovery.metadata
字段来设置节点的元数据信息。
添加服务版本
登录云原生API网关控制台。
在左侧导航栏,选择实例,并在顶部菜单栏选择地域。
在实例页面,单击目标网关实例名称。
在左侧导航栏,选择服务,并单击服务页签。
单击目标服务名称,然后在服务版本区域,单击添加新版本。
在服务版本列表配置相关参数,然后单击操作列下方的图标。
配置项
说明
版本名称
输入服务版本名称,建议使用可读性强、语义明确的版本名称。
标签名
显示该服务下所有实例关联的节点元数据信息的Key(键)集合,您需选择其中一个Key作为划分新版本实例集的依据。
标签值
显示在所选标签名下所有实例的Value集合,您需选择其中一个Value作为划分新版本实例集的依据。
实例数/比例
实例数:根据所设置的标签名和标签值从所有实例中筛选出的实例数,即属于当前版本的实例集。
比例:筛选出属于当前版本的实例占所有实例的比重。
说明标签名和标签值共同作为划分当前版本实例集的依据。
在确定保存对话框,单击确定。
服务版本添加成功后,即显示在服务版本中。
编辑服务版本
登录云原生API网关控制台。
在左侧导航栏,选择实例,并在顶部菜单栏选择地域。
在实例页面,单击目标网关实例名称。
在左侧导航栏,选择服务,并单击服务页签。
单击目标服务名称,然后在服务版本区域,单击操作列下的图标。
选择新的标签名和标签值,然后单击操作列下的图标。
在确定保存对话框,单击确定。
删除服务版本
登录云原生API网关控制台。
在左侧导航栏,选择实例,并在顶部菜单栏选择地域。
在实例页面,单击目标网关实例名称。
在左侧导航栏,选择服务,并单击服务页签。
单击目标服务名称,然后在服务版本列表中单击操作列下的图标。
在确定删除对话框,单击确定。