安装 Anthos Service Mesh

本页说明如何运行脚本以在 GKE 集群上为包含同一 Google Cloud 项目中的一个或多个集群的网格安装 Anthos Service Mesh 版本 1.10.6。

如需了解集群位于不同项目中的安装,请参阅 GKE 多项目指南。

本指南适用于安装 Anthos Service Mesh 或使用不同的配置重新安装同一版本。但是,使用不同的配置重新安装、升级和从 Istio 迁移需要额外的规划。如需了解详情,请参阅以下主题:

准备工作

在开始安装之前,确保您:

脚本要求您具有所需的权限,或者添加 --enable_all--enable_gcp_iam_roles 标志以允许脚本为您启用权限。同样,如需使脚本启用所需的 API更新集群,请指定 --enable_all 标志或更加细化的启用标志

安装 Anthos Service Mesh

  1. 设置选项并指定运行脚本的标志。您应始终包含以下选项:--project_id--cluster_name--cluster_location--mode install。若想使用 Istio CA(以前称为 Citadel)作为证书授权机构,则需要指定 --ca 选项和一些其他选项,如使用 Istio CA。如需查看脚本参数的完整说明,请参阅选项和标志

  2. 要完成 Anthos Service Mesh 的设置,您需要启用自动 Sidecar 注入并部署或重新部署工作负载

以下部分提供了运行脚本的典型示例。请在右侧的导航栏中查看示例列表。

示例

本部分提供运行安装脚本的示例以及一些可能对您有用的其他参数。请在右侧的导航栏中查看示例列表。

仅验证

以下示例展示使用 --only_validate 选项运行脚本。使用此选项时,脚本不会对您的项目或集群进行任何更改,也不会安装 Anthos Service Mesh。如果您指定 --only_validate,则在包括任何 --enable_* 标志的情况下此脚本将失败。

该脚本会验证以下内容:

  • 您的环境拥有所需的工具。
  • 您对指定项目拥有所需权限。
  • 集群符合最低要求。
  • 项目已启用所有必需的 Google API。

默认情况下,该脚本会下载并解压缩安装文件,并将 GitHub 中的 asm 配置软件包下载到临时目录中。在退出之前,该脚本会输出一条消息,提供临时目录的名称。您可以使用 --output_dir DIR_PATH 选项为下载指定目录。--output_dir 选项可方便您使用 istioctl 命令行工具(如果需要)。此外,用于启用可选功能的配置文件包含在 asm/istio/options 目录中。

运行以下命令以验证配置并将安装文件和 asm 软件包下载到 OUTPUT_DIR 目录:

./install_asm \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME \
  --cluster_location CLUSTER_LOCATION \
  --mode install \
  --output_dir DIR_PATH \
  --only_validate

成功后,脚本将输出以下内容:

./install_asm \
install_asm: Setting up necessary files...
install_asm: Creating temp directory...
install_asm: Generating a new kubeconfig...
install_asm: Checking installation tool dependencies...
install_asm: Downloading ASM..
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 57.0M  100 57.0M    0     0  30.6M      0  0:00:01  0:00:01 --:--:-- 30.6M
install_asm: Downloading ASM kpt package...
fetching package /asm from https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages to asm
install_asm: Checking for project PROJECT_ID...
install_asm: Confirming cluster information...
install_asm: Confirming node pool requirements...
install_asm: Fetching/writing GCP credentials to kubeconfig file...
Fetching cluster endpoint and auth data.
kubeconfig entry generated for cluster-1.
install_asm: Checking Istio installations...
install_asm: Checking required APIs...
install_asm: Successfully validated all requirements to install ASM from this computer.

如果某一个测试未通过验证,脚本将输出错误消息。例如,如果您的项目未启用所有必需的 Google API,您会看到以下错误:

ERROR: One or more APIs are not enabled. Please enable them and retry, or run
the script with the '--enable_gcp_apis' flag to allow the script to enable them
on your behalf.

如果您收到错误消息,指出需要运行带有启用标志的脚本,则可以采用以下方法:

  • 在运行该脚本来执行实际安装(即不带 --only_validate)时,添加错误消息中的特定标志或 --enable_all 标志。

  • 如果您愿意,可以在运行该脚本之前,按照用于在 GKE 上安装 Anthos Service Mesh 的设置所述,自行更新项目和集群。

请注意,install_asm 不允许任何带有 --only_validate 的启用标志。

使用默认功能进行安装

以下命令会运行新安装脚本并使用默认功能。

./install_asm \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME \
  --cluster_location CLUSTER_LOCATION \
  --mode install \
  --ca mesh_ca \
  --output_dir DIR_PATH \
  --enable_registration \
  --enable_all
  • --ca mesh_ca:虽然 Mesh CA 是新安装的默认 CA,但为了清楚起见,命令行中包含 --ca mesh_ca。如果您未指定 --cainstall_asm 会启用 Mesh CA。

  • --output_dir DIR_PATH:添加此选项以指定脚本下载 asm 软件包和 Anthos Service Mesh 安装文件(包含 istioctl、示例和清单)的目录。否则,脚本会将 asm 软件包和安装文件下载到临时目录。

  • --enable_registration 此标志允许脚本将集群注册到集群所在的项目。如果您未包含此标志,请按照注册集群中的步骤手动注册集群。

  • --enable_all 允许脚本启用所需的 Google API、设置 Identity and Access Management 权限,以及对集群进行所需更新,其中包括启用 GKE Workload Identity。如果您不希望由 install_asm 来处理这些项目和集群要求,请参阅用于在 GKE 上安装 Anthos Service Mesh 的设置

使用 Istio CA 进行安装

本节介绍如何执行以下操作:

  • 生成 Anthos Service Mesh 用于签署工作负载的证书和密钥。
  • 运行安装脚本并启用 Istio CA 作为证书授权机构。

我们建议仅在需要自定义 CA 时使用 Istio CA。

为了获得最佳安全性,我们强烈建议您维护离线根 CA,并使用从属 CA 为每个集群颁发 CA。如需了解详情,请参阅插入 CA 证书。在此配置中,服务网格中的所有工作负载都使用同一个根 CA。每个 Anthos Service Mesh CA 使用中间 CA 签名密钥和证书(由根 CA 签名)。当网格中存在多个 CA 时,这会建立 CA 间的信任层次结构。您可以重复这些步骤,为任意数量的证书授权机构预配证书和密钥。

  1. 为证书和密钥创建一个目录:

    mkdir -p certs && \
    pushd certs
  2. 生成根证书和密钥:

    make -f ../tools/certs/Makefile.selfsigned.mk root-ca
    

    这会生成以下文件:

    • root-cert.pem:根证书
    • root-key.pem:根密钥
    • root-ca.conf:openssl 用于生成根证书的配置
    • root-cert.csr:根证书的 CSR
  3. 生成中间证书和密钥:

    make -f ../tools/certs/Makefile.selfsigned.mk cluster1-cacerts

    此操作会在名为 cluster1 的目录中生成以下文件:

    • ca-cert.pem:中间证书
    • ca-key.pem:中间密钥
    • cert-chain.pem:istiod 使用的证书链
    • root-cert.pem:根证书

    如果您使用离线计算机执行这些步骤,请将生成的目录复制到运行脚本的计算机。

  4. 运行脚本并添加之前为证书和密钥生成的文件。

    ./install_asm \
      --project_id PROJECT_ID \
      --cluster_name CLUSTER_NAME \
      --cluster_location CLUSTER_LOCATION \
      --mode install \
      --ca citadel \
      --ca_cert FILE_PATH \
      --ca_key FILE_PATH \
      --root_cert FILE_PATH \
      --cert_chain FILE_PATH \
      --output_dir DIR_PATH \
      --enable_registration \
      --enable_all

使用叠加文件进行安装

叠加文件是一个 YAML 文件,其中包含您传递给 install_asm 以配置控制平面的 IstioOperator 自定义资源 (CR)。您可以替换默认控制平面配置,并通过将 YAML 文件传递给 install_asm启用可选功能。您可以叠加多个文件,每个叠加文件会覆盖之前各层的配置。

如果您在 YAML 文件中指定多个 CR,则 install_asm 会将文件拆分为多个临时 YAML 文件,每个 CR 对应一个临时 YAML 文件。该脚本将 CR 拆分为单独的文件,因为 istioctl install 仅应用包含多个 CR 的 YAML 文件中的第一个 CR。

以下示例会执行安装,并添加叠加层文件以自定义控制层面配置。在以下命令中,将 OVERLAY_FILE 更改为 YAML 文件的名称。

./install_asm \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME \
  --cluster_location CLUSTER_LOCATION \
  --mode install \
  --ca mesh_ca \
  --output_dir DIR_PATH \
  --enable_registration \
  --enable_all \
  --custom_overlay OVERLAY_FILE

使用选项进行安装

以下示例会执行安装,并添加 asm 软件包中的 egressgateways.yaml 文件,该文件可启用出站网关。请注意,您没有添加 .yaml 扩展程序。该脚本会为您提取文件,因此您不必先下载 asm 软件包。

./install_asm \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME \
  --cluster_location CLUSTER_LOCATION \
  --mode install \
  --ca mesh_ca \
  --output_dir DIR_PATH \
  --enable_registration \
  --enable_all \
  --option egressgateways

您可以使用 --option启用可选功能。如果您需要对 asm 软件包的 asm/istio/options 目录中的任何文件进行修改,请使用 --custom_overlay 下载 asm 软件包、进行更改并添加文件。

要将 asm 软件包下载到当前工作目录以便修改文件,请执行以下操作:

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

如果您在指定 --output_dir 选项的位置运行仅验证示例,则配置文件位于 asm/istio/options 下的指定输出目录中。

启用使用队列工作负载身份池的 Mesh CA

使用队列工作负载身份池的 Mesh CA 的预览版仅限于 Anthos Service Mesh on GKE 的新安装。预览期间不支持升级和迁移。

以下示例展示了如何让 Mesh CA 能够使用队列工作负载身份池。使用队列工作负载身份池的 Mesh CA 可让您将不同 Google Cloud 项目中的集群加入单个信任网域。

要启用使用队列工作负载身份池的 Mesh CA,请使用以下命令:

如果您尚未注册集群,请务必添加 --enable_registration 标志或 --enable_all 标志以允许脚本将集群注册到集群所属的项目。

./install_asm \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME \
  --cluster_location CLUSTER_LOCATION \
  --mode install \
  --enable_all \
  --option hub-meshca

此命令会运行新安装的脚本,使用 Anthos Service Mesh 需要的选项配置您的项目和集群,将集群注册到该集群所在的项目,并将 Mesh CA 配置为使用队列工作负载身份池。

部署和重新部署工作负载

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

您需要启用自动边车代理注入(自动注入),并为在安装 Anthos Service Mesh 之前集群上运行的所有工作负载重启 Pod,才能完成安装。

要启用自动注入功能,请使用安装 Anthos Service Mesh 时在 istiod 上设置的修订版本标签来为您的命名空间添加标签。Sidecar 注入器网络钩子会使用修订版本标签将注入的 Sidecar 与特定 istiod 修订版本相关联。添加标签后,必须重启命名空间中的所有现有 Pod,才能注入 Sidecar。

在将新工作负载部署到新命名空间中之前,请先确保配置自动注入,以便 Anthos Service Mesh 能够监控和保护流量。

如需启用自动注入,请运行以下命令:

  1. 使用以下命令查找 istiod 的修订版本标签:

    kubectl -n istio-system get pods -l app=istiod --show-labels
    

    输出类似于以下内容:

    NAME                                READY   STATUS    RESTARTS   AGE   LABELS
    istiod-asm-1106-2-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-1106-2,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-1106-2-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-1106-2,istio=istiod,pod-template-hash=5788d57586

    在输出中的 LABELS 列下,记下 istiod 修订版本标签的值,该值位于前缀 istio.io/rev= 之后。在此示例中,该值为 asm-1106-2

  2. 应用修订版本标签并移除 istio-injection 标签(如果存在)。在以下命令中,NAMESPACE 是您要启用自动注入的命名空间的名称,REVISION 是您在上一步中记下的修订版本标签。

    kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
    

    您可以忽略输出中的 "istio-injection not found" 消息。这意味着命名空间之前没有 istio-injection 标签,对于 Anthos Service Mesh 的新安装或新部署,这是预期现象。如果命名空间同时具有 istio-injection 和修订版本标签,自动注入将失败,因此 Anthos Service Mesh 文档中的所有 kubectl label 命令都包含移除 istio-injection 标签。

  3. 如果在安装 Anthos Service Mesh 之前集群上已运行工作负载,请重启 pod 以触发重新注入。

    如何重启 pod 取决于您的应用和集群所在的环境。例如,在预演环境中,您可能只需删除所有 pod 即可使其重启。但是,在生产环境中,您可能需要通过实现蓝绿部署流程来安全地重启 pod,以避免流量中断。

    您可以使用 kubectl 执行滚动重启:

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

    kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
    

查看 Anthos Service Mesh 信息中心

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

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

  1. 在 Google Cloud 控制台中,前往 Anthos Service Mesh

    转到 Anthos Service Mesh

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

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

如需了解详情,请参阅在 Google Cloud 控制台中探索 Anthos Service Mesh

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

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

  1. 在 Google Cloud 控制台中,转到监控页面:

    转到“监控”

  2. 选择资源 > Metrics Explorer

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

后续步骤