当您更新Istio资源的spec字段中的内容时,ASM会记录更新Istio资源的历史版本,最多记录最近更新的5个版本。本文以虚拟服务为例,介绍如何回滚Istio资源的历史版本。

前提条件

  • 已创建ASM实例,且ASM实例的Istio为v1.9.7.92-g1d820703-aliyun及以上版本。具体操作,请参见创建ASM实例
  • 已创建虚拟服务。具体操作,请参见管理虚拟服务

背景信息

Istio资源是指ASM控制台流量管理下的虚拟服务、目标规则、网关规则、服务条目、Envoy过滤器、工作负载组、工作负载条目和Sidecar资源,以及零信任安全下的请求身份认证、对等身份认证及授权策略。

步骤一:启用Istio资源历史版本功能

您可以通过以下两种方式来启用Istio资源历史版本功能:
  • 如果您没有创建ASM实例,您可以在创建ASM实例时选中启用Istio资源历史版本来启用Istio资源历史版本功能。
  • 如果您已创建ASM实例,您可以在ASM实例的网格信息页面启用Istio资源历史版本功能。本文以已创建ASM实例场景为例。
  1. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 在网格详情页面左侧导航栏选择网格实例 > 基本信息,然后在右侧页面单击功能设置
  5. 功能设置更新面板选中启用Istio资源历史版本,然后单击确定

步骤二:生成虚拟服务的历史版本

注意 只有更新Istio资源的spec字段中的内容时,ASM才会记录形成历史版本。如果您更新的是Istio资源其他字段,ASM不会记录形成历史版本。
  1. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 在网格详情页面左侧导航栏选择流量管理 > 虚拟服务
  5. 虚拟服务页面单击目标虚拟服务操作列下的YAML。
  6. 编辑面板修改spec字段下的内容,例如spec字段下的number端口由9080修改为9081,然后单击确定

步骤三:回滚虚拟服务的历史版本

本文以回滚到目标虚拟服务的v2版本为例。

  1. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 在网格详情页面左侧导航栏选择流量管理 > 虚拟服务
  5. 虚拟服务页面单击目标虚拟服务右侧操作列下的版本管理
  6. 版本管理面板单击v2版本操作列下的查看,然后单击回滚
    虚拟服务页面单击目标虚拟服务操作列下的YAML,在编辑面板可以看到目标虚拟服务的YAML内容回滚到v2版本。

FAQ

为什么虚拟服务页面找不到版本管理?

回滚Istio资源的历史版本前,请确保您的Istio版本不能低于v1.9.7.92-g1d820703-aliyun,并且您需要启用Istio资源历史版本功能。

是否只能通过ASM控制台更新Istio资源,ASM才会记录该资源的历史版本?

Istio资源历史版本功能不受操作方式的影响,只要您启用该功能,ASM就会为您记录Istio资源的历史版本。

Istio资源历史版本管理是否有什么限制?

ASM最多为您记录Istio资源最近被更新的5个历史版本。当Istio资源修改超过5次,将清除更新时间最早的历史版本。

ASM记录的Istio资源历史版本与实际更新的YAML内容不完全相同?

ASM记录的Istio资源历史版本会自动省略YAML中冗余的默认值,不会影响该版本的实际使用效果。例如网关规则资源spec中的servers.tls字段默认为PASSTHROUGH。如果您再将此字段设定为PASSTHROUGH,则该设定是冗余的,因此Istio资源历史版本管理功能不会为您记录此字段的设定。