在本地升级 Anthos Service Mesh

本指南介绍如何在 GKE on VMware 上将 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. 安排停机时间。完成升级可能需要长达 1 小时的时间,具体取决于集群的规模。 请注意,这不包括需要重新部署工作负载以更新 Sidecar 代理所需的时间。

设置您的环境

在本地机器上,安装并初始化 Google Cloud CLI

如果您已安装 gcloud CLI,请执行以下操作:

  1. 使用 gcloud CLI 进行身份验证:

    gcloud auth login
    
  2. 更新组件:

    gcloud components update
    
  3. 安装 kubectl

    gcloud components install kubectl
    
  4. 获取在其中创建集群的项目的项目 ID:

    gcloud

    gcloud projects list

    控制台

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

      前往“信息中心”页面

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

  5. 设置 Google Cloud CLI 的默认项目 ID:

    gcloud config set project PROJECT_ID

设置凭据和权限

  1. 确保您在要安装 Anthos Service Mesh 的 GKE on VMware 用户集群上具有 kubectl。请注意,您只能在用户集群上安装 Anthos Service Mesh,不能在管理员集群上安装。
  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

升级 Anthos Service Mesh

本部分介绍如何升级 Anthos Service Mesh 以及如何启用在支持的功能页面中列出的支持的默认功能。如需了解如何启用支持的可选功能,请参阅启用可选功能

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

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

PERMISSIVE mTLS

istioctl manifest apply --set profile=asm-onprem

STRICT mTLS

istioctl manifest apply --set profile=asm-onprem \
  --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 的实例。所有其他组件均为新安装组件。

更新 Sidecar 代理

Anthos Service Mesh 使用 Sidecar 代理来增强网络安全性、可靠性和可观测性。借助 Anthos Service Mesh,这些功能可以从应用的主容器中抽象出来,并在作为同一 Pod 中单独的容器提供的常见进程外代理中实现。

在安装 Anthos Service Mesh 之前在集群上运行的任何工作负载都需要注入或更新边车代理,以使其具有当前的 Anthos Service Mesh 版本。在部署新工作负载之前,确保配置边车代理注入,以便 Anthos Service Mesh 可以监控并保护流量。

您可以使用一个命令启用自动 Sidecar 注入,例如:

kubectl label namespace NAMESPACE istio-injection=enabled --overwrite

其中,NAMESPACE 是应用服务的命名空间的名称;如果未显式创建命名空间,则为 default

如需了解详情,请参阅注入 Sidecar 代理