使用 GKE Enterprise CLI 在新集群上安装 Anthos Service Mesh

本指南介绍了如何使用 GKE Enterprise 命令行界面 (CLI) 在新的 Google Cloud GKE 集群上安装 Anthos Service Mesh 1.5.10-asm.2。

安装会启用以下功能:

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

目前,GKE Enterprise CLI 不支持在 GKE on VMware 上安装。如需在 GKE On GKE 上安装 Anthos Service Mesh,请参阅在本地安装 Anthos Service Mesh

准备工作

本指南假定您已具备以下各项:

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

使用要求

  • 您必须拥有 GKE Enterprise 试用许可或订阅。如需了解详情,请参阅 GKE Enterprise 价格指南

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

    • 至少具有四个节点。
    • 最小机器类型是配备了四个 vCPU 的 e2-standard-4
    • 使用 GKE 的 发布版本而不是静态版本
  • 如需将服务端口纳入服务网格,必须为服务端口命名,并且名称必须包含以下语法的端口协议:name: protocol[-suffix],其中方括号表示必须以短划线开头的可选后缀。 如需了解详情,请参阅命名服务端口

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

  • 如果您在组织中创建了服务边界,则可能需要将 Mesh CA 服务添加到边界。如需了解详情,请参阅将 Mesh CA 添加到服务边界

限制

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

证书数据

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

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

设置项目和集群默认值

  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. 为集群选择区域或地区

    • 如果您要创建单区域集群,请运行以下命令来获取可用 GCP 区域的列表:

      gcloud compute zones list
      
    • 如果您要创建地区级集群,请运行以下命令来获取可用地区的列表:

      gcloud compute regions list
      
  5. 创建以下几个环境变量:

    • 设置集群名称:

      export CLUSTER_NAME=YOUR_CLUSTER_NAME

      集群名称只能包含小写字母、数字和“-”,必须以字母开头,以字母数字结尾,并且不能超过 40 个字符。

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

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

    • 对于单区域集群,请设置默认区域:

      gcloud config set compute/zone ${CLUSTER_LOCATION}
    • 对于地区集群,设置默认地区:

      gcloud config set compute/region ${CLUSTER_LOCATION}

准备资源配置文件

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

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

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

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.5-asm .
    
  4. 设置集群名称:

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

  5. (可选)使用 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}
  6. (可选)您可以将资源配置文件签入到您自己的源代码控制系统(例如 Cloud Source Repositories),以便您可以跟踪这些文件的更改。

设置可选值

使用 GKE Enterprise CLI,您还可以设置其他值。要查看可用 setter 的列表,请执行以下操作:

kpt cfg list-setters asm/

输出类似于以下内容:

          NAME                            VALUE                SET BY   DESCRIPTION   COUNT
anthos.servicemesh.hub                    your_anthos_hub                               1
anthos.servicemesh.tag                    your_anthos_tag                               1
gcloud.compute.location                   your_zone_or_region                           8
gcloud.compute.network                    default                                       1
gcloud.compute.subnetwork                 default                                       1
gcloud.container.cluster                  your_cluster_name                             9
gcloud.container.cluster.releaseChannel   REGULAR                                       1
gcloud.container.nodepool.max-nodes       4                                             1
gcloud.core.project                       your_project_ID      kpt                     21
gcloud.project.projectNumber              your_project_number  kpt                      4 

例如,要从默认值 REGULAR 更改发布版本,请在以下命令中将 YOUR_CHANNEL 替换为 STABLERAPID

kpt cfg set asm gcloud.container.cluster.releaseChannel YOUR_CHANNEL

如需了解每个发布版本,请参阅您可以获得哪些发布版本

更改机器类型或节点数

GKE Enterprise CLI 会创建具有所需节点数和 Anthos Service Mesh 所需的机器类型的新集群。这些值是在 nodepool.yaml 中指定的。您可以修改 nodepool.yaml 的本地副本,以指定另一个机器类型,前提是至少具有 4 个 vCPU。

您可以根据系统要求通过以下 setter 增加节点数:

kpt cfg set asm gcloud.container.nodepool.max-nodes NUMBER_OF_NODES

在新集群上安装 Anthos Service Mesh

GKE Enterprise CLI 会在集群上启用 Anthos Service Mesh 所需的以下选项:

  • proj-PROJECT_NUMBER 格式向集群添加 mesh_id 标签,其中 PROJECT_NUMBER 是将在其中创建集群的项目的编号。mesh_id 标签对于在 Google Cloud 控制台中的 Anthos Service Mesh 信息中心上显示指标是必需的。如果您的集群已有标签,GKE Enterprise CLI 会保留这些标签。

  • 启用 Workload Identity

  • 启用 Kubernetes Engine Monitoring

  • 发布版本概览中注册集群。

运行以下命令以创建一个新集群,并使用您之前自定义的 Anthos Service Mesh 配置文件安装 Anthos Service Mesh:

gcloud beta anthos apply asm

检查控制层面组件

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

kubectl get pod -n istio-system

预期输出如下所示:

NAME                                      READY   STATUS      RESTARTS   AGE
istio-ingressgateway-74cc894bfd-786rg     1/1     Running     0          7m19s
istiod-78cdbbbdb-d7tps                    1/1     Running     0          7m36s
promsd-576b8db4d6-lqf64                   2/2     Running     1          7m19s

注册您的集群

您必须向项目的队列注册集群,才能获取对 Google Cloud 控制台中的统一界面的访问权限。队列提供一种统一方法来查看和管理集群及其工作负载,包括 Google Cloud 之外的集群。

创建 Google Cloud 服务账号和密钥文件

必须提供包含服务账号凭据的 JSON 文件才能注册集群。为遵循最小权限原则,我们建议您为注册的每个集群创建不同的服务账号。

如需创建服务账号和密钥文件,请执行以下操作:

  1. 为服务账号选择一个名称并为其创建环境变量:

    export SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
    
  2. 创建服务账号:

    gcloud iam service-accounts create ${SERVICE_ACCOUNT_NAME}
  3. 列出项目的所有服务账号以确认服务账号已创建:

    gcloud iam service-accounts list
  4. 将 gkehub.connect IAM 角色绑定到服务账号:

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
       --member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/gkehub.connect"
  5. 为您要保存 JSON 文件的本地文件路径创建环境变量。我们建议您使用服务账号名称和项目 ID 命名文件,例如:/tmp/creds/${SERVICE_ACCOUNT_NAME}-${PROJECT_ID}.json

    export SERVICE_ACCOUNT_KEY_PATH=LOCAL_KEY_PATH
  6. 下载服务账号的私钥 JSON 文件:

    gcloud iam service-accounts keys create ${SERVICE_ACCOUNT_KEY_PATH} \
       --iam-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com

注册集群

在以下命令中,将 MEMBERSHIP_NAME 替换为一个唯一表示要在 Hub 中注册的集群的名称。

gcloud container hub memberships register MEMBERSHIP_NAME \
    --gke-cluster=${CLUSTER_LOCATION}/${CLUSTER_NAME} \
    --service-account-key-file=${SERVICE_ACCOUNT_KEY_PATH}

该命令会返回如下输出:

kubeconfig entry generated for CLUSTER_NAME.
Waiting for membership to be created...done.
Created a new membership [projects/PROJECT_ID/locations/global/memberships/MEMBERSHIP_NAME] for the cluster [MEMBERSHIP_NAME]
Generating the Connect Agent manifest...
Deploying the Connect Agent on cluster [MEMBERSHIP_NAME] in namespace [gke-connect]...
Deployed the Connect Agent on cluster [MEMBERSHIP_NAME] in namespace [gke-connect].
Finished registering the cluster [MEMBERSHIP_NAME] with the Hub.

此服务账号密钥作为 Secret(名为 creds-gcp)存储在 gke-connect 命名空间中。

如需详细了解集群注册,请参阅 Connect 文档中的注册集群

注入 Sidecar 代理

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

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

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

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

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

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

查看 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 指标

使用 kpt 安装示例

(可选)您可以使用 kpt 将 Hipster 示例安装到集群中。

  1. 下载示例:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/microservices-demo.git/release \
    hipster-demo
    
  2. 启用自动 Sidecar 注入:

    kubectl label namespace default istio-injection=enabled
    
  3. 将示例部署到集群:

    kubectl apply -f hipster-demo
    
  4. 找到应用的外部 IP 地址:

    kubectl get service frontend-external
    
  5. 使用浏览器访问应用,以确认安装:

    http://EXTERNAL_IP/

    现在您已在运行一个示例,接下来您可以在 Google Cloud 控制台中探索 Anthos Service Mesh 可观测性功能。请注意,拓扑图最长可能需要 10 分钟才会显示网格中的服务。

探索完毕后,移除 Hipster 示例:

kubectl delete -f hipster-demo

后续步骤