在 GKE 上升级 Anthos Service Mesh

本指南介绍了如何在 Google Kubernetes Engine 上将 Anthos Service Mesh 从版本 1.4.5+ or 1.5.4+ 升级到版本 1.5.10。

重新部署 Anthos Service Mesh 控制层面组件大约需要 5 到 10 分钟才能完成。此外,您需要在所有工作负载中注入新的 Sidecar 代理,以便这些 Sidecar 代理通过当前 Anthos Service Mesh 版本进行更新。更新 Sidecar 代理所需的时间取决于多种因素,例如 Pod 数量、节点数量、部署扩缩设置、Pod 中断预算和其他配置设置。更新 Sidecar 代理所需的时间估计约为每分钟 100 个 Pod。

准备升级

本部分概述了升级 Anthos Service Mesh 所需执行的步骤。

  1. 查看支持的功能和本指南,熟悉这些功能和升级流程。

  2. 如果您在安装以前版本的 Anthos Service Mesh 时启用了可选功能,则需要在升级时启用相同的功能。如需启用可选功能,您可以添加 --set values 标志,或在运行 istioctl apply 命令时通过 YAML 文件指定 -f 标志。

    如果要从 Anthos Service Mesh 1.4.5+ 升级,并且您在 YAML 文件中启用了可选功能,则需要将 YAML 从 IstioControlPlane API 转换为 IstioOperator API

  3. 如果您是在专用集群上升级 Anthos Service Mesh,则必须添加防火墙规则来打开端口 15017,以使用自动 Sidecar 注入。如果您未添加防火墙规则并启用了自动 Sidecar 注入,则在部署工作负载时会收到错误。如需详细了解如何添加防火墙规则,请参阅针对特定用例添加防火墙规则

  4. 安排停机时间。完成升级可能需要长达 1 小时的时间,具体取决于集群的规模。 请注意,这不包括需要重新部署工作负载以更新 Sidecar 代理所需的时间。

删减 1.4 资源

如果您是使用 GKE Enterprise CLI 的 Alpha 版安装 Anthos Service Mesh 1.4,则可能需要先删减 1.4 资源,然后再升级到版本 1.5.10。

检查 Anthos Service Mesh 资源是否具有 operator.istio.io/component 标签。

kubectl get all -n istio-system --selector operator.istio.io/component

如果该命令返回 No resources found in istio-system namespace,请使用以下命令删减 Anthos Service Mesh 1.4 资源。

kubectl delete deploy -n istio-system promsd
kubectl delete all -n istio-system --selector 'app in (galley, istio-ingressgateway, istio-nodeagent, sidecarInjectorWebhook, promsd, pilot)'

设置项目和集群默认值

  1. 获取在其中创建集群的项目的项目 ID:

    gcloud

    gcloud projects list

    控制台

    1. 在 Google Cloud 控制台中,前往信息中心页面

      前往“信息中心”页面

    2. 点击页面顶部的从以下列表中选择:下拉列表。在随即显示的从以下列表中选择:窗口中,选择您的项目。项目 ID 会显示在项目信息中心的项目信息卡片上。

  2. 为项目 ID 创建环境变量:

    export PROJECT_ID=YOUR_PROJECT_ID
  3. 设置 Google Cloud CLI 的默认项目 ID:

    gcloud config set project ${PROJECT_ID}
    
  4. 创建以下环境变量:

    • 设置集群名称:

      export CLUSTER_NAME=YOUR_CLUSTER_NAME
    • CLUSTER_LOCATION 设置为您的集群区域或集群地区:

      export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
  5. 为 Google Cloud CLI 设置默认可用区或区域。

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

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

      gcloud config set compute/region ${CLUSTER_LOCATION}

设置凭据和权限

  1. 获取用于与集群交互的身份验证凭据
    gcloud container clusters get-credentials ${CLUSTER_NAME}
  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 https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-linux.tar.gz
  2. 下载签名文件并使用 openssl 验证签名:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-linux.tar.gz.1.sig
    openssl dgst -verify - -signature istio-1.5.10-asm.2-linux.tar.gz.1.sig istio-1.5.10-asm.2-linux.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    预期输出为 Verified OK

  3. 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
    tar xzf istio-1.5.10-asm.2-linux.tar.gz

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

    • samples 中的示例应用
    • bin 目录中的以下工具:
      • istioctl:您使用 istioctl 来安装 Anthos Service Mesh。
      • asmctl:安装 Anthos Service Mesh 后,您可以使用 asmctl 来帮助验证安全配置。(目前,GKE on VMware 不支持 asmctl。)

  4. Mac OS

  5. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-osx.tar.gz
  6. 下载签名文件并使用 openssl 验证签名:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.5.10-asm.2-osx.tar.gz.1.sig istio-1.5.10-asm.2-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    预期输出为 Verified OK

  7. 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
    tar xzf istio-1.5.10-asm.2-osx.tar.gz

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

    • samples 中的示例应用
    • bin 目录中的以下工具:
      • istioctl:您使用 istioctl 来安装 Anthos Service Mesh。
      • asmctl:安装 Anthos Service Mesh 后,您可以使用 asmctl 来帮助验证安全配置。(目前,GKE on VMware 不支持 asmctl。)

  8. Windows

  9. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-win.zip
  10. 下载签名文件并使用 openssl 验证签名:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.5.10-asm.2-win.zip.1.sig istio-1.5.10-asm.2-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    预期输出为 Verified OK

  11. 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
    tar xzf istio-1.5.10-asm.2-win.zip

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

    • samples 中的示例应用
    • bin 目录中的以下工具:
      • istioctl:您使用 istioctl 来安装 Anthos Service Mesh。
      • asmctl:安装 Anthos Service Mesh 后,您可以使用 asmctl 来帮助验证安全配置。(目前,GKE on VMware 不支持 asmctl。)

  12. 确保您位于 Anthos Service Mesh 安装的根目录。
    cd istio-1.5.10-asm.2
  13. 为方便起见,请将 /bin 目录中的工具添加到 PATH:
    export PATH=$PWD/bin:$PATH

准备资源配置文件

运行 istioctl apply command 以升级 Anthos Service Mesh 时,将在命令行上指定 -f istio-operator.yaml。此文件包含启用网格遥测和网格安全功能所需的项目和集群的相关信息。您需要下载 istio-operator.yaml 及其他资源配置文件并设置项目和集群信息。

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

  1. 安装 kpt(如果您尚未安装):

    gcloud components install kpt
    
  2. (可选)为 Anthos Service Mesh 软件包资源配置文件创建一个新目录。如果您计划设置多个集群,则可能需要使用集群名称作为目录名称。

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

  4. 将 Anthos Service Mesh 软件包下载到当前工作目录:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.5-asm .
    

  5. 设置集群名称:

      kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}

  6. (可选)使用 kpt setter 自定义资源配置文件。默认情况下,这些 setter 使用 gcloud config 的默认值。如果设置 gcloud config 默认值,或者如果您要更改值,请运行以下 setter 方法:

    • 设置项目 ID:

      kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    • 设置默认可用区或区域:

      kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
  7. (可选)您可以将资源配置文件签入到您自己的源代码控制系统(例如 Cloud Source Repositories),以便您可以跟踪这些文件的更改。

升级 Anthos Service Mesh

本部分介绍如何升级 Anthos Service Mesh 并启用:

  • 支持的功能页面上列出的支持的默认功能。
  • Anthos Service Mesh 证书授权机构 (Mesh CA)。
  • 为 Google Cloud Console 中的 Anthos Service Mesh 信息中心提供支持的遥测数据流水线。

如需了解如何启用支持的可选功能,请参阅启用可选功能

如需安装 Anthos Service Mesh,请运行以下命令:

选择以下任一命令,以在 PERMISSIVE 双向 TLS (mTLS) 身份验证模式或 STRICT mTLS 模式下配置 Anthos Service Mesh。

PERMISSIVE mTLS

istioctl manifest apply --set profile=asm \
  -f asm/cluster/istio-operator.yaml

STRICT mTLS

istioctl manifest apply --set profile=asm \
  -f asm/cluster/istio-operator.yaml \
  --set values.global.mtls.enabled=true

检查控制层面组件

升级需要重新安装控制层面组件,此过程大约需要 5 到 10 分钟才能完成。旧的控制层面组件会被终止,然后在安装新组件时被删除。您可以通过查看工作负载的 AGE 列中的值来检查进度。

kubectl get pod -n istio-system

输出示例:

NAME                                     READY   STATUS        RESTARTS   AGE
istio-ingressgateway-5bfdf7c586-v6wxx    2/2     Terminating   0          25m
istio-ingressgateway-7b598c5557-b88md    2/2     Running       0          5m44s
istiod-78cdbbbdb-d7tps                   1/1     Running       0          5m16s
promsd-576b8db4d6-lqf64                  2/2     Running       1          5m26s

在此示例中,有两个 istio-ingressgateway 实例。系统正在终止 AGE 列中具有 25m 的实例。所有其他组件均为新安装组件。

验证安装

我们建议您使用 asmctl 分析工具来验证项目、集群和工作负载的基本配置。如果 asmctl 测试失败,则 asmctl 会尽可能推荐解决方案。asmctl validate 命令会运行检查以下项的基本测试:

  1. 在项目中启用 Anthos Service Mesh 所需的 API。
  2. Istio-Ingressgateway 是否已正确配置为调用 Mesh CA。
  3. Istiod 和 Istio-Ingressgateway 的整体运行状况。

如果您运行带有可选 --with-testing-workloads 标志的 asmctl validate 命令,则除了基本测试外,asmctl 还会运行检查以下项的安全测试:

  1. 双向 TLS (mTLS) 通信是否配置正确。
  2. Mesh CA 是否可以颁发证书。

为了运行安全测试,asmctl 会在测试命名空间中的集群上部署工作负载,运行 mTLS 通信测试,输出结果,并删除测试命名空间。

如需运行 asmctl,请执行以下操作:

  1. 确保已设置 gcloud application-default 凭据:

     gcloud auth application-default login
    
  2. 获取身份验证凭据以与集群进行交互(如果尚未这样做):

     gcloud container clusters get-credentials ${CLUSTER_NAME}
    
  3. 如需同时运行基本和安全测试(假设 istio-1.5.10-asm.2/bin 位于 PATH 中),请运行以下命令:

    asmctl validate --with-testing-workloads
    

    成功后,该命令会以如下所示的输出作为响应:

    [asmctl version 0.3.0]
    Using Kubernetes context: example-project_us-central1-example-cluster
    To change the context, use the --context flag
    Validating enabled APIs
    OK
    Validating ingressgateway configuration
    OK
    Validating istio system
    OK
    Validating sample traffic
    Launching example services...
    Sent traffic to example service http code: 200
    verified mTLS configuration
    OK
    Validating issued certs
    OK
    

更新 Sidecar 代理

升级 Anthos Service Mesh 之前在集群上运行的任何工作负载都需要注入或更新边车代理,以使其具有当前 Anthos Service Mesh 版本。

借助自动 Sidecar 注入,您可以通过 Pod 重启来更新现有 Pod 的 Sidecar。如何重启 Pod 取决于 Pod 是否在 Deployment 中创建。

  1. 如果您使用了 Deployment,请重启 Deployment,这会重启所有安装了 Sidecar 的 Pod:

    kubectl rollout restart YOUR_DEPLOYMENT -n YOUR_NAMESPACE

    如果您未使用 Deployment,请删除 Pod,系统会自动重新创建 Pod 及其 Sidecar:

    kubectl delete pod -n YOUR_NAMESPACE --all
  2. 检查命名空间中的所有 Pod 是否都已注入 Sidecar:

    kubectl get pod -n YOUR_NAMESPACE --all

    在上一个命令的以下示例输出中,注意 READY 列表示每个工作负载均有两个容器:主容器和边车代理的容器。

    NAME                    READY   STATUS    RESTARTS   AGE
    YOUR_WORKLOAD           2/2     Running   0          20s
    ...