本页面介绍了如何:
运行
asmcli
,以便从 Anthos Service Mesh 升级到 Anthos Service Mesh 1.11.8。(可选)部署入站流量网关。
执行 Canary 升级,将工作负载迁移到新控制层面。
您可以从哪些 Anthos Service Mesh 版本升级因平台而异。
GKE
在 Google Kubernetes Engine 上,您可以直接从以下版本升级到 Anthos Service Mesh 1.11.8-asm.4:
1.9 和 1.10
本地
在 GKE on VMware 和 Google Distributed Cloud Virtual for Bare Metal 上,您可以直接从以下版本升级到 Anthos Service Mesh 1.11.8-asm.4:
1.10
GKE on AWS
在 GKE on AWS 上,您可以直接从以下版本升级到 Anthos Service Mesh 1.11.8-asm.4:
1.10
Amazon EKS
如果您在 EKS 上安装了 Anthos Service Mesh 1.7,则需要在新集群上安装 Anthos Service Mesh 1.11。不支持从 Anthos Service Mesh 1.7 升级到 Anthos Service Mesh 1.11。
准备工作
开始之前,请确保执行以下操作:
控制层面自定义
如果您自定义了先前的安装,在升级至新的 Anthos Service Mesh 版本或从 Istio 迁移时,需要相同的自定义。如果您通过向 istioctl install
添加 --set values
标志来自定义安装,则必须将这些设置添加到 IstioOperator
YAML 文件(称为 叠加文件。您可以在运行脚本时使用 --custom_overlay
选项和文件名来指定叠加文件。脚本将叠加文件传递给 istioctl install
。
证书授权机构
在升级过程中更改证书授权机构 (CA) 会导致停机。升级期间,mTLS 流量会中断,直到所有工作负载切换为使用具有新 CA 的新控制层面。
升级 Anthos Service Mesh
以下部分概述了如何升级 Anthos Service Mesh:
如果要升级 GKE 上使用 Anthos Service Mesh 证书授权机构 (Mesh CA) 的多集群网格,请运行
asmcli create-mesh
将多集群网格配置为信任舰队工作负载身份,以便在升级时跨集群负载均衡无需停机。运行
asmcli install
以在单个集群上安装 Anthos Service Mesh。有关命令行示例,请参阅以下部分。这些示例同时包含可能必需的必需参数和可选参数。我们建议您始终指定output_dir
参数,以便轻松找到示例网关和istioctl
等工具。请在右侧的导航栏中查看示例列表。(可选)安装或升级入站流量网关。默认情况下,
asmcli
不会安装istio-ingressgateway
。我们建议您单独部署和管理控制平面和网关。如果您需要让默认istio-ingressgateway
随集群内控制平面安装,请添加--option legacy-default-ingressgateway
参数。要完成 Anthos Service Mesh 的设置,您需要启用自动 Sidecar 注入并部署或重新部署工作负载。
将多集群网格配置为信任舰队工作负载身份
如果要升级 GKE 上使用 Mesh CA 作为证书授权机构的多集群网格,则需要先运行 asmcli create-mesh
,然后再升级每个集群。此命令将 Mesh CA 配置为在升级后使用舰队工作负载身份池 FLEET_PROJECT_ID.svc.id.goog
作为信任网域。asmcli create-mesh
命令会执行以下操作:
- 将所有集群注册到同一舰队。
- 将网格配置为信任舰队工作负载身份。
- 创建远程 Secret。
您可以指定每个集群的 URI 或 kubeconfig 文件的路径。
集群 URI
在以下命令中,将 FLEET_PROJECT_ID
替换为舰队宿主项目的项目 ID,将集群 URI 替换为每个集群的集群名称、可用区或区域以及项目 ID。
./asmcli create-mesh \
FLEET_PROJECT_ID \
PROJECT_ID_1/CLUSTER_LOCATION_1/CLUSTER_NAME_1 \
PROJECT_ID_2/CLUSTER_LOCATION_2/CLUSTER_NAME_2 # \
# Add a line for each cluster in the mesh
kubeconfig 文件
在以下命令中,将 FLEET_PROJECT_ID
替换为舰队宿主项目的项目 ID,将 PATH_TO_KUBECONFIG
替换为每个 kubeconfig
文件的路径。
./asmcli create-mesh \
FLEET_PROJECT_ID \
PATH_TO_KUBECONFIG_1 \
PATH_TO_KUBECONFIG_2 # \
# Add a line for each cluster in the mesh
使用默认功能和 Mesh CA 升级
本部分介绍如何运行 asmcli
以使用默认平台支持的功能升级 Anthos Service Mesh,并启用 Anthos Service Mesh 证书授权机构 (Mesh CA) 作为证书授权。
GKE
运行以下命令以使用默认功能和 Mesh CA 升级控制层面。在提供的占位符中输入值。
./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 配置为使用机群工作负载身份
本地
在 GKE on VMware 或 Google Distributed Cloud Virtual for Bare Metal 上运行以下命令,以使用默认功能和 Mesh CA 升级控制平面。在提供的占位符中输入值。
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
:./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
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
--ca mesh_ca
将 Mesh CA 用作证书授权机构。在升级期间更改证书授权机构会导致停机。asmcli
将 Mesh CA 配置为使用集群工作负载身份
使用 Istio CA 升级默认特性
本部分介绍如何运行 asmcli
以使用默认平台支持的功能升级 Anthos Service Mesh 并启用 Istio CA。
GKE
运行以下命令以使用默认功能和 Istio CA 升级控制层面。在提供的占位符中输入值。
./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。在升级期间更改证书授权机构会导致停机。
本地
在 GKE on VMware 或 Google Distributed Cloud Virtual for Bare Metal 上运行以下命令,以使用默认功能和 Istio CA 升级控制平面。在提供的占位符中输入值。
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书--ca_key
:中间证书的密钥--root_cert
:根证书--cert_chain
:证书链
AWS
在 GKE on AWS 上运行以下命令,以使用默认功能和 Istio CA 升级控制平面。在提供的占位符中输入值。您可以选择为公共子网或专用子网启用 Ingress。
公开
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书--ca_key
:中间证书的密钥--root_cert
:根证书--cert_chain
:证书链
专用
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
将以下 YAML 保存到名为
istio-operator-internal-lb.yaml
的文件:apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: components: ingressGateways: - enabled: true k8s: serviceAnnotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" name: istio-ingressgateway
运行
asmcli install
:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH --custom_overlay istio-operator-internal-lb.yaml
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书--ca_key
:中间证书的密钥--root_cert
:根证书--cert_chain
:证书链
Amazon EKS
在 Amazon EKS 上运行以下命令,以使用默认功能和 Istio CA 升级控制层面。在提供的占位符中输入值。
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书--ca_key
:中间证书的密钥--root_cert
:根证书--cert_chain
:证书链
使用可选功能升级
叠加文件是一个 YAML 文件,其中包含您传递给 asmcli
以配置控制层面的 IstioOperator
自定义资源 (CR)。您可以替换默认控制平面配置,并通过将 YAML 文件传递给 asmcli
来启用可选功能。您可以叠加多个文件,每个叠加文件会覆盖之前各层的配置。
GKE
运行以下命令以使用可选功能安装控制层面。如需添加多个文件,请指定 --custom_overlay
和文件名,例如:--custom_overlayoverlay_file1.yaml
--custom_overlay overlay_file2.yaml --custom_overlay overlay_file3.yaml
。在提供的占位符中输入值。
./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
指定叠加文件的名称。
Google Cloud 外部
在 GKE on VMware、Google Distributed Cloud Virtual for Bare Metal、GKE on AWS 或 Amazon EKS 上运行以下命令。在提供的占位符中输入值。
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
:./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
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--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-1107-1 istiod-asm-176-1-67998f4b55-r76kr 1/1 Running 0 68m asm-1107-1 istiod-asm-182-2-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-1118-4 istiod-asm-182-2-5cd96f88f6-wm68b 1/1 Running 0 27s asm-1118-4
在输出中的
REV
列下,记下新版本的修订版标签的值。在此示例中,该值为asm-1118-4
。另请注意旧版
istiod
的修订版本标签中的值。 将工作负载移至新版本后,您需要使用此值删除旧版本的istiod
。在示例输出中,旧版本的修订版本标签值为asm-1107-1
。
将修订版本标签添加到应用命名空间,并移除
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
的步骤。如果您的应用出现问题,请按照以下步骤回滚。完成转换
如果您确信应用按预期正常运行,请移除旧控制平面以完成到新版本的转换。
切换到
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
标志,则asmcli
会启用规范化服务控制器。我们建议将其保持启用状态,但如果您需要停用,请参阅启用和停用规范化服务控制器。如果您部署了网关,请务必更改命名空间或部署上的修订版本标签以匹配先前版本的
istiod
。按照安装和升级网关指南中“就地升级”部分中所述的相同流程执行操作。
部署和重新部署工作负载
您需要启用自动边车代理注入(自动注入),才能完成安装(或升级)。从 OSS Istio 迁移和升级遵循基于修订版本的升级流程(在 Istio 文档中称为“Canary 升级”)。使用基于修订版本的升级时,新版本的控制平面会与现有控制平面一起安装。然后,您可以将一部分工作负载迁移到新版本,这样,您就可以先通过一小部分工作负载监控升级的影响,然后再将所有流量迁移到新版本。
该脚本在 istiod
上设置格式为 istio.io/rev=asm-1118-4
的修订版本标签。要启用自动注入,请向一个或多个命名空间添加匹配的修订版本标签。Sidecar 注入器网络钩子会使用修订版本标签将注入的 Sidecar 与特定 istiod
修订版本相关联。添加标签后,重启命名空间中的 pod 以注入 Sidecar。
获取
istiod
和istio-ingressgateway
上的修订版本标签。kubectl get pod -n istio-system -L istio.io/rev
此命令的输出类似如下所示。
NAME READY STATUS RESTARTS AGE REV istio-ingressgateway-65d884685d-6hrdk 1/1 Running 0 67m istio-ingressgateway-65d884685d-94wgz 1/1 Running 0 67m istio-ingressgateway-asm-182-2-8b5fc8767-gk6hb 1/1 Running 0 5s asm-1118-4 istio-ingressgateway-asm-182-2-8b5fc8767-hn4w2 1/1 Running 0 20s asm-1118-4 istiod-asm-176-1-67998f4b55-lrzpz 1/1 Running 0 68m asm-1107-1 istiod-asm-176-1-67998f4b55-r76kr 1/1 Running 0 68m asm-1107-1 istiod-asm-182-2-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-1118-4 istiod-asm-182-2-5cd96f88f6-wm68b 1/1 Running 0 27s asm-1118-4
在输出中的
REV
列下,记下新版本的修订版标签的值。在此示例中,该值为asm-1118-4
。另请注意旧版
istiod
的修订版本标签中的值。 将工作负载移至新版本后,您需要使用此值删除旧版本的istiod
。在示例输出中,旧版本的修订版本标签值为asm-1107-1
。
将修订版本标签添加到命名空间,并移除
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
的步骤。如果您的应用出现问题,请按照以下步骤回滚。完成转换
如果您确信应用按预期正常运行,请移除旧控制平面以完成到新版本的转换。
切换到
anthos-service-mesh
GitHub 代码库中的文件所在的目录。配置验证 Webhook 以使用新的控制平面。
kubectl apply -f asm/istio/istiod-service.yaml
删除旧
istio-ingressgateway
部署。要运行的命令取决于您是从 Istio 迁移还是从旧版 Anthos Service Mesh 升级:迁移
如果您是从 Istio 迁移,旧的
istio-ingressgateway
没有修订版本标签。kubectl delete deploy/istio-ingressgateway -n istio-system
升级
如果您是从旧版 Anthos Service Mesh 升级,请在以下命令中将
OLD_REVISION
替换为旧版istio-ingressgateway
的修订版本标签。kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=OLD_REVISION -n istio-system --ignore-not-found=true
删除
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
测试应用时遇到问题,请按照以下步骤回滚到之前的版本:切换回旧版
istio-ingressgateway
。在以下命令中,将OLD_REVISION
替换为旧修订版本。kubectl patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "OLD_REVISION"}]'
重新为您的命名空间添加标签,以启用旧版
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
移除新的
istio-ingressgateway
部署。确保以下命令中的REVISION
值正确无误。kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=REVISION -n istio-system --ignore-not-found=true
移除新版
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
标志,则脚本会启用规范化服务控制器。我们建议将其保持启用状态,但如果您需要停用,请参阅启用和停用规范化服务控制器。