Anthos Service Mesh 1.6

使用 Anthos CLI 在现有集群上安装 Anthos Service Mesh

本指南介绍了如何使用 Anthos 命令行界面 (CLI) 在现有 GKE on Google Cloud 集群上执行 Anthos Service Mesh 版本 1.6.8-asm.9 的清洁安装。如果您安装了先前版本的 Anthos Service Mesh,请参阅在 GKE 上升级 Anthos Service Mesh

Anthos CLI 提供了一种简单的声明方式来配置 Google Cloud 项目并更新满足所有要求的现有 GKE on Google Cloud 集群,然后在该集群上安装 Anthos Service Mesh。Anthos CLI 仅支持在 GKE on Google Cloud 上进行安装。如需在其他环境中安装 Anthos Service Mesh,请参阅以下指南:

如需使用 asm-gcp-multiproject 配置文件或使用 Citadel 作为证书授权机构(而非 Anthos Service Mesh 证书授权机构 (Mesh CA))在 Google Cloud 上安装 Anthos Service Mesh,请参阅在 Google Cloud 上安装 Anthos Service Mesh

安装会启用以下功能:

本指南还介绍了如何在您的项目的 Environ 中注册集群。借助 Environ,您可以组织集群,以简化多集群管理。通过在 Environ 中注册集群,您可以根据需要对服务和其他基础架构进行分组,以应用一致的政策。

准备工作

开始安装之前,请执行以下操作:

要求

  • 您的 GKE 集群必须满足以下要求:

  • 如需将服务端口纳入服务网格,必须为服务端口命名,并且名称必须包含以下语法的端口协议:name: protocol[-suffix],其中方括号表示必须以短划线开头的可选后缀。如需了解详情,请参阅为服务端口命名

限制

仅支持每个 Google Cloud 项目安装一次 Anthos Service Mesh。不支持在单个项目中进行多次网格部署

证书数据

来自 Mesh CA 的证书包含有关应用的服务的以下数据:

  • Google Cloud 项目 ID
  • GKE 命名空间
  • GKE 服务帐号名称

设置环境变量

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

    gcloud

    gcloud projects list
    

    控制台

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

      转到“信息中心”页面

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

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

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

    export PROJECT_ID=YOUR_PROJECT_ID

  3. 为项目编号创建环境变量:

    export ENVIRON_PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")

    尽管此项目编号与在其中创建集群的项目的编号相同,但此项目编号将用于在集群上和 Anthos Service Mesh 中设置的网格 ID。当您向 Environ 环境注册您的集群时,也会使用此项目编号。

  4. 为集群名称创建环境变量:

    export CLUSTER_NAME=YOUR_CLUSTER_NAME
  5. 为您的集群区域或地区创建环境变量:

    export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION

准备资源配置文件

您可以使用 Anthos CLI 和 kustomize 导出和修补 Config Connector 资源文件,这些文件用于使用 Anthos Service Mesh 所需的选项更新现有集群。Config Connector 资源是以 Kubernetes 表示 Google Cloud 资源。

导出资源配置文件

您可以使用 gcloud beta anthos export 命令输出现有集群的资源配置文件。

  1. asm-patch 软件包下载到当前工作目录:

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

    该命令会创建一个名为 asm-patch/ 的子目录。

  2. 在名为 BASE_DIR 的环境变量中添加目录名称。我们建议您使用集群名称作为目录名称。

    export BASE_DIR=YOUR_BASE_DIR

    请注意以下事项:

    • 您可以为 BASE_DIR 指定相对路径(而非目录名称),例如:export BASE_DIR=../example-resources/example-cluster

    • 请勿指定绝对路径,例如 /usr/example-resources/example-cluster,因为用于修补资源配置文件的步骤会失败。

    • 您无需创建目录,因为 gcloud beta anthos export 命令会自动创建目录。如果存在目录,export 命令会创建一个名为 $BASE_DIR.bak.<number> 的目录,将 $BASE_DIR 的内容移到备份目录,然后将资源配置文件导出到 $BASE_DIR

  3. 将集群设置导出到 Config Connector 资源配置文件:

    gcloud beta anthos export ${CLUSTER_NAME} \
        --output-directory ${BASE_DIR} \
        --project ${PROJECT_ID} \
        --location ${CLUSTER_LOCATION}

    默认情况下,除非您在命令行中指定了 --project--location 选项,否则 export 命令会在配置文件中填充项目 ID 和集群区域/地区以与当前 gcloud config 设置匹配。如需详细了解命令行选项,请查看 gcloud beta anthos export --help

修补资源配置文件

您可以使用 Anthos kpt setter 和 kustomize 来更新资源配置文件。

如需设置必需值并应用补丁程序,请执行以下操作:

  1. 设置 ${BASE_DIR}asm-patch 目录之间的相对路径:

    kpt cfg set asm-patch/ base-dir ../${BASE_DIR}
    
  2. 设置项目 ID:

    kpt cfg set asm-patch/ gcloud.core.project ${PROJECT_ID}
    
  3. 设置项目编号:

    kpt cfg set asm-patch gcloud.project.environProjectNumber ${ENVIRON_PROJECT_NUMBER}
    
  4. 设置集群名称:

    kpt cfg set asm-patch/ gcloud.container.cluster ${CLUSTER_NAME}
    
  5. 设置集群位置:

    kpt cfg set asm-patch/ gcloud.compute.location ${CLUSTER_LOCATION}
    
  6. 将 Anthos Service Mesh 补丁程序应用于集群资源配置文件:

    pushd ${BASE_DIR} && kustomize create --autodetect \
    --namespace ${PROJECT_ID} && popd
    pushd asm-patch && kustomize build -o ../${BASE_DIR}/all.yaml && popd

验证最终资源配置

在更新集群并安装 Anthos Service Mesh 之前,您必须先验证资源配置文件:

kpt fn source ${BASE_DIR} | kpt fn run --image gcr.io/kustomize-functions/validate-asm:v0.1.0

以下是您可能会遇到的一些错误:

error - unsupported spec.releaseChannel.channel value in ContainerCluster
cluster_name< (all.yaml [7]), expected: REGULAR, RAPID,STABLE, actual:
UNSPECIFIED

此错误表明您尚未在发布版本中注册您的集群。我们建议您在常规发布版本中注册集群,因为其他发布版本可能基于 Anthos Service Mesh 1.6.8 不支持的 GKE 版本。如需了解详情,请参阅支持的环境。在发布版本中注册您的集群后:

  1. 删除 $BASE_DIR 目录。

  2. 重复上述步骤,导出并修补资源配置文件。

  2 error(s) occurred:
    * Error - spec.workloadIdentity.identityNamespace missing in ContainerCluster cluster_name (all.yaml [0])
    * Error - spec.labels.mesh_id missing in ContainerCluster cluster_name (all.yaml [0])

这些错误表示将补丁程序应用于资源配置失败。将 $BASE_DIR 设置为绝对路径时,可能会发生这种故障。如需修复此故障,请执行以下操作:

  1. $BASE_DIR 环境变量设置为目录名称。我们建议您使用集群名称。

  2. 重复上述步骤,导出并修补资源配置文件。

更新集群并安装 Anthos Service Mesh

Anthos CLI 会使用 Anthos Service Mesh 所需的以下选项更新集群:

  • proj-${ENVIRON_PROJECT_NUMBER} 格式向集群添加 mesh_id 标签,其中 ${ENVIRON_PROJECT_NUMBER} 是在其中创建集群的项目的编号。如需在 Cloud Console 中的 Anthos Service Mesh 信息中心显示指标,必须使用 mesh_id 标签。如果您的集群已有标签,Anthos CLI 会保留这些标签。

  • 启用 Workload Identity

  • 启用 Kubernetes Engine Monitoring

运行以下命令可更新集群并安装 Anthos Service Mesh:

gcloud beta anthos apply ${BASE_DIR}

该命令会使用所需选项更新集群,然后部署 Anthos Service Mesh。此过程大约需要 30 分钟才能完成。

检查控制层面组件

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

kubectl get pod -n istio-system

预期输出如下所示:

NAME                                   READY   STATUS      RESTARTS   AGE
istio-ingressgateway-cff9f5c7d-qg4ls   1/1     Running   0          7m5s
istio-ingressgateway-cff9f5c7d-vlkzb   1/1     Running   0          7m20s
istiod-66b587859c-886gx                1/1     Running   0          7m33s
istiod-66b587859c-dfs2j                1/1     Running   0          7m33s

注入 Sidecar 代理

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

在部署工作负载之前,请务必配置 Sidecar 代理注入,以便 Anthos Service Mesh 可以监控和保护流量。

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

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

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

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

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

查看 Anthos Service Mesh 页面

本部分仅适用于使用 asm-gcp 配置文件安装了 Anthos Service Mesh 的情况。如果您使用 asm-gcp-multiproject 配置文件安装 Anthos Service Mesh,则 Cloud Console 的 Anthos Service Mesh 信息中心内不会显示遥测数据。

在集群上部署完工作负载并注入 Sidecar 代理后,您可以在 Cloud Console 中探索 Anthos Service Mesh 页面,以了解 Anthos Service Mesh 提供的所有可观测性功能。请注意,部署工作负载后,遥测数据大约需要一两分钟才会显示在 Cloud Console 中。

在 Cloud Console 中访问 Anthos Service Mesh 的权限由 Identity and Access Management (IAM) 控制。如需访问 Anthos Service Mesh 页面,Project Owner 必须为用户授予 Project Editor 或 Viewer 角色,或者授予在 Cloud Console 中控制对 Anthos Service Mesh 的访问权限中所述的限制性更强的角色。

  1. 在 Google Cloud Console 中,转到 Anthos Service Mesh

    转到 Anthos Service Mesh

  2. 从菜单栏的下拉列表中选择 Cloud 项目。

  3. 如果您有多个服务网格,请从服务网格下拉列表中选择相应网格。

如需了解详情,请参阅在 Cloud Console 中探索 Anthos Service Mesh

除了 Anthos Service Mesh 页面,系统还会将与服务相关的指标(例如特定服务收到的请求数)发送到 Cloud Monitoring,这些指标显示在 Cloud Monitoring 的 Metrics Explorer 中。

如需查看指标,请执行以下操作:

  1. 在 Google Cloud Console 中,转到 Monitoring 页面:

    转到 Monitoring

  2. 选择资源 > Metrics Explorer

如需查看指标的完整列表,请参阅 Cloud Monitoring 文档中的 Istio 指标

后续步骤