您正在查看 Anthos Service Mesh 1.10 的文档。查看最新文档或选择其他可用版本:

在多项目网格中升级 GKE 上的 Anthos Service Mesh

本指南介绍如何在 Google Kubernetes Engine (GKE) 集群上,将包含属于不同 Cloud 项目的多个集群网格从 升级到 Anthos Service Mesh 。

准备工作

在安装 Anthos Service Mesh 之前,请确保您已经:

准备升级

如果您自定义了先前的安装,在升级至新的 Anthos Service Mesh 版本或从 Istio 迁移时,需要相同的自定义。如果您通过向 istioctl install 添加 --set values 标志来自定义安装,则必须将这些设置添加到 IstioOperator YAML 文件(称为 叠加文件。您可以在运行脚本时使用 --custom_overlay 选项和文件名来指定叠加文件。脚本将叠加文件传递给 istioctl install

脚本遵循修订版本升级过程(在 Istio 文档中称为“Canary”升级)。使用基于修订版本的升级时,该脚本会安装新版本的控制层面,与现有控制层面并排。安装新版本时,该脚本包含用于标识新控制层面的 revision 标签。

然后您迁移至新版本,方式是在工作负载上设置相同的 revision 标签并执行滚动重启以重新注入代理,以便这些代理使用新的 Anthos Service Mesh 版本和配置。通过这种方法,您可以监控升级对一小部分工作负载的影响。测试应用后,您可以将所有流量迁移到新版本。此方法比执行就地升级更安全,因为新的控制层面组件替换了旧版本。

设置环境变量

  1. 获取将在其中创建集群的项目的 ID 和 Environ 环境宿主项目的编号。

    gcloud

    运行以下命令:

    gcloud projects list
    

    控制台

    1. 转到 Cloud Console 中的信息中心页面

      转到“信息中心”页面

    2. 点击页面顶部的请选择:下拉列表。在随即显示的从以下列表中选择:窗口中,选择您的项目。

      项目 ID 会显示在项目信息中心的项目信息卡片上。

  2. 为在其中创建集群的项目的 ID 创建环境变量:

    export PROJECT_ID=YOUR_PROJECT_ID

  3. Environ 环境宿主项目的项目编号创建环境变量。

    export ENVIRON_PROJECT_NUMBER=YOUR_ENVIRON_PROJECT_NUMBER
  4. 创建以下环境变量:

    • 设置集群名称:

      export CLUSTER_NAME=YOUR_CLUSTER_NAME

    • CLUSTER_LOCATION 设置为您的集群区域或集群地区:

      export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION

  5. gcloud 命令行工具设置默认区域或地区。如果您未在此处设置默认值,请务必在本页面的 gcloud container clusters 命令中指定 --zone--region 选项。

    • 如果您有一个单区域集群,请设置默认区域:

      gcloud config set compute/zone ${CLUSTER_LOCATION}
    • 如果您有一个地区级集群,请设置默认地区:

      gcloud config set compute/region ${CLUSTER_LOCATION}

    提示:为了让您以后更轻松地设置 shell 环境,您可以将每个环境变量的 export 语句复制并粘贴到启动新 shell 时将对其执行 source 的简单 shell 脚本。您还可以添加 gcloud 命令,以将默认值设置为脚本。或者,您可以使用 gcloud init 创建并激活命名的 gcloud 配置。

设置凭据和权限

  1. 获取身份验证凭据以便与集群进行交互。此命令还会将 kubectl 的当前上下文设置为该集群。

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
        --project=${PROJECT_ID}
    
  2. 向当前用户授予集群管理员权限。您需要这些权限,以便为 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

  1. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:

    curl -LO -linux-amd64.tar.gz
  2. 下载签名文件并使用 openssl 验证签名:

    curl -LO -linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature -linux-amd64.tar.gz.1.sig -linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    预期输出为 Verified OK

  3. 将文件内容提取到文件系统上的任意位置。例如,若要将内容提取到当前工作目录,请运行以下命令:

     tar xzf -linux-amd64.tar.gz

    该命令会在当前工作目录中创建一个名为 的安装目录,其中包含:

    • samples 目录中的示例应用。
    • 用于安装 Anthos Service Mesh 的 istioctl 命令行工具位于 bin 目录中。
    • Anthos Service Mesh 配置文件位于 manifests/profiles 目录中。
  4. 确保您位于 Anthos Service Mesh 安装的根目录。

    cd 

Mac OS

  1. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:

    curl -LO -osx.tar.gz
  2. 下载签名文件并使用 openssl 验证签名:

    curl -LO -osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature -osx.tar.gz.1.sig -osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    预期输出为 Verified OK

  3. 将文件内容提取到文件系统上的任意位置。例如,若要将内容提取到当前工作目录,请运行以下命令:

    tar xzf -osx.tar.gz

    该命令会在当前工作目录中创建一个名为 的安装目录,其中包含:

    • samples 目录中的示例应用。
    • 用于安装 Anthos Service Mesh 的 istioctl 命令行工具位于 bin 目录中。
    • Anthos Service Mesh 配置文件位于 manifests/profiles 目录中。
  4. 确保您位于 Anthos Service Mesh 安装的根目录。

    cd 

Windows

  1. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:

    curl -LO -win.zip
  2. 下载签名文件并使用 openssl 验证签名:

    curl -LO -win.zip.1.sig
    openssl dgst -verify - -signature -win.zip.1.sig -win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    预期输出为 Verified OK

  3. 将文件内容提取到文件系统上的任意位置。例如,若要将内容提取到当前工作目录,请运行以下命令:

    tar xzf -win.zip

    该命令会在当前工作目录中创建一个名为 的安装目录,其中包含:

    • samples 目录中的示例应用。
    • 用于安装 Anthos Service Mesh 的 istioctl 命令行工具位于 bin 目录中。
    • Anthos Service Mesh 配置文件位于 manifests/profiles 目录中。
  4. 确保您位于 Anthos Service Mesh 安装的根目录。

    cd 

准备资源配置文件

运行 istioctl install 命令时,请在命令行中指定 -f istio-operator.yaml。此文件包含 Anthos Service Mesh 所需的项目和集群的相关信息。您需要下载包含 istio-operator.yaml 和其他资源配置文件的软件包,以便设置项目和集群信息。

如需准备资源配置文件,请执行以下操作:

Mesh CA

  1. 为 Anthos Service Mesh 软件包资源配置文件创建一个新目录。我们建议您使用集群名称作为目录名称。

  2. 切换到您要在其中下载 Anthos Service Mesh 软件包的目录。

  3. 验证 kpt 版本。确保运行的是 1.x 之前版本的 kpt:

    kpt version
    

    输出应类似如下所示:

    0.39.2

    如果您使用的是 kpt 1.x 版或更高版本,请参阅设置环境以下载您的操作系统所需的版本。

  4. 下载软件包:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@ asm
    
  5. 为在其中创建集群的项目设置项目 ID:

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  6. 为队列宿主项目设置项目编号:

    kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
    
  7. 设置集群名称:

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  8. 设置默认区域或地区:

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    
  9. 将标记设置为您要安装的 Anthos Service Mesh 版本:

    kpt cfg set asm anthos.servicemesh.tag 
    
  10. 在 Anthos Service Mesh 软件包资源配置文件中设置修订版本:

    kpt cfg set asm anthos.servicemesh.rev 
    

    安装 Anthos Service Mesh 时,您可以在 istiod 上设置修订版本标签。您需要在验证网络钩子上设置相同的修订版本。

  11. 由于多集群配置中的集群在不同项目中,因此您需要为将形成多集群/多项目服务网格的其他项目配置信任网域别名

    1. 获取将进入多集群/多项目网格的所有集群的项目 ID

    2. 针对每个集群的项目 ID,设置信任网域别名。例如,如果 3 个项目中存在集群,请运行以下命令,并将 PROJECT_ID_1PROJECT_ID_2PROJECT_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 之后,您还必须启用跨集群负载平衡

  12. 输出 kpt setter 的值:

    kpt cfg list-setters asm
    

    此命令的输出类似如下所示:

                              NAME                                                       VALUE
    anthos.servicemesh.canonicalServiceHub               gcr.io/gke-release/asm/canonical-service-controller:
    anthos.servicemesh.controlplane.monitoring.enabled   true
    anthos.servicemesh.hub                               gcr.io/gke-release/asm
    anthos.servicemesh.hubMembershipID                   MEMBERSHIP_ID
    anthos.servicemesh.tag                               
    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

  1. 为 Anthos Service Mesh 软件包资源配置文件创建一个新目录。我们建议您使用集群名称作为目录名称。

  2. 切换到您要在其中下载 Anthos Service Mesh 软件包的目录。

  3. 验证 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)"
    
  4. 下载软件包:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@ asm
    
  5. 为在其中创建集群的项目设置项目 ID:

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  6. 为队列宿主项目设置项目编号:

    kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
    
  7. 设置集群名称:

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  8. 设置默认区域或地区:

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    
  9. 将标记设置为您要安装的 Anthos Service Mesh 版本:

    kpt cfg set asm anthos.servicemesh.tag 
    
  10. 在 Anthos Service Mesh 软件包资源配置文件中设置修订版本:

    kpt cfg set asm anthos.servicemesh.rev 
    
  11. 输出 kpt setter 的值:

    kpt cfg list-setters asm
    

    此命令的输出类似如下所示:

                              NAME                                                       VALUE
    anthos.servicemesh.canonicalServiceHub               gcr.io/gke-release/asm/canonical-service-controller:
    anthos.servicemesh.controlplane.monitoring.enabled   true
    anthos.servicemesh.hub                               gcr.io/gke-release/asm
    anthos.servicemesh.hubMembershipID                   MEMBERSHIP_ID
    anthos.servicemesh.tag                               
    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

  1. 验证当前的 kubeconfig 上下文是否指向要安装 Anthos Service Mesh 的集群:

    kubectl config current-context
    

    输出的格式如下:

    gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME

    kubeconfig 上下文和 kpt setter 的值必须匹配。如果需要,请运行 gcloud container clusters get-credentials 命令来设置当前的 kubeconfig 上下文。

  2. 如果需要,请切换到 目录。istioctl 客户端依赖于版本。请确保使用 /bin 目录中的版本。

  3. 运行以下命令以使用 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 \
      --revision=
    

    --revision 参数会将格式为 istio.io/rev= 的修订版本标签添加到 istiod。自动 Sidecar 注入器网络钩子使用修订版本标签将注入的 Sidecar 与特定 istiod 修订版本相关联。如需为命名空间启用 Sidecar 自动注入功能,您必须使用一个与 istiod Deployment 匹配的修订版本来为其添加标签。

    以下文件将替换 istio-operator.yaml 文件中的设置:

    • multiproject.yaml 文件设置 asm-gcp-multiproject 配置文件。

    • multicluster.yaml 文件配置 Anthos Service Mesh 进行多集群配置所需的设置。

  4. 检查 istio-system 中的控制层面 Pod 是否已启动:

    kubectl get pods -n istio-system
    

    输出示例:

    NAME                                        READY   STATUS    RESTARTS   AGE
    istio-ingressgateway-c56675fcd-86zdn        1/1     Running   0          2m9s
    istiod--6d5cfd4b89-xztlr           1/1     Running   0          3m44s
    istiod-fb7f746f4-wcntn                      1/1     Running   0          50m

    您有两个控制层面 Deployment 和 Service 并排运行。

  5. 将规范化服务控制器部署到您的集群:

    kubectl apply -f asm/canonical-service/controller.yaml

    规范化服务控制器按照所属的逻辑服务对工作负载进行分组。如需详细了解规范化服务,请参阅规范化服务概览。

Istio CA

  1. 验证当前的 kubeconfig 上下文是否指向要安装 Anthos Service Mesh 的集群:

    kubectl config current-context
    

    输出的格式如下:

    gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME

    kubeconfig 上下文和 kpt setter 的值必须匹配。如果需要,请运行 gcloud container clusters get-credentials 命令来设置当前的 kubeconfig 上下文。

  2. 如果需要,请切换到 目录。istioctl 客户端依赖于版本。请确保使用 /bin 目录中的版本。

  3. 运行以下命令以使用 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 \
      --revision=
    

    --revision 参数会将格式为 istio.io/rev= 的修订版本标签添加到 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 进行多集群配置所需的设置。

  4. 检查 istio-system 中的控制层面 Pod 是否已启动:

    kubectl get pods -n istio-system
    

    输出示例:

    NAME                                        READY   STATUS    RESTARTS   AGE
    istio-ingressgateway-c56675fcd-86zdn        1/1     Running   0          2m9s
    istiod--6d5cfd4b89-xztlr           1/1     Running   0          3m44s
    istiod-fb7f746f4-wcntn                      1/1     Running   0          50m

    您有两个控制层面 Deployment 和 Service 并排运行。

  5. 将规范化服务控制器部署到您的集群:

    kubectl apply -f asm/canonical-service/controller.yaml

    规范化服务控制器按照所属的逻辑服务对工作负载进行分组。如需详细了解规范化服务,请参阅规范化服务概览。

部署和重新部署工作负载

您需要启用自动 Sidecar 代理注入(自动注入),才能完成安装。 从 OSS Istio 迁移和升级遵循基于修订版本的升级流程(在 Istio 文档中称为“Canary 升级”)。使用基于修订版本的升级时,新版本的控制层面会与现有控制层面一起安装。然后,您可以将一部分工作负载迁移到新版本,这样,您就可以先通过一小部分工作负载监控升级的影响,然后再将所有流量迁移到新版本。

运行 istioctl install 时,您可以在 istiodistio.io/rev= 格式设置修订版本标签。要启用自动注入,请向一个或多个命名空间添加匹配的修订版本标签。Sidecar 注入器网络钩子使用修订版本标签将注入的 Sidecar 与特定 istiod 修订版本相关联。添加标签后,重启命名空间中的 pod 以注入 Sidecar。

  1. 获取 istiodistio-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    
    istio-ingressgateway-asm-182-2-8b5fc8767-hn4w2   1/1     Running   0          20s   
    istiod-asm-176-1-67998f4b55-lrzpz                1/1     Running   0          68m   
    istiod-asm-176-1-67998f4b55-r76kr                1/1     Running   0          68m   
    istiod-asm-182-2-5cd96f88f6-n7tj9                1/1     Running   0          27s   
    istiod-asm-182-2-5cd96f88f6-wm68b                1/1     Running   0          27s   
    1. 在输出中的 REV 列下,记下新版本的修订版标签的值。在此示例中,该值为

    2. 另请注意旧版 istiod 的修订版本标签中的值。 将工作负载移至新版本后,您需要使用此值删除旧版本的 istiod。在示例输出中,旧版本的修订版本标签值为

  2. 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

  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 标签。

  4. 重启 pod 以触发重新注入。

    kubectl rollout restart deployment -n NAMESPACE
  5. 验证 pod 是否配置为指向新版 istiod

    kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
  6. 测试您的应用,验证工作负载是否正常工作。

  7. 如果您的其他命名空间中存在工作负载,请重复上述步骤以标记命名空间并重启 Pod。

  8. 如果您确信应用按预期正常运行,请继续执行转换到新版 istiod 的步骤。如果您的应用出现问题,请按照以下步骤回滚。

    完成转换

    如果您确信应用按预期正常运行,请移除旧控制层面以完成到新版本的转换。

    1. 切换到 anthos-service-mesh GitHub 代码库中的文件所在的目录。

    2. 配置验证 Webhook 以使用新的控制层面。

      kubectl apply -f asm/istio/istiod-service.yaml
      
    3. 删除旧 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
      
    4. 删除 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
      
    5. 移除旧版 IstioOperator 配置。

      kubectl delete IstioOperator installed-state-OLD_REVISION -n istio-system
      

      预期输出如下所示:

      istiooperator.install.istio.io "installed-state-OLD_REVISION" deleted

    回滚

    如果您在使用新版 istiod 测试应用时遇到问题,请按照以下步骤回滚到之前的版本:

    1. 切换回旧版 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"}]'
      
    2. 重新为您的命名空间添加标签,以启用旧版 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
    3. 确认命名空间上的修订版本标签与旧版 istiod 的修订版本标签一致:

      kubectl get ns NAMESPACE --show-labels
      
    4. 重启 pod 以触发重新注入,以使代理具有之前的版本:

      kubectl rollout restart deployment -n NAMESPACE
      
    5. 移除新的 istio-ingressgateway 部署。确保以下命令中的 REVISION 值正确无误。

      kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=REVISION -n istio-system --ignore-not-found=true
      
    6. 移除新版 istiod。确保以下命令中的 REVISION 值正确无误。

      kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true
      
    7. 移除新版 IstioOperator 配置。

      kubectl delete IstioOperator installed-state-REVISION -n istio-system
      

      预期输出如下所示:

      istiooperator.install.istio.io "installed-state-REVISION" deleted
    8. 如果您未添加 --disable_canonical_service 标志,则脚本会启用规范化服务控制器。我们建议将其保持启用状态,但如果您需要停用,请参阅启用和停用规范化服务控制器

后续步骤