本页面介绍了如何:
运行
asmcli
以便从 Anthos Service Mesh 或开源 Istio 1.9 or a 1.10 patch release 升级到 Anthos Service Mesh 1.10.6。不支持从更早版本升级。执行 Canary 升级,将工作负载迁移到新控制层面。
准备工作
开始之前,请确保执行以下操作:
- 查看前提条件。目前,
asmcli
不支持升级 GKE 集群上的 Anthos Service Mesh,这些集群位于不同项目中的多集群网格中,除非您最初使用asmcli
安装 Anthos Service Mesh。 - 查看规划升级中的信息。
- 安装所需的工具
- 下载
asmcli
- 授予集群管理员权限
- 验证项目和集群
控制层面自定义
如果您自定义了先前的安装,在升级至新的 Anthos Service Mesh 版本或从 Istio 迁移时,需要相同的自定义。如果您通过向 istioctl install
添加 --set values
标志来自定义安装,则必须将这些设置添加到 IstioOperator
YAML 文件(称为 叠加文件。您可以在运行脚本时使用 --custom_overlay
选项和文件名来指定叠加文件。脚本将叠加文件传递给 istioctl install
。
证书授权机构
在升级过程中更改证书授权机构 (CA) 会导致停机。升级期间,mTLS 流量会中断,直到所有工作负载切换为使用具有新 CA 的新控制层面。
升级 Anthos Service Mesh
以下部分概述了如何升级 Anthos Service Mesh:
运行
asmcli install
以在单个集群上安装 Anthos Service Mesh。有关命令行示例,请参阅以下部分。这些示例同时包含可能必需的必需参数和可选参数。我们建议您始终指定output_dir
参数,以便轻松找到示例网关和istioctl
等工具。请在右侧的导航栏中查看示例列表。(可选)安装或升级入站流量网关。
要完成 Anthos Service Mesh 的设置,您需要启用自动 Sidecar 注入并部署或重新部署工作负载。
使用默认功能和 Mesh CA 升级
本部分介绍如何运行 asmcli
以使用默认平台支持的功能升级 Anthos Service Mesh,并启用 Anthos Service Mesh 证书授权机构 (Mesh CA) 作为证书授权。
GKE
运行以下命令以使用默认功能安装新控制平面。在提供的占位符中输入值。
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca mesh_ca
--project_id
、--cluster_name
和--cluster_location
指定集群所在的项目 ID、集群名称以及集群区域或地区。--fleet_id
:队列宿主项目的项目 ID。如果您未包含此选项,则asmcli
会使用注册集群时在其中创建集群的项目。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
--ca mesh_ca
将 Mesh CA 用作证书授权机构。在升级期间更改证书授权机构会导致停机。asmcli
将 Mesh CA 配置为使用机群工作负载身份
本地
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行以下命令以使用默认功能安装新控制平面。在提供的占位符中输入值。
./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca mesh_ca
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
:kubeconfig
文件 的路径。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定本地是平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
--ca mesh_ca
将 Mesh CA 用作证书授权机构。在升级期间更改证书授权机构会导致停机。asmcli
将 Mesh CA 配置为使用集群工作负载身份
使用 Istio CA 升级默认特性
本部分介绍如何运行 asmcli
以使用默认平台支持的功能升级 Anthos Service Mesh 并启用 Istio CA。
GKE
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca citadel
--project_id
、--cluster_name
和--cluster_location
指定集群所在的项目 ID、集群名称以及集群区域或地区。--fleet_id
:队列宿主项目的项目 ID。如果您未包含此选项,则asmcli
会使用注册集群时在其中创建集群的项目。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
使用 Istio CA。在升级期间更改证书授权机构会导致停机。
本地
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行以下命令以安装具有默认功能和 Istio CA 的 Anthos Service Mesh:
./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
:kubeconfig
文件 的路径。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定本地是平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
使用 Istio CA。在升级过程中更改证书授权机构会导致停机。
使用可选功能升级
叠加文件是一个 YAML 文件,其中包含您传递给 asmcli
以配置控制层面的 IstioOperator
自定义资源 (CR)。您可以替换默认控制平面配置,并通过将 YAML 文件传递给 asmcli
来启用可选功能。您可以叠加多个文件,每个叠加文件会覆盖之前各层的配置。
GKE
运行以下命令以使用默认功能安装新控制平面。在提供的占位符中输入值。
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca mesh_ca \
--custom_overlay OVERLAY_FILE
--project_id
、--cluster_name
和--cluster_location
指定集群所在的项目 ID、集群名称以及集群区域或地区。--fleet_id
:队列宿主项目的项目 ID。如果您未包含此选项,则asmcli
会使用注册集群时在其中创建集群的项目。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
--ca mesh_ca
将 Mesh CA 用作证书授权机构。在升级期间更改证书授权机构会导致停机。asmcli
将 Mesh CA 配置为使用机群工作负载身份--custom_overlay
指定叠加文件的名称。
本地
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行以下命令以使用默认功能安装新控制平面。在提供的占位符中输入值。
./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca mesh_ca \ --custom_overlay OVERLAY_FILE
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
:kubeconfig
文件 的路径。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定本地是平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
--ca mesh_ca
将 Mesh CA 用作证书授权机构。在升级期间更改证书授权机构会导致停机。asmcli
将 Mesh CA 配置为使用机群工作负载身份--custom_overlay
指定叠加文件的名称。
升级网关
如果已部署网关,则还需要升级这些网关。如需进行简单升级,请按照安装和升级网关指南中的“就地升级”部分进行操作。
切换到新的控制层面
获取
istiod
上的修订版本标签。kubectl get pod -n istio-system -L istio.io/rev
此命令的输出类似如下所示。
NAME READY STATUS RESTARTS AGE REV istiod-asm-176-1-67998f4b55-lrzpz 1/1 Running 0 68m asm-198-3 istiod-asm-176-1-67998f4b55-r76kr 1/1 Running 0 68m asm-198-3 istiod-asm-182-2-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-1106-2 istiod-asm-182-2-5cd96f88f6-wm68b 1/1 Running 0 27s asm-1106-2
在输出中的
REV
列下,记下新版本的修订版标签的值。在此示例中,该值为asm-1106-2
。另请注意旧版
istiod
的修订版本标签中的值。 将工作负载移至新版本后,您需要使用此值删除旧版本的istiod
。在示例输出中,旧版本的修订版本标签值为asm-198-3
。
将修订版本标签添加到应用命名空间,并移除
istio-injection
标签(如果存在)。在以下命令中,将REVISION
更改为与istiod
的新修订版本匹配的值。kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
如果您在输出中看到
"istio-injection not found"
,则可以忽略它。这意味着命名空间之前没有istio-injection
标签。如果命名空间同时具有istio-injection
和修订版本标签,自动注入将失败,因此 Anthos Service Mesh 文档中的所有kubectl label
命令都包含移除istio-injection
标签。重启 pod 以触发重新注入。
kubectl rollout restart deployment -n NAMESPACE
验证 pod 是否配置为指向新版
istiod
。kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
测试您的应用,验证工作负载是否正常工作。
如果您的其他命名空间中存在工作负载,请重复上述步骤以标记命名空间并重启 Pod。
如果您确信应用按预期正常运行,请继续执行转换到新版
istiod
的步骤。如果您的应用出现问题,请按照以下步骤回滚。完成转换
如果您确信应用按预期正常运行,请移除旧控制平面以完成到新版本的转换。
切换到
anthos-service-mesh
GitHub 代码库中的文件所在的目录。配置验证 Webhook 以使用新的控制层面。
kubectl apply -f asm/istio/istiod-service.yaml
删除
istiod
的旧版本。要使用的命令取决于您是从 Istio 迁移还是从旧版 Anthos Service Mesh 升级。迁移
如果您是从 Istio 迁移,旧的
istio-ingressgateway
没有修订版本标签。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
升级
如果您是从旧版 Anthos Service Mesh 升级,在以下命令中,请确保
OLD_REVISION
与旧版istiod
的修订版本标签匹配。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-OLD_REVISION -n istio-system --ignore-not-found=true
移除旧版
IstioOperator
配置。kubectl delete IstioOperator installed-state-OLD_REVISION -n istio-system
预期输出如下所示:
istiooperator.install.istio.io "installed-state-OLD_REVISION" deleted
回滚
如果您在使用新版
istiod
测试应用时遇到问题,请按照以下步骤回滚到之前的版本:重新为您的命名空间添加标签,以启用旧版
istiod
的自动注入。使用的命令取决于您在旧版本使用的是修订版本标签还是istio-injection=enabled
。如果您使用修订版本标签来进行自动注入,请使用以下命令:
kubectl label namespace NAMESPACE istio.io/rev=OLD_REVISION --overwrite
如果您使用的是
istio-injection=enabled
,请使用以下命令:kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
预期输出:
namespace/NAMESPACE labeled
确认命名空间上的修订版本标签与旧版
istiod
的修订版本标签一致:kubectl get ns NAMESPACE --show-labels
重启 pod 以触发重新注入,以使代理具有之前的版本:
kubectl rollout restart deployment -n NAMESPACE
移除新版
istiod
。确保以下命令中的REVISION
值正确无误。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true
移除新版
IstioOperator
配置。kubectl delete IstioOperator installed-state-REVISION -n istio-system
预期输出如下所示:
istiooperator.install.istio.io "installed-state-REVISION" deleted
如果您未添加
--disable_canonical_service
标志,则脚本会启用规范化服务控制器。我们建议将其保持启用状态,但如果您需要停用,请参阅启用和停用规范化服务控制器。如果您部署了网关,请务必更改命名空间或部署上的修订版本标签以匹配先前版本的
istiod
。按照安装和升级网关指南中“就地升级”部分中所述的相同流程执行操作。