使用 Istio 网格扩展功能部署迁移

Last reviewed 2023-11-02 UTC

本文档介绍了如何初始化和配置服务网格,从而将功能从本地数据中心逐一迁移到 Google Cloud。本文假定您熟悉关联的参考架构。 适用于想要使用服务网格将流量动态路由到来源环境或 Google Cloud 的管理员、开发者和工程师。

本部署指南旨在帮助您从非 Google Cloud 环境(例如本地或其他云提供商)迁移到 Google Cloud。此类迁移具有一定程度的网络复杂度,因为您需要在非 Google Cloud 环境与 Google Cloud 环境之间建立一条安全通信通道

架构

下图展示了如何使用服务网格将流量路由到来源环境中运行的微服务或路由到 Google Cloud:

使用服务网格将流量路由到旧环境中运行的微服务或路由到 Google Cloud 的架构。

在该图中,Istio 网关提供了一个服务网格,用于关联应用的微服务。Google Kubernetes Engine (GKE) 充当容器,用于定义每个微服务的边界。如需了解详情,请参阅通过 Istio 网格扩展功能为迁移提供支持

在本部署中,您将使用以下软件:

示例工作负载

在本部署中,您将使用 Bookinfo 应用,这是一个显示图书相关信息的四层 Polyglot 微服务应用。此应用设计为在 Kubernetes 上运行,但您需要使用 Docker 和 Docker Compose 将其部署到 Compute Engine 实例上。借助 Docker Compose,您可以使用 YAML 描述符来描述多容器应用。然后,可通过执行单个命令来启动该应用。

尽管此示例工作负载已经容器化,但此方法也适用于非容器化服务。在此类情况下,您可以添加“现代化改造阶段”,即将要迁移的容器化服务。

Bookinfo 应用包含四个微服务组件:

  • productpage:调用 detailsratingsreviews 微服务以填充图书信息页面
  • details:提供图书的相关信息
  • reviews:包含书评
  • ratings:返回图书排名信息随附书评一起显示

为了演示 Istio 及其特性,Bookinfo 应用的开发者和维护者已为其中一些组件实现了多个版本。在本部署中,您只需为每个组件部署一个版本即可。

目标

  • 初始化模拟本地数据中心的环境。
  • 在本地数据中心部署和测试示例工作负载。
  • 在 Google Cloud 上配置目标环境。
  • 将工作负载从本地数据中心迁移到目标环境。
  • 测试在目标环境中运行的工作负载。
  • 停用本地数据中心。

费用

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

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

准备环境

本部署的大部分步骤将在 Cloud Shell 中执行。

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 在 Cloud Shell 中,查看您拥有的可用空间:

    df -h
    

    为完成此部署,您需要大约 200 MB 的可用空间。

  3. 将工作目录更改为 ${HOME} 目录:

    cd "${HOME}"
    
  4. 克隆包含脚本和清单文件的 Git 代码库,这些脚本和文件用于部署和配置示例工作负载:

    git clone https://github.com/GoogleCloudPlatform/solutions-istio-mesh-expansion-migration
    
  5. 使用应用默认凭据 (ADC) 进行身份验证:

    gcloud auth application-default login
    

    输出会显示 Application Default Credentials 文件的路径:

    Credentials saved to file:
    [/tmp/tmp.T5Qae7XwAO/application_default_credentials.json]
    

    记下 Application Default Credentials 文件的路径。 任何请求 ADC 的库都将使用这些凭据。

  6. 初始化环境变量:

    APPLICATION_DEFAULT_CREDENTIALS_PATH=APPLICATION_DEFAULT_CREDENTIALS_PATH
    BILLING_ACCOUNT_ID=BILLING_ACCOUNT_ID
    DEFAULT_FOLDER=DEFAULT_FOLDER
    DEFAULT_PROJECT=DEFAULT_PROJECT
    DEFAULT_REGION=DEFAULT_REGION
    DEFAULT_ZONE=DEFAULT_ZONE
    GKE_CLUSTER_NAME=istio-migration
    DEPLOYMENT_DIRECTORY_PATH="$(pwd)"/solutions-istio-mesh-expansion-migration
    ORGANIZATION_ID=ORGANIZATION_ID
    

    替换以下内容:

    • APPLICATION_DEFAULT_CREDENTIALS_PATH:上一步中的 ADC 文件的路径。
    • BILLING_ACCOUNT_ID:要使用的结算账号的 ID。
    • DEFAULT_FOLDER:要在其中创建 Google Cloud 项目的 Google Cloud 文件夹的 ID。如果您希望 Terraform 直接在 Google Cloud 组织下创建 Google Cloud 项目,请将此字符串留空。
    • DEFAULT_PROJECT:Google Cloud 项目的 ID,该项目预配用于完成本部署的资源。Terraform 会在预配环境时为您创建此项目。
    • DEFAULT_REGION:在其中预配资源的默认地区
    • DEFAULT_ZONE:在其中预配资源的默认区域
    • ORGANIZATION_ID:您的 Google Cloud 组织的 ID。

预配环境

在本部分中,您将为本部署预配以下环境:

  • 模拟来源本地数据中心的环境。
  • 模拟迁移目标的环境。

在本部署中,两个环境都在 Google Cloud 中运行。这种方法有助于简化设置过程,因为只有一个引导阶段。您可以使用 Terraform 自动预配来源和目标环境。

  1. 在 Cloud Shell 中,将工作目录更改为代码库目录:

    cd "${DEPLOYMENT_DIRECTORY_PATH}"
    
  2. 初始化 Terraform 后端配置:

    scripts/init.sh \
    --application-credentials "${APPLICATION_DEFAULT_CREDENTIALS_PATH}" \
    --billing-account-id "${BILLING_ACCOUNT_ID}" \
    --default-folder "${DEFAULT_FOLDER}" \
    --default-project "${DEFAULT_PROJECT}" \
    --default-region "${DEFAULT_REGION}" \
    --default-zone "${DEFAULT_ZONE}" \
    --organization-id "${ORGANIZATION_ID}"
    

    init.sh 脚本将执行以下操作:

    • 生成描述符以配置 Terraform 后端
    • 初始化 Terraform 工作目录。
  3. 将工作目录更改为 terraform 目录:

    cd "${DEPLOYMENT_DIRECTORY_PATH}"/terraform
    
  4. 使用 Terraform 应用更改:

    terraform apply
    
  5. 出现提示时,查看建议的更改并通过输入 yes 进行确认。

    输出类似于以下内容:

    Apply complete! Resources: 27 added, 0 changed, 0 destroyed
    

通过使用 Terraform 应用建议的更改,您可以自动执行以下任务:

  • 创建防火墙规则以允许从外部访问微服务以及数据库和节点间通信。
  • 创建并启用服务账号以供 Compute Engine 实例使用。我们建议您将服务账号限制为仅具有运行应用所需的角色和访问权限。在本部署中,Compute Engine 实例的服务账号只需要 Compute Viewer 角色 (roles/compute.viewer)。此角色提供对 Compute Engine 资源的只读访问权限。
  • 预配和配置 Compute Engine 实例以托管要作为来源环境进行迁移的工作负载。配置 Compute Engine 实例时,您需要提供一个用于安装 Docker、Docker Compose 和 Dnsmasq 的启动脚本。
  • 为 GKE 集群创建和启用服务账号,以将工作负载作为目标环境进行托管。在本部署中,您将创建一个供 GKE 集群节点使用的服务账号。我们建议您将服务账号限制为仅具有运行应用所需的角色和访问权限。在本部署中,GKE 集群节点的服务账号所需的角色如下所示:
  • 预配和配置 GKE 集群以托管作为目标环境的工作负载。为了预配 GKE 集群,Terraform 将使用 kubernetes-engine Terraform 模块

在来源环境中部署工作负载

在本部署中,您需要将 Istio Bookinfo 应用部署为工作负载以进行迁移。下图展示了来源环境的架构:

来源环境的目标架构。

在该图中,客户端访问在 Compute Engine 上运行的示例工作负载。为降低本示例的复杂性,客户端直接连接到单个 Compute Engine 实例。在生产环境中,这种直接连接不太可行,因为您需要一个负载均衡层来运行工作负载的多个实例。

  1. 在 Cloud Shell 中,将工作目录更改为代码库目录:

    cd "${DEPLOYMENT_DIRECTORY_PATH}"
    
  2. 在 Compute Engine 实例中部署工作负载:

    scripts/workloads.sh \
    --deploy-with "COMPOSE" \
    --default-project "${DEFAULT_PROJECT}" \
    --default-region "${DEFAULT_REGION}" \
    --default-zone "${DEFAULT_ZONE}"
    

    workloads.sh 脚本将执行以下操作:

    • 配置默认项目、地区和区域。
    • 将 Docker Compose 描述符复制到 Compute Engine 实例。
    • 使用 Docker Compose 部署示例工作负载。

    如果您之前未创建用于向 Compute Engine 实例进行身份验证的 SSH 密钥文件,则 gcloud CLI 会提示您生成一个。

    在输出中,您会看到对部署的确认以及如何访问部署。输出类似于以下内容:

    You can access the workload by loading http://COMPUTE_ENGINE_PRODUCTPAGE_EXTERNAL_IP:9080/productpage
    

    在输出中,COMPUTE_ENGINE_PRODUCTPAGE_EXTERNAL_IP 是处理工作负载的 IP 地址。记下 IP 地址,因为您将在后面的步骤中使用。

在来源环境中测试您的部署

  • 打开浏览器并转到以下网址,其中 COMPUTE_ENGINE_PRODUCTPAGE_EXTERNAL_IP 是您在上一步中记下的 IP 地址:

    http://COMPUTE_ENGINE_PRODUCTPAGE_EXTERNAL_IP:9080/productpage
    

随即会显示一个图书信息页面,其中有图书和相关评分的详细信息。

配置 Istio

在本部分中,您将通过安装 Istio 在 Google Cloud 中配置目标环境,然后使用 Istio 公开示例工作负载。下图展示了目标环境的架构:

安装了 Istio 的目标环境。

在该图中,Istio 公开了 Compute Engine 中运行的工作负载。

安装 Istio

  1. 在 Cloud Shell 中,将工作目录更改为代码库目录:

    cd "${DEPLOYMENT_DIRECTORY_PATH}"
    
  2. 安装 Istio:

    scripts/install-istio.sh \
    --cluster-name "${GKE_CLUSTER_NAME}" \
    --google-cloud-project "${DEFAULT_PROJECT}" \
    --cluster-region "${DEFAULT_REGION}"
    

    install-istio.sh 脚本将执行以下操作:

    • 下载 Istio 发行版。
    • 在目标环境 GKE 集群中安装 Istio。
    • 部署网关以公开服务网格中的服务。
    • 配置 Istio,以允许将服务网格扩展到模拟来源环境的 Compute Engine 实例。
    • 安装服务网格监控和可视化工具,例如 Kiali。

    当此命令运行完毕后,控制台会显示安装确认消息。输出类似于以下内容:

    ✔ Istio core installed
    ✔ Istiod installed
    ✔ Ingress gateways installed
    ✔ Egress gateways installed
    ✔ Installation complete
    

配置 Istio 网格扩展功能

在本部分中,您将模拟来源环境的 Compute Engine 实例连接到服务网格。服务网格处理在旧版环境中将迁移到目标环境的微服务的连接。在这个阶段中,服务网格是空的,等待服务进行注册。此时服务网格尚未接收到任何生产流量。

  1. 在 Cloud Shell 中,将工作目录更改为代码库目录:

    cd "${DEPLOYMENT_DIRECTORY_PATH}"
    
  2. 在 Compute Engine 实例上安装和配置 Istio:

    scripts/compute-engine-mesh-expansion-setup.sh \
    --default-project "${DEFAULT_PROJECT}" \
    --default-region "${DEFAULT_REGION}" \
    --default-zone "${DEFAULT_ZONE}"
    

    compute-engine-mesh-expansion-setup.sh 脚本将执行以下操作:

    • 在来源环境 Compute Engine 实例上安装 Istio。
    • 在 Compute Engine 实例上启动 Istio 服务。

公开工作负载

在本部分中,您将注册在 Compute Engine 实例中运行的工作负载,并模拟来源环境到 Istio 服务网格。

本部分中运行的 workloads.sh 脚本会设置路由规则,以便使用服务网格将生产流量拆分到在旧版环境中运行的服务以及在目标环境中运行的服务之间。由于服务网格内的流量路由对客户端是透明的,因此他们不会知道路由配置已更改。

  1. 在 Cloud Shell 中,将工作目录更改为代码库目录:

    cd "${DEPLOYMENT_DIRECTORY_PATH}"
    
  2. 公开工作负载:

    scripts/workloads.sh \
    --default-project "${DEFAULT_PROJECT}" \
    --default-region "${DEFAULT_REGION}" \
    --default-zone "${DEFAULT_ZONE}" \
    --expose-with "ISTIO_COMPUTE_ENGINE"
    
  3. workloads.sh 脚本将执行以下操作:

    在输出中,您会看到对部署的确认以及如何访问部署。输出类似于以下内容:

    You can access the workload by loading http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/productpage
    

    在输出中,ISTIO_INGRESS_GATEWAY_EXTERNAL_IP 是处理工作负载的 IP 地址。记下 IP 地址,因为您将在后面的步骤中使用。

测试 Istio 网格扩展功能

在本部分中,您将测试在使用 Istio 公开的 Compute Engine 实例中运行的示例工作负载。

  • 打开浏览器并转到以下网址,其中 ISTIO_INGRESS_GATEWAY_EXTERNAL_IP 是您在上一步中记下的 IP 地址:

    http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/productpage
    

此阶段仍提供来源环境入口点(连接到 Compute Engine 实例)。迁移生产环境时,我们建议您更新负载均衡层配置,将流量逐步重定向到目标环境。

直观呈现服务网格

在本部分中,您将使用 Kiali 直观展示服务网格。

  1. 打开浏览器并转到以下网址,其中 ISTIO_INGRESS_GATEWAY_EXTERNAL_IP 是您在上一步中记下的 IP 地址:

    http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/kiali/console/graph/namespaces/?edges=requestDistribution&graphType=versionedApp&namespaces=default%2Cistio-system&idleNodes=false&duration=60&refresh=15000&operationNodes=false&idleEdges=false&injectServiceNodes=true&layout=dagre
    

    系统会显示 Kiali 服务信息中心。

  2. 在 Cloud Shell 中,针对示例工作负载的主页多次运行请求:

    ISTIO_INGRESS_GATEWAY_EXTERNAL_IP="$(kubectl get svc istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    
    for i in {1..10000}; do curl -s -o /dev/null -w "$(date --iso-8601=ns) - %{http_code}\n"  http://"${ISTIO_INGRESS_GATEWAY_EXTERNAL_IP}"/productpage; done
    

    该请求生成发送到图书信息应用的流量。输出会显示发送到 productpage 服务的每个 HTTP 请求的时间戳列表,以及每个请求的 HTTP 返回代码(本例中为 200)。

    输出类似于以下内容:

    2021-06-09T10:16:15,355323181+00:00 - 200
    2021-06-09T10:16:15,355323182+00:00 - 200
    2021-06-09T10:16:15,355323183+00:00 - 200
    [...]
    

    请求需要一些时间才能完成,因此您可以使其保持运行并继续执行下一步。

  3. 在 Kiali 服务信息中心内,您会看到当前网格的图表,其中流量路由到 Compute Engine 中运行的服务。所有流量都从 istio-ingressgateway 路由到在 Compute Engine 实例上运行并具有 compute-engine 版本标签的 productpage 微服务,并路由到 kiali 服务来直观呈现服务网格。

    图表中不显示其他服务(detailsreviewsratings),因为 Compute Engine 中运行的 productpage 微服务直接连接到其他微服务。productpage 微服务不通过服务网格。

    如果您希望所有流量都经过服务网格,则需要重新配置在 Compute Engine 中运行的工作负载以指向服务网格中的服务,而不是直接连接到它们。

    如果您在 Kiali 信息中心内未看到下图,请刷新页面。

    Kiali 信息中心会显示流量的路由方式。

    Kiali 信息中心上的图表显示流量会路由到 Compute Engine 中运行的服务。

  4. 在 Cloud Shell 中,如需停止流量生成命令,请按 Control+C

迁移工作负载

在本部分中,您需要将示例工作负载的组件从 Compute Engine 实例迁移到 GKE 集群。对于示例工作负载的每个微服务,请执行以下操作:

  • 在 GKE 集群中部署微服务实例。
  • 开始将流量路由到 Compute Engine 和 GKE 中运行的微服务实例。

下图显示了本部分采用的系统架构:

将流量路由到 Compute Engine 和 GKE 中的微服务实例的目标架构。

在该图中,Cloud Load Balancing 将流量路由到 Istio 网关,然后 Istio 将流量路由到 Compute Engine 中运行的服务或 GKE 中运行的服务。

如需迁移示例工作负载的组件,请执行以下操作:

  1. 在 Cloud Shell 中,将工作目录更改为代码库目录:

    cd "${DEPLOYMENT_DIRECTORY_PATH}"
    
  2. 在目标环境中部署工作负载。

    scripts/workloads.sh \
    --default-project "${DEFAULT_PROJECT}" \
    --default-region "${DEFAULT_REGION}" \
    --default-zone "${DEFAULT_ZONE}" \
    --deploy-with "GKE"
    

    workloads.sh 脚本将执行以下操作:

    您会看到部署的确认信息以及访问方式。输出类似于以下内容:

    You can access the workload by loading http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/productpage
    

服务网格将流量路由到 Compute Engine 实例中运行的示例工作负载和 GKE 集群中运行的工作负载。

测试在 Compute Engine 和 GKE 中运行的工作负载

在本部分中,您将测试您在 Compute Engine 和 GKE 中部署的示例工作负载。

  • 打开浏览器并转到以下网址,其中 ISTIO_INGRESS_GATEWAY_EXTERNAL_IP 是您在上一步中记下的 IP 地址:

    http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/productpage
    

    随即会显示一个图书信息页面,其中包含图书和相关评分的信息。

由于您在 Compute Engine 和 GKE 集群中部署了同一示例工作负载版本,因此输出与先前的测试相同。

直观呈现服务网格

在本部分中,您将使用 Kiali 直观展示服务网格。

  1. 打开浏览器并转到以下网址,其中 ISTIO_INGRESS_GATEWAY_EXTERNAL_IP 是您在上一步中记下的 IP 地址:

    http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/kiali/console/graph/namespaces/?edges=requestDistribution&graphType=versionedApp&namespaces=default%2Cistio-system&idleNodes=false&duration=60&refresh=15000&operationNodes=false&idleEdges=false&injectServiceNodes=true&layout=dagre
    
  2. 在 Cloud Shell 中,针对示例工作负载的主页多次运行请求:

    ISTIO_INGRESS_GATEWAY_EXTERNAL_IP="$(kubectl get svc istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    for i in {1..10000}; do curl -s -o /dev/null -w "$(date --iso-8601=ns) - %{http_code}\n"  http://"${ISTIO_INGRESS_GATEWAY_EXTERNAL_IP}"/productpage; done
    

    此命令可生成指向图书信息应用的流量。预期输出是一个列表,其中包含发送到 productpage 服务的 HTTP 请求的日期以及每个请求的 HTTP 返回代码(本例中为 200 OK)。输出内容类似如下:

    2021-06-09T10:16:15,355323181+00:00 - 200
    2021-06-09T10:16:15,355323182+00:00 - 200
    2021-06-09T10:16:15,355323183+00:00 - 200
    [...]
    
  3. 在 Kiali 服务信息中心内,您会看到当前网格的图表,其中流量路由到 Compute Engine 和 GKE 中运行的服务。

    每个微服务实例都有一个标签,用于解释其修订版本:

    • 在 Compute Engine 中运行的实例的标签为 compute-engine
    • 在 GKE 中运行的实例具有额外的字符串,例如 v1v3

    在 Compute Engine 中运行的实例无需连接到服务网格即可直接连接到 Compute Engine 中的其他实例。因此,您不会看到从 Compute Engine 中运行的实例到其他实例的流量。

    如果您在 Kiali 信息中心内未看到下图,请刷新页面。

    Kiali 信息中心会显示流量的路由方式。

    Kiali 信息中心上的图表显示了路由到 Compute Engine 和 GKE 中运行的服务的流量。

  4. 在 Cloud Shell 中,如需停止流量生成命令,请按 Control+C

仅将流量路由到 GKE 集群

在本部分中,您仅将流量路由到 GKE 集群中运行的工作负载服务实例。对于示例工作负载的每项服务,您删除指向 Compute Engine 中运行的服务的 WorkloadEntry 引用。此删除操作会导致服务仅选择 GKE 集群中运行的微服务实例,并且流量仅路由到 GKE 集群。下图显示了本部分采用的系统架构:

将流量路由到 GKE 集群的目标架构。

  1. 在 Cloud Shell 中,将工作目录更改为代码库目录:

    cd "${DEPLOYMENT_DIRECTORY_PATH}"
    
  2. 仅在目标环境中公开工作负载:

    scripts/workloads.sh \
    --default-project "${DEFAULT_PROJECT}" \
    --default-region "${DEFAULT_REGION}" \
    --default-zone "${DEFAULT_ZONE}" \
    --expose-with "GKE_ONLY"
    

    workloads.sh 脚本会从 GKE 集群中删除指向 Compute Engine 中运行的微服务实例的 WorkloadEntry 引用。

    您会看到部署的确认信息以及访问方式。输出类似于以下内容:

    You can access the workload by loading http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/productpage
    

服务条目使用 workloadSelector 自动选择 GKE 集群中运行的示例工作负载。

测试在 GKE 中运行的工作负载

  • 打开浏览器并转到以下网址,其中 ISTIO_INGRESS_GATEWAY_EXTERNAL_IP 是您在上一步中记下的 IP 地址:

    http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/productpage
    

    随即会显示一个图书信息页面,其中包含图书和相关评分的信息。

直观呈现服务网格

在本部分中,您将使用 Kiali 直观展示服务网格。

  1. 打开浏览器并转到以下网址,其中 ISTIO_INGRESS_GATEWAY_EXTERNAL_IP 是您在上一步中记下的 IP 地址:

    http://ISTIO_INGRESS_GATEWAY_EXTERNAL_IP/kiali/console/graph/namespaces/?edges=requestDistribution&graphType=versionedApp&namespaces=default%2Cistio-system&idleNodes=false&duration=60&refresh=15000&operationNodes=false&idleEdges=false&injectServiceNodes=true&layout=dagre
    
  2. 在 Cloud Shell 中,针对示例工作负载的主页多次运行请求:

    ISTIO_INGRESS_GATEWAY_EXTERNAL_IP="$(kubectl get svc istio-ingressgateway -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    for i in {1..10000}; do curl -s -o /dev/null -w "$(date --iso-8601=ns) - %{http_code}\n"  http://"${ISTIO_INGRESS_GATEWAY_EXTERNAL_IP}"/productpage; done
    

    此命令可生成指向图书信息应用的流量。预期输出是一个列表,其中包含发送到 productpage 服务的 HTTP 请求的日期以及每个请求的 HTTP 返回代码(本例中为 200 OK)。输出内容类似如下:

    2021-06-09T10:16:15,355323181+00:00 - 200
    2021-06-09T10:16:15,355323182+00:00 - 200
    2021-06-09T10:16:15,355323183+00:00 - 200
    [...]
    
  3. Kiali 服务信息中心展示了当前网格的图表,其中流量路由到 GKE 中运行的服务。每个微服务都部署了两个实例:一个在 Compute Engine 实例中运行,另一个在 GKE 集群中运行。但是,由于您移除了指向 Compute Engine 中运行的微服务实例的 WorkloadEntry 引用,因此服务仅选择 GKE 集群中运行的微服务实例。

    如果您在 Kiali 信息中心内未看到下图,请刷新页面:

    Kiali 信息中心会显示流量的路由方式。

    Kiali 信息中心上的图表显示了路由到 GKE 中运行的服务的流量。

  4. 在 Cloud Shell 中,如需停止流量生成命令,请按 Control+C

停用来源环境

由于所有流量现在都路由到 GKE 集群,因此您可以停止 Compute Engine 中运行的工作负载实例。

在生产迁移期间,应保留来源数据中心以随时用于回滚策略。我们建议:只有在您确定新的解决方案能按预期正常运行,并且所有备份和容错机制都已落实到位的情况下,您才能开始停用来源数据中心。

下图显示了本部分采用的系统架构:

在 Compute Engine 中没有运行工作负载实例的来源环境。

在该图中,Istio 仅将流量路由到 GKE 中运行的服务,并且停用了 Compute Engine 中运行的工作负载。

如需停用来源环境,请执行以下操作:

  1. 在 Cloud Shell 中,将工作目录更改为代码库目录:

    cd "${DEPLOYMENT_DIRECTORY_PATH}"
    
  2. 仅在目标环境中公开工作负载:

    scripts/workloads.sh \
    --default-project "${DEFAULT_PROJECT}" \
    --default-region "${DEFAULT_REGION}" \
    --default-zone "${DEFAULT_ZONE}" \
    --deploy-with "GKE_ONLY"
    

    workloads.sh 脚本会停止 Compute Engine 实例中运行的容器。

清理

为避免因本部署中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

逐个删除资源

  1. 在 Cloud Shell 中,将工作目录更改为代码库目录:

    cd "${DEPLOYMENT_DIRECTORY_PATH}"/terraform
    
  2. 删除您预配的资源:

    terraform destroy -auto-approve
    

后续步骤

  • 了解 GKE
  • 了解 Istio
  • 如需查看更多参考架构、图表和最佳实践,请浏览云架构中心