GKE 的 Anthos Service Mesh 快速入门

在本教程中,您将使用 Google 提供的脚本 install_asm 在新的 Google Kubernetes Engine (GKE) 集群上安装 Anthos Service Mesh 1.10.6-asm.2。本教程将引导您完成以下操作:

  1. 配置 Google Cloud 项目
  2. 创建具有 Anthos Service Mesh 所需的最低 vCPU 数量的 GKE 集群
  3. 使用集群内控制层面安装 Anthos Service Mesh
  4. 部署示例应用,以便您可以在 Google Cloud 控制台的 Anthos Service Mesh 信息中心查看遥测数据。

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

完成此快速入门后,您可以通过删除集群来避免继续计费。如需了解详情,请参阅清理

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 启用 Kubernetes Engine API。

    启用 API

  5. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  6. 确保您的 Google Cloud 项目已启用结算功能

  7. 启用 Kubernetes Engine API。

    启用 API

  8. 记下您的项目 ID

虽然 Anthos Service Mesh 需要其他 API,但 install_asm 脚本会为您启用这些 API。为了降低结算费用,install_asm 脚本未启用 GKE Enterprise API。启用 GKE Enterprise API 后,Google Cloud 控制台存在一些细微差别。如需详细了解这些差异,请参阅 GKE Enterprise 和 Anthos Service Mesh 界面差异

安装所需的工具

您可以在 Cloud Shell 或运行 Linux 的本地计算机上运行该脚本。Cloud Shell 会预安装所有必需的工具。请注意,由于 macOS 附带了旧版 bash,因此不支持 macOS。

Cloud Shell

Cloud Shell 预配一个运行基于 Debian 的 Linux 操作系统的 g1-small Compute Engine 虚拟机 (VM)。使用 Cloud Shell 的优势如下:

  • Cloud Shell 包含您需要的 gcloudkubectlkpt 和其他命令行工具。

  • 您的 Cloud Shell $HOME 目录具有 5GB 永久性存储空间。

  • 您可以选择文本编辑器

    • 代码编辑器,可通过点击 Cloud Shell 窗口顶部的 来访问。

    • Emac、Vim 或 Nano,可从 Cloud Shell 中的命令行访问。

如需使用 Cloud Shell,请执行以下操作:

  1. 前往 Google Cloud 控制台
  2. 选择您的 Google Cloud 项目。
  3. 点击 Google Cloud 控制台窗口顶部的激活 Cloud Shell 按钮。

    Google Cloud Platform 控制台

    一个 Cloud Shell 会话随即会在 Google Cloud 控制台底部的新框内打开,并显示命令行提示符。

    Cloud Shell 会话

本地 Linux 计算机

  1. 请确保已安装以下工具:

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

    gcloud auth login
    
  3. 更新组件:

    gcloud components update
    
  4. 请确保 git 位于您的路径中,以便 kpt 能够找到它。

创建 GKE 集群

  1. 运行以下命令,创建具有 Anthos Service Mesh 所需的最少 vCPU 数的集群。在此命令中,将占位符替换为以下信息:

    • CLUSTER_NAME:您的集群的名称。名称只能包含小写字母、数字和 -,并且必必须以字母开头,以字母数字结尾,并且不能超过 40 个字符。
    • PROJECT_ID:将在其中创建集群的项目 ID。
    • CLUSTER_LOCATION 是集群的地区,例如 us-central1-a
    gcloud container clusters create CLUSTER_NAME  \
        --project=PROJECT_ID \
        --zone=CLUSTER_LOCATION  \
        --machine-type=e2-standard-4 \
        --num-nodes=2 \
        --workload-pool=PROJECT_ID.svc.id.goog
    
  2. 获取身份验证凭据以便与集群进行交互。此命令还会将 kubectl 的当前上下文设置为该集群。

    gcloud container clusters get-credentials CLUSTER_NAME  \
        --project=PROJECT_ID \
        --zone=CLUSTER_LOCATION
    

下载 ASM 安装脚本

  1. 将安装 Anthos Service Mesh 1.10.6 的脚本下载到当前工作目录中:

    curl https://storage.googleapis.com/csm-artifacts/asm/install_asm_1.10 > install_asm
    
  2. 让该脚本可执行:

    chmod +x install_asm
    

安装 Anthos Service Mesh

使用以下选项运行 install_asm 脚本,以在之前创建的集群上安装 Anthos Service Mesh。如果您在创建集群以来未关闭过此页面,则占位符具有您为 gcloud container clusters create 命令输入的值。

./install_asm \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME  \
  --cluster_location CLUSTER_LOCATION  \
  --mode install \
  --output_dir ./asm-downloads \
  --enable_all

install_asm 脚本完成运行可能需要几分钟时间。该脚本会输出信息性消息,便于您跟踪其进度。

该命令会使用以下选项运行 install_asm

  • --mode install:运行新安装的脚本,并启用 Anthos Service Mesh 证书授权机构 (Mesh CA),这是安装的默认证书授权机构 (CA)。
  • --output_dir ./asm-downloads:脚本从 anthos-service-mesh 代码库下载文件的目录,并且脚本也从该目录下载和解压缩 Anthos Service Mesh 安装文件(其中包含 istioctl、示例和清单)。
  • --enable-registration:允许脚本注册集群到集群所属的项目。
  • --enable_all:允许脚本启用所需的 Google API、设置 Identity and Access Management 权限,以及对集群进行所需更新,其中包括启用 GKE Workload Identity

部署 Online Boutique 示例

  1. 使用 kpt 下载示例:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/microservices-demo.git/release \
    online-boutique
    
  2. 为应用创建命名空间:

    kubectl create namespace demo
    
  3. 启用自动 Sidecar 注入(自动注入)。使用以下命令查找 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

  4. 将修订版本标签应用于命名空间。在以下命令中,REVISION 是您在上一步中记下的 istiod 修订版本标签的值。

    kubectl label namespace demo 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 标签。

  5. 将示例部署到集群:

    kubectl apply -n demo -f online-boutique
    
  6. 获取入站流量网关的外部 IP 地址:

    kubectl get service istio-ingressgateway -n istio-system
    

    输出类似于以下内容:

    NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                      AGE
    istio-ingressgateway   LoadBalancer   10.19.247.233   35.239.7.64   80:31380/TCP,443:31390/TCP,31400:31400/TCP   27m

    在此示例中,入站流量网关的 IP 地址为 35.239.7.64

  7. 使用浏览器访问应用,以确认安装:

    http://EXTERNAL_IP/
    

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

清理

在清理之前,如果您有兴趣详细了解双向 TLS,请参阅 Anthos Service Mesh(例如:mTLS)

  • 如果您想防止产生额外费用,请删除集群:

    gcloud container clusters delete  CLUSTER_NAME  \
        --project=PROJECT_ID \
        --zone=CLUSTER_LOCATION
    
  • 如果您希望保留集群并移除 Online Boutique 示例,请执行以下操作:

    kubectl delete namespaces demo
    

后续步骤

详细了解以下内容: