本页面是多页指南中的一部分,介绍如何在 GKE 集群上将网格从 Istio 1.8 or 1.9 迁移到 Anthos Service Mesh 版本 1.9.8,该网格包含属于不同 Google Cloud 项目的多个集群。如果您使用的是 Istio 的更早版本,则必须先升级,然后才能迁移到 Anthos Service Mesh。如果您需要升级,请在适用的 Istio 版本中转到升级 Istio 页面。在一个步骤中升级多个 Istio 次要版本(即 1.6.x 到 1.8.x)未经过官方测试或推荐。
如需了解单集群网格上的迁移或为包含属于同一 Google Cloud 项目的多个集群的网格进行迁移,请参阅在 GKE 上安装、迁移和升级。
准备工作
在安装 Anthos Service Mesh 之前,请确保您已经:
准备迁移
请务必查看准备从 Istio 迁移。
要从 Istio 迁移,您需要按照修订版本升级过程(在 Istio 文档中称为“Canary”升级)操作。使用基于修订版本的升级时,您将同时安装新版控制层面和现有控制层面。运行 istioctl install
时,您可以添加一个用于设置新控制平面的 revision
标签的选项。
然后,在工作负载上设置相同的 revision
标签并执行滚动重启,以使用新的 Anthos Service Mesh 版本重新注入代理,从而迁移到新版本。通过这种方法,您可以监控升级对一小部分工作负载的影响。测试应用后,您可以将所有流量迁移到新版本。此方法比执行就地升级更安全,因为新控制层面会立即替换旧版控制层面。
设置凭据和权限
初始化您的项目,以便准备好安装。除此之外,以下命令会创建一个服务账号,可让控制层面组件(例如边车代理)安全地访问您的项目的数据和资源。
curl --request POST \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ --data '' \ "https://meshconfig.googleapis.com/v1alpha1/projects/${PROJECT_ID}:initialize"
该命令会以空花括号作为响应:
{}
获取身份验证凭据以便与集群进行交互。此命令还会将
kubectl
的当前上下文设置为该集群。gcloud container clusters get-credentials ${CLUSTER_NAME} \ --project=${PROJECT_ID}
向当前用户授予集群管理员权限。您需要这些权限,以便为 Anthos Service Mesh 创建必要的基于角色的访问权限控制 (RBAC) 规则。
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user="$(gcloud config get-value core/account)"
如果看到 "cluster-admin-binding" already exists
错误,您可以放心地忽略该错误并继续采用现有集群管理员绑定。
下载安装文件
Linux
将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-linux-amd64.tar.gz
下载签名文件并使用
openssl
验证签名:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.9.8-asm.6-linux-amd64.tar.gz.1.sig istio-1.9.8-asm.6-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
预期输出为
Verified OK
。将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.9.8-asm.6-linux-amd64.tar.gz
该命令会在当前工作目录中创建一个名为
istio-1.9.8-asm.6
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
确保您位于 Anthos Service Mesh 安装的根目录。
cd istio-1.9.8-asm.6
Mac OS
将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-osx.tar.gz
下载签名文件并使用
openssl
验证签名:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.9.8-asm.6-osx.tar.gz.1.sig istio-1.9.8-asm.6-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
预期输出为
Verified OK
。将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.9.8-asm.6-osx.tar.gz
该命令会在当前工作目录中创建一个名为
istio-1.9.8-asm.6
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
确保您位于 Anthos Service Mesh 安装的根目录。
cd istio-1.9.8-asm.6
Windows
将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-win.zip
下载签名文件并使用
openssl
验证签名:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-win.zip.1.sig openssl dgst -verify - -signature istio-1.9.8-asm.6-win.zip.1.sig istio-1.9.8-asm.6-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
预期输出为
Verified OK
。将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.9.8-asm.6-win.zip
该命令会在当前工作目录中创建一个名为
istio-1.9.8-asm.6
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
确保您位于 Anthos Service Mesh 安装的根目录。
cd istio-1.9.8-asm.6
准备资源配置文件
运行 istioctl install
命令时,请在命令行中指定 -f istio-operator.yaml
。此文件包含 Anthos Service Mesh 所需的项目和集群的相关信息。您需要下载包含 istio-operator.yaml
和其他资源配置文件的软件包,以便设置项目和集群信息。
如需准备资源配置文件,请执行以下操作:
Mesh CA
为 Anthos Service Mesh 软件包资源配置文件创建一个新目录。我们建议您使用集群名称作为目录名称。
切换到您要在其中下载 Anthos Service Mesh 软件包的目录。
验证
kpt
版本。确保运行的是 1.x 之前版本的 kpt:kpt version
输出应类似如下所示:
0.39.2
如果您使用的是
kpt
1.x 版或更高版本,请参阅设置环境以下载您的操作系统所需的版本。下载软件包:
kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.9-asm asm
为在其中创建集群的项目设置项目 ID:
kpt cfg set asm gcloud.core.project ${PROJECT_ID}
为舰队宿主项目设置项目编号:
kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
设置集群名称:
kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
设置默认可用区或区域:
kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
将标记设置为您要安装的 Anthos Service Mesh 版本:
kpt cfg set asm anthos.servicemesh.tag 1.9.8-asm.6
在 Anthos Service Mesh 软件包资源配置文件中设置修订版本:
kpt cfg set asm anthos.servicemesh.rev asm-198-6
安装 Anthos Service Mesh 时,您可以在
istiod
上设置修订版本标签。您需要在验证网络钩子上设置相同的修订版本。由于多集群配置中的集群在不同项目中,因此您需要为将形成多集群/多项目服务网格的其他项目配置信任网域别名。
获取将进入多集群/多项目网格的所有集群的项目 ID。
针对每个集群的项目 ID,设置信任网域别名。例如,如果 3 个项目中存在集群,请运行以下命令,并将
PROJECT_ID_1
、PROJECT_ID_2
和PROJECT_ID_3
替换为每个集群的项目 ID。kpt cfg set asm anthos.servicemesh.trustDomainAliases PROJECT_ID_1.svc.id.goog PROJECT_ID_2.svc.id.goog PROJECT_ID_3.svc.id.goog
在其他项目中配置集群时,您可以使用相同的命令。
通过信任网域别名,Mesh CA 可对其他项目中的集群上的工作负载进行身份验证。除了设置信任网域别名之外,在安装 Anthos Service Mesh 之后,您还必须启用跨集群负载均衡。
输出
kpt
setter 的值:kpt cfg list-setters asm
此命令的输出类似如下所示:
NAME VALUE anthos.servicemesh.canonicalServiceHub gke.gcr.io/asm/canonical-service-controller:1.9.8-asm.6 anthos.servicemesh.controlplane.monitoring.enabled true anthos.servicemesh.hub gke.gcr.io/asm anthos.servicemesh.hubMembershipID MEMBERSHIP_ID anthos.servicemesh.tag 1.9.8-asm.6 anthos.servicemesh.trustDomainAliases [example-project-12345.svc.id.goog,example-project-23456.svc.id.goog,example-project-98765.svc.id.goog] base-dir base gcloud.compute.location us-central gcloud.compute.network default gcloud.compute.subnetwork default gcloud.container.cluster example-cluster-1 gcloud.container.cluster.clusterSecondaryRange gcloud.container.cluster.releaseChannel REGULAR gcloud.container.cluster.servicesSecondaryRange gcloud.container.nodepool.max-nodes 4 gcloud.core.project example-project-12345 gcloud.project.environProjectID FLEET_PROJECT_ID gcloud.project.environProjectNumber 1234567890123 gcloud.project.projectNumber 9876543210987
验证以下 setter 的值是否正确:
- anthos.servicemesh.rev
- anthos.servicemesh.tag
- anthos.servicemesh.trustDomainAliases
- gcloud.compute.location
- gcloud.container.cluster
- gcloud.core.project
- gcloud.project.environProjectNumber
您可以忽略其他 setter 的值。
Istio CA
为 Anthos Service Mesh 软件包资源配置文件创建一个新目录。我们建议您使用集群名称作为目录名称。
切换到您要在其中下载 Anthos Service Mesh 软件包的目录。
验证
kpt
版本。确保运行的是 1.x 之前版本的 kpt:kpt version
输出应类似如下所示:
0.39.2
如果您使用的是
kpt
1.x 版或更高版本,请下载所需的版本:curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2 chmod +x kpt_0_39_2 alias kpt="$(readlink -f kpt_0_39_2)"
下载软件包:
kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.9-asm asm
为在其中创建集群的项目设置项目 ID:
kpt cfg set asm gcloud.core.project ${PROJECT_ID}
为舰队宿主项目设置项目编号:
kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
设置集群名称:
kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
设置默认可用区或区域:
kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
将标记设置为您要安装的 Anthos Service Mesh 版本:
kpt cfg set asm anthos.servicemesh.tag 1.9.8-asm.6
在 Anthos Service Mesh 软件包资源配置文件中设置修订版本:
kpt cfg set asm anthos.servicemesh.rev asm-198-6
输出
kpt
setter 的值:kpt cfg list-setters asm
此命令的输出类似如下所示:
NAME VALUE anthos.servicemesh.canonicalServiceHub gke.gcr.io/asm/canonical-service-controller:1.9.8-asm.6 anthos.servicemesh.controlplane.monitoring.enabled true anthos.servicemesh.hub gke.gcr.io/asm anthos.servicemesh.hubMembershipID MEMBERSHIP_ID anthos.servicemesh.tag 1.9.8-asm.6 anthos.servicemesh.trustDomainAliases base-dir base gcloud.compute.location us-central gcloud.compute.network default gcloud.compute.subnetwork default gcloud.container.cluster example-cluster-1 gcloud.container.cluster.clusterSecondaryRange gcloud.container.cluster.releaseChannel REGULAR gcloud.container.cluster.servicesSecondaryRange gcloud.container.nodepool.max-nodes 4 gcloud.core.project example-project-12345 gcloud.project.environProjectID FLEET_PROJECT_ID gcloud.project.environProjectNumber 1234567890123 gcloud.project.projectNumber 9876543210987
验证以下 setter 的值是否正确:
- anthos.servicemesh.rev
- anthos.servicemesh.tag
- gcloud.compute.location
- gcloud.container.cluster
- gcloud.core.project
- gcloud.project.environProjectNumber
您可以忽略其他 setter 的值。
迁移到 Anthos Service Mesh
Mesh CA
验证当前的
kubeconfig
上下文是否指向要安装 Anthos Service Mesh 的集群:kubectl config current-context
输出的格式如下:
gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME
kubeconfig
上下文和kpt
setter 的值必须匹配。如果需要,请运行gcloud container clusters get-credentials
命令来设置当前的kubeconfig
上下文。如果需要,请切换到
istio-1.9.8-asm.6
目录。istioctl
客户端依赖于版本。请确保使用istio-1.9.8-asm.6/bin
目录中的版本。运行以下命令以使用
asm-gcp-multiproject
配置文件部署新的控制层面。如果您要启用支持的可选功能,请在以下命令行中添加-f
和 YAML 文件名。如需了解详情,请参阅启用可选功能。bin/istioctl install \ -f asm/istio/istio-operator.yaml \ -f asm/istio/options/multiproject.yaml \ -f asm/istio/options/multicluster.yaml \ -f asm/istio/options/revisioned-istio-ingressgateway.yaml \ --revision=asm-198-6
--revision
参数会将格式为istio.io/rev=asm-198-6
的修订版本标签添加到istiod
。自动 Sidecar 注入器网络钩子使用修订版本标签将注入的 Sidecar 与特定istiod
修订版本相关联。如需为命名空间启用 Sidecar 自动注入功能,您必须使用一个与istiod
Deployment 匹配的修订版本来为其添加标签。以下文件将替换
istio-operator.yaml
文件中的设置:multiproject.yaml
文件设置asm-gcp-multiproject
配置文件。multicluster.yaml
文件配置 Anthos Service Mesh 进行多集群配置所需的设置。revisioned-istio-ingressgateway.yaml
文件为istio-ingressgateway
配置修订版本的 Deployment。
检查
istio-system
中的控制层面 Pod 是否已启动:kubectl get pods -n istio-system
输出示例:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-c56675fcd-86zdn 1/1 Running 0 2m9s istio-ingressgateway-c56675fcd-vn4nv 1/1 Running 0 2m21s istiod-asm-198-6-6d5cfd4b89-xztlr 1/1 Running 0 3m44s istiod-fb7f746f4-wcntn 1/1 Running 0 50m
您有两个控制层面 Deployment 和 Service 并排运行。
将规范化服务控制器部署到您的集群:
kubectl apply -f asm/canonical-service/controller.yaml
规范化服务控制器按照所属的逻辑服务对工作负载进行分组。如需详细了解规范化服务,请参阅规范化服务概览。
Istio CA
验证当前的
kubeconfig
上下文是否指向要安装 Anthos Service Mesh 的集群:kubectl config current-context
输出的格式如下:
gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME
kubeconfig
上下文和kpt
setter 的值必须匹配。如果需要,请运行gcloud container clusters get-credentials
命令来设置当前的kubeconfig
上下文。如果需要,请切换到
istio-1.9.8-asm.6
目录。istioctl
客户端依赖于版本。请确保使用istio-1.9.8-asm.6/bin
目录中的版本。运行以下命令以使用
asm-gcp-multiproject
配置文件部署新的控制层面。如果您要启用支持的可选功能,请在以下命令行中添加-f
和 YAML 文件名。如需了解详情,请参阅启用可选功能。bin/istioctl install \ -f asm/istio/istio-operator.yaml \ -f asm/istio/options/citadel-ca.yaml \ -f asm/istio/options/multiproject.yaml \ -f asm/istio/options/multicluster.yaml \ -f asm/istio/options/revisioned-istio-ingressgateway.yaml \ --revision=asm-198-6
--revision
参数会将格式为istio.io/rev=asm-198-6
的修订版本标签添加到istiod
。自动 Sidecar 注入器网络钩子使用修订版本标签将注入的 Sidecar 与特定istiod
修订版本相关联。如需为命名空间启用 Sidecar 自动注入功能,您必须使用一个与istiod
Deployment 匹配的修订版本来为其添加标签。以下文件将替换
istio-operator.yaml
文件中的设置:citadel-ca.yaml
将 Istio CA 配置为证书授权机构。multiproject.yaml
文件设置asm-gcp-multiproject
配置文件。multicluster.yaml
文件配置 Anthos Service Mesh 进行多集群配置所需的设置。revisioned-istio-ingressgateway.yaml
文件为istio-ingressgateway
配置修订版本的 Deployment。
检查
istio-system
中的控制层面 Pod 是否已启动:kubectl get pods -n istio-system
输出示例:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-c56675fcd-86zdn 1/1 Running 0 2m9s istio-ingressgateway-c56675fcd-vn4nv 1/1 Running 0 2m21s istiod-asm-198-6-6d5cfd4b89-xztlr 1/1 Running 0 3m44s istiod-fb7f746f4-wcntn 1/1 Running 0 50m
您有两个控制层面 Deployment 和 Service 并排运行。
将规范化服务控制器部署到您的集群:
kubectl apply -f asm/canonical-service/controller.yaml
规范化服务控制器按照所属的逻辑服务对工作负载进行分组。如需详细了解规范化服务,请参阅规范化服务概览。
部署和重新部署工作负载
您需要启用自动边车代理注入(自动注入),才能完成安装。 从 OSS Istio 迁移和升级遵循基于修订版本的升级流程(在 Istio 文档中称为“Canary 升级”)。使用基于修订版本的升级时,新版本的控制平面会与现有控制平面一起安装。然后,您可以将一部分工作负载迁移到新版本,这样,您就可以先通过一小部分工作负载监控升级的影响,然后再将所有流量迁移到新版本。
运行 istioctl install
时,您可以在 istiod
以 istio.io/rev=asm-198-6
格式设置修订版本标签。要启用自动注入,请向一个或多个命名空间添加匹配的修订版本标签。Sidecar 注入器网络钩子会使用修订版本标签将注入的 Sidecar 与特定 istiod
修订版本相关联。添加标签后,重启命名空间中的 pod 以注入 Sidecar。
如果您在运行 istioctl
install
时包含 revisioned-istio-ingressgateway.yaml
,则系统会为 istio-ingressgateway
配置修订的 Deployment。这样,您就可以控制何时切换到新版本。
获取
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-198-6 istio-ingressgateway-asm-182-2-8b5fc8767-hn4w2 1/1 Running 0 20s asm-198-6 istiod-asm-176-1-67998f4b55-lrzpz 1/1 Running 0 68m asm-186-8 istiod-asm-176-1-67998f4b55-r76kr 1/1 Running 0 68m asm-186-8 istiod-asm-182-2-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-198-6 istiod-asm-182-2-5cd96f88f6-wm68b 1/1 Running 0 27s asm-198-6
请注意,您是否同时拥有新旧两版
istio-ingressgateway
。如果您在升级时添加了
revisioned-istio-ingressgateway
选项,则已完成istio-ingressgateway
的 Canary 升级。在这种情况下,您的输出会同时显示新旧两版istio-ingressgateway
。如果您在升级时未添加
revisioned-istio-ingressgateway
,则系统会完成istio-ingressgateway
的就地升级。在这种情况下,您的输出仅显示新版本。
在输出中的
REV
列下,记下新版本的修订版标签的值。在此示例中,该值为asm-198-6
。另请注意旧版
istiod
的修订版本标签中的值。 将工作负载移至新版本后,您需要使用此值删除旧版本的istiod
。在示例输出中,旧版本的修订版本标签值为asm-186-8
。
如果您同时拥有新旧两版
istio-ingressgateway
,请将istio-ingressgateway
切换到新修订版本。在以下命令中,将REVISION
的值更改为新版本修订版本标签的值。kubectl patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "REVISION"}]'
预期输出:
service/istio-ingressgateway patched
将修订版本标签添加到命名空间,并移除
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
的步骤。如果您的应用出现问题,请按照以下步骤回滚。再次运行以下命令,确认您拥有新旧两版
istio-ingressgateway
,还是只有新版本。这决定了如何转换到新版本istio-ingressgateway
或如何回滚到旧版本。kubectl get pod -n istio-system -L istio.io/rev
完成转换
如果您确信应用按预期正常运行,请移除旧控制平面以完成到新版本的转换。
切换到
anthos-service-mesh
GitHub 代码库中的文件所在的目录。配置验证 Webhook 以使用新的控制平面。
kubectl apply -f asm/istio/istiod-service.yaml
如果您同时拥有新旧两版
istio-ingressgateway
,请删除旧的istio-ingressgateway
Deployment。要运行的命令取决于您是从 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 迁移,旧的
istiod
没有修订版本标签。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
。您使用的命令取决于您同时拥有新旧两版istio-ingressgateway
还是只有新版本。如果您同时拥有新旧两版
istio-ingressgateway
,请运行kubectl patch service
命令并将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"}]'
如果您只有新版本的
istio-ingressgateway
,请运行kubectl rollout undo
命令。kubectl -n istio-system rollout undo deploy istio-ingressgateway
重新为您的命名空间添加标签,以启用旧版
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
,请移除新的istio-ingressgateway
Deployment。确保以下命令中的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
标志,则脚本会启用规范化服务控制器。我们建议将其保持启用状态,但如果您需要停用,请参阅启用和停用规范化服务控制器。