为避免过期版本实例存在的安全和稳定性风险,同时保证您业务的连贯性,服务网格ASM支持通过原地升级或金丝雀升级的方式升级控制平面和数据平面。本文介绍ASM实例升级前后的注意事项和说明、升级路径、升级流程和操作步骤等。
前提条件
相关概念
为什么需要升级
ASM原则上保持每三个月更新一次Istio大版本的频率。大版本推出后,由于功能更新和漏洞修复,ASM会不定期推出补丁版本(例如1.19.x.y)的更新。过期的ASM实例版本存在安全和稳定性风险,建议您及时进行升级操作。关于ASM支持的版本,请参见版本机制。
主动升级ASM实例有以下好处:
降低安全和稳定性风险:随着ASM版本迭代,会不断优化及修复发现的安全及稳定性漏洞,长久使用过期版本实例会给业务带来安全和稳定性风险。
享受更好的维护支持:对于过期的实例版本,ASM不再提供安全补丁和问题修复,也无法保证过期版本的技术支持质量。使用新版本能够让您享受更好的技术支持和答疑服务。
使用新版本的新功能:随着社区Istio版本的演进,新版本包含新的功能和改进,ASM也将适配新版本,为您带来更好的开发和运维体验。
升级注意事项和说明
注意事项
网格升级需要您手动重启数据面Pod以完成新版本Sidecar的重新注入,建议您在业务低峰期进行升级操作。
手动升级ASM网关将触发滚动重启。
升级期间请勿进行灰度发布、流量规则配置等操作。
原地升级实例时,ASM会对您的实例进行升级预检查,但无法保证检查出所有不兼容的功能配置和API。您可以根据帮助文档、控制台信息、站内信等渠道关注版本发布情况,在实例升级时提前了解相应版本的升级注意事项。
基于安全原因,ASM有以下机制:
ASM保留强制升级过期版本实例的权利(在实例版本过期后的某个时间,强制升级实例到支持中的最早版本),建议您参照下文提前主动升级实例。
对于补丁版本的升级(例如从v1.18.0.123升级到v1.18.0.146),在不发送通知的情况下,系统会不定期完成自动热更新。自动热更新时,数据面网关和Sidecar代理版本保持不变。
原地升级说明
原地升级仅支持相邻版本升级,不支持跨版本升级,也不支持回退。
金丝雀升级说明
相比于原地升级,金丝雀升级方式可以支持先验证新版本,确认功能验证无误后再切换为当前版本,为业务提供一种更稳妥的升级方式。金丝雀升级支持最多跨一个次要版本升级,过程中支持回退。
类型 | 说明 |
适用版本 | 企业版或旗舰版实例,且版本为1.16.4.91及以上。 |
适用场景 |
说明 仅asm-patch版本有变化的场景,建议您采用原地升级方式。 |
版本格式 | ASM版本的格式为<major>.<minor>.<patch>.<asm-patch>[-<sequence>-aliyun],例如v1.18.0.158-gc6cf0b9c-aliyun(企业版),字段说明如下:
|
Sidecar注入标签说明
当一个ASM实例开启金丝雀升级后,对应这个ASM实例的控制面会同时存在两个版本,例如从1.17.2.42版本金丝雀升级到1.18.0的某个版本,会同时存在1.17.2和1.18.0两个控制面版本。
在金丝雀升级过程中,您可以通过为Kubernetes集群中的命名空间指定注入标签,决定命名空间中的工作负载注入的Sidecar版本。默认标签为istio-injection=enabled
,即注入当前版本。
当两个版本同时存在时,Namespace标签下业务注入的Sidecar版本的映射关系说明如下:
当前版本
istio-injection=enabled
标签注入的Sidecar对应为ASM当前版本,并连接当前版本对应的控制面。给Namespace打上
istio.io/rev=$revision
标签,标明需要注入的Sidecar版本,revision
变量格式为x-y-z
,例如1-17-2
。给Namespace打上
istio.io/rev=stable
标签,标明需要注入的Sidecar版本为当前的ASM版本。
重要一个Namespace下,不能同时存在
istio-injection
和istio.io/rev
两个标签。金丝雀版本
当业务服务需要注入金丝雀版本对应的Sidecar时,可以采用给Namespace打上
istio.io/rev=$revision
或istio.io/rev=canary
标签,其中$revision
对应的格式为版本的x-y-z
,例如1-18-0
。建议您使用istio.io/rev=$revision
标签。关于金丝雀版本的操作示例,请参见使用金丝雀模式增强升级稳定性。
升级路径、方式和流程
升级路径
此处以1.16升级到1.18版本为例进行说明,仅作为参考,请您以实际的操作环境为准。
起始版本 | 目标版本 | 升级方式 |
1.16.4.93 | 1.17.2.42 | 原地升级或金丝雀升级 |
1.17.2.42 | 1.18.0.158 | 原地升级或金丝雀升级 |
1.16.4.93 | 1.18.0.158 | 金丝雀升级 |
升级方式
ASM控制台:支持原地升级和金丝雀升级。具体操作,请参见操作步骤。
API:支持原地升级。具体操作,请参见UpgradeMeshVersion、DescribeUpgradeVersion和DescribeServiceMeshUpgradeStatus。
升级流程
请您确认升级的版本和方式,了解升级注意事项和说明后,再进行升级操作。
操作步骤
原地升级
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
在升级管理页面的原地升级页签,单击运行检查,在重要提示对话框,单击确定。
升级预检查通过后,单击开始升级,在重要提示对话框,单击确定。
在数据平面区域的升级列,选中目标网关,单击升级网关,在重要提示对话框,单击确定。
按需重启工作负载。具体操作,请参见重新部署工作负载。
金丝雀升级
具体操作,请参见使用金丝雀模式增强升级稳定性。
升级常见问题
当金丝雀版本切换为正式版本时,对应之前部署的业务服务注入的Sidecar为老版本,如何升级到新版本?
您可以在升级管理页面单击金丝雀升级页签,然后单击数据面页签,在待升级工作负载区域,单击目标工作负载右侧的滚动升级,触发业务服务Deployment的滚动更新。
原地升级会影响现有的服务流量接入吗?
原地升级只影响控制面,不会影响数据面的流量。
ASM实例需要升级多少次才能到目标版本?
原地升级仅支持相邻大版本升级,金丝雀升级支持最多跨一个次要版本升级。您可以按照实际情况进行计算。
ASM每个版本都可以任意选择升级方式吗?
ASM实例版本为1.16.4.91以下,仅支持原地升级;1.16.4.91及以上版本,支持原地升级和金丝雀升级。