本指南介绍如何为包含属于同一项目的一个或多个 GKE 集群的网格安装或迁移到 Anthos Service Mesh 版本 1.6.14。您将使用 Google 提供的脚本,该脚本配置项目和集群,然后安装 Anthos Service Mesh。
您可以针对以下使用场景使用本指南:
新安装 Anthos Service Mesh。如果您安装了先前版本的 Anthos Service Mesh,请参阅升级 GKE 上的 Anthos Service Mesh。1.6 脚本不处理升级。
从开源 Istio 1.6 迁移到 Anthos Service Mesh。不支持从更早版本的 Istio 迁移。1.7 版脚本支持从 Istio 1.6 或 1.7 迁移到 Anthos Service Mesh 1.7。由于您要进行迁移,您可能希望迁移到 Anthos Service Mesh 1.7。
从 1.6 版本的 Istio on GKE 插件迁移到 Anthos Service Mesh。在迁移到 Anthos Service Mesh 之前,您需要使用 Operator 升级到 Istio 1.6。如需查看从该插件迁移的完整步骤,请参阅 Istio on GKE 文档中的迁移到 Anthos Service Mesh。
您需要针对以下使用场景使用 GKE 上的高级安装和迁移指南:
您需要自定义安装以覆盖
asm-gcp
配置文件中的设置,并且您有多个叠加IstioOperator
YAML 文件。脚本仅允许您指定一个 YAMl 文件。多集群网格包含的集群属于不同项目。
准备工作
本指南假定您已具备:
如果您是从 Istio 迁移,请务必查看准备从 Istio 迁移。
Anthos 与 Anthos Service Mesh 的差异
GKE Enterprise 订阅者务必启用 GKE Enterprise API。
如果您不是 GKE Enterprise 订阅者,您仍然可以安装 Anthos Service Mesh,但 Google Cloud 控制台中的某些界面元素和功能仅供 GKE Enterprise 订阅者使用。如需了解订阅者和非订阅者可以使用的内容,请参阅 GKE Enterprise 和 Anthos Service Mesh 界面差异。如需了解非订阅者的 Anthos Service Mesh 价格,请参阅价格。
使用要求
您的 GKE 集群必须满足以下要求:
具有至少四个 vCPU 的机器类型,例如
e2-standard-4
。如果集群的机器类型没有至少四个 vCPU,请按照将工作负载迁移到不同的机器类型中所述更改机器类型。最小节点数取决于您的机器类型。Anthos Service Mesh 至少需要八个 vCPU。如果机器类型有四个 vCPU,则您的集群必须至少有两个节点。如果机器类型有八个 vCPU,则集群只需要一个节点。如果需要添加节点,请参阅调整集群大小。
该脚本会在集群上启用 Workload Identity。建议使用 Workload Identity 来调用 Google API。如 Workload Identity 限制所述,启用 Workload Identity 会更改从工作负载到 Google API 的调用方式。
(可选,但建议执行)在发布版本中注册集群。我们建议您在常规发布版本中注册集群,因为其他发布版本可能基于 Anthos Service Mesh 1.6.14 不支持的 GKE 版本。如需了解详情,请参阅支持的环境。如果您拥有静态 GKE 版本,请按照在发布渠道中注册现有集群中的说明操作。
如需将服务端口纳入服务网格,必须为服务端口命名,并且名称必须包含以下语法的端口协议:
name: protocol[-suffix]
,其中方括号表示必须以短划线开头的可选后缀。如需了解详情,请参阅为服务端口命名。如果您要在专用集群上安装 Anthos Service Mesh,则必须在防火墙中打开端口 15017,以获取与自动 Sidecar 注入搭配使用的网络钩子,以便正常运行。如需了解详情,请参阅在专用集群上打开端口。
如果您在组织中创建了服务边界,则可能需要将 Mesh CA 服务添加到边界。如需了解详情,请参阅将 Mesh CA 添加到服务边界。
对于迁移,
istiod
必须安装在istio-system
命名空间中(通常都是这样)。
限制
一个 Google Cloud 项目只能关联一个网格。
选择证书授权机构
对于新安装和迁移,您可以使用 Anthos Service Mesh 证书授权机构 (Mesh CA) 或 Citadel(现已包含在 istiod
中)作为颁发双向 TLS (mTLS) 证书的证书授权机构 (CA)。
基于以下原因,我们通常建议您使用 Mesh CA:
- Mesh CA 是一项高度可靠的可扩缩服务,针对 Google Cloud 上动态扩缩的工作负载进行了优化。
- 通过 Mesh CA,Google 负责管理 CA 后端的安全性和可用性。
- Mesh CA 让您可在集群中依赖单个信任根。
不过,在某些情况下,您可能会考虑使用 Citadel,例如:
- 如果您拥有自定义 CA。
如果要从 Istio 或 Istio on GKE 插件迁移。
如果您选择 Citadel,则不存在任何停机时间,因为 mTLS 流量在迁移期间不会中断。如果您选择 Mesh CA,则需要为迁移安排停机时间,因为 mTLS 流量在您重启所有命名空间中的所有 Pod 之前会失败。
来自 Mesh CA 的证书包含有关应用的服务的以下数据:
- Google Cloud 项目 ID
- GKE 命名空间
- GKE 服务账号名称
安装所需的工具
您可以在 Cloud Shell 或运行 Linux 或 macOS 的本地机器上运行该脚本。Cloud Shell 会预安装所有必需的工具。
要在本地运行脚本,请执行以下操作:
请确保已安装以下工具:
- Google Cloud CLI
- 标准命令行工具:
awk
、curl
、grep
、sed
、sha256sum
、tr
- git
- kpt
- kubectl
- jq
使用 gcloud CLI 进行身份验证:
gcloud auth login
更新组件:
gcloud components update
请确保
git
位于您的路径中,以便kpt
能够找到它。
运行脚本
本部分介绍如何下载脚本、设置必需参数和可选参数,以及如何运行脚本。如需详细了解脚本的功能,请参阅了解脚本。
将脚本下载到当前工作目录:
curl https://storage.googleapis.com/csm-artifacts/asm/install_asm_1.6 > install_asm
将文件的 SHA-256 下载到当前工作目录:
curl https://storage.googleapis.com/csm-artifacts/asm/install_asm_1.6.sha256 > install_asm.sha256
在这两个文件位于同一目录的情况下,验证下载:
sha256sum -c --ignore-missing install_asm.sha256
如果验证成功,则该命令会输出
install_asm: OK
为了确保兼容性,
install_asm.sha256
文件包含两次校验和,以允许将脚本的任何版本重命名为install_asm
。如果出现--ignore-missing
不存在的错误,请重新运行上一个命令,但不使用--ignore-missing
标志。让该脚本可执行:
chmod +x install_asm
设置选项并指定运行脚本的标志。您应始终包含以下选项:
project_id
、cluster_name
、cluster_location
和mode
。根据mode
,可能需要包含ca
选项。project_id
、cluster_name
和cluster_location
选项标识要安装 Anthos Service Mesh 的集群。mode
为install
或migrate
。ca
将证书授权机构指定为mesh_ca
或citadel
。
以下部分提供了运行脚本的典型示例。如需查看脚本参数的完整说明,请参阅选项和标志。
要完成 Anthos Service Mesh 的设置,您需要启用自动 Sidecar 注入并部署或重新部署工作负载。
示例
本部分提供了在每个 mode
中运行脚本的示例以及一些可能有用的其他参数。请在右侧的导航栏中查看示例列表。
仅验证
以下示例展示使用 --only_validate
选项运行脚本。使用此选项时,脚本不会对您的集群进行任何更改,也不会安装 Anthos Service Mesh。该脚本会验证以下内容:
- 您的环境拥有所需的工具。
- 您对指定项目拥有所需权限。
- 集群符合最低要求。
- 项目已启用所有必需的 Google API。
默认情况下,该脚本会下载并解压缩安装文件,并将 GitHub 中的 asm
配置软件包下载到临时目录中。在退出之前,该脚本会输出一条消息,提供临时目录的名称。您可以使用 --output_dir DIR_PATH
选项为下载指定现有目录。--output_dir
选项可方便您使用 istioctl
命令行工具(如果需要)。
创建名为
asm-packages
的目录:mkdir asm-packages
运行以下命令以验证配置并将安装文件和
asm
软件包下载到asm-packages
目录:./install_asm \ --project_id PROJECT_ID \ --cluster_name CLUSTER_NAME \ --cluster_location CLUSTER_LOCATION \ --mode install \ --output_dir ./asm-packages \ --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 re-run the script with the '--enable_apis' flag to allow the script to enable them on your behalf.
新安装
以下命令运行新安装的脚本,启用 Mesh CA(新安装的默认 CA,因此在此情况下不需要使用 ca
选项),并允许脚本启用所需的 Google API。
./install_asm \ --project_id PROJECT_ID \ --cluster_name CLUSTER_NAME \ --cluster_location CLUSTER_LOCATION \ --mode install \ --enable_apis
使用叠加文件的新安装
以下示例执行新安装并包含一个启用可选功能的 YAML 文件。
./install_asm \ --project_id PROJECT_ID \ --cluster_name CLUSTER_NAME \ --cluster_location CLUSTER_LOCATION \ --mode install \ --enable_apis \ --operator_overlay egressgateways.yaml
从 Istio 迁移
如果您是从开源 Istio 进行迁移,则使用 Citadel 作为 CA。以下命令运行迁移到 Anthos Service Mesh 的脚本,并启用 Citadel 作为 CA。此迁移仅部署控制平面。它不会更改根 CA,也不会打断现有工作负载。
./install_asm \ -p PROJECT_ID \ -n CLUSTER_NAME \ -l CLUSTER_LOCATION \ -m migrate \ -c citadel \ --enable_apis
选项和标志
选项
-p|--project_id CLUSTER_PROJECT_ID
- 在其中创建集群的项目的 ID。
-n|--cluster_name CLUSTER_NAME
- 集群的名称。
-l|--cluster_location CLUSTER_LOCATION
- 在其中创建集群的区域(对于单区域集群)或地区(对于地区级集群)。
-m|--mode {install|migrate}
- 如果要新安装 Anthos Service Mesh,请输入
install
。如果您要从 Istio 或 Istio on GKE 插件迁移到 Anthos Service Mesh,请输入migrate
。 -c|--ca {mesh_ca|citadel}
- 如果您要执行新的安装操作,则此参数默认为 Mesh CA,您无需添加它。如果您要从 Istio 进行迁移,则必须指定
citadel
或mesh_ca
。如果您可以为迁移安排停机时间,我们建议您使用mesh_ca
。如果您无法为迁移安排停机时间,请使用citadel
。 -o|--operator_overlay YAML_FILE
- 用于启用
asm-gcp
配置文件中未启用的功能的 YAML 文件的名称。脚本必须能够找到该 YAML 文件。因此,该文件必须与该脚本位于同一目录中,您也可以指定相对路径,例如:../manifests/asm-features.yaml
。 -s|--service_account ACCOUNT
- 用于安装 Anthos Service Mesh 的服务账号的名称。如果未指定,则使用当前
gcloud
配置中的活动用户账号。如果您需要更改活跃用户账号,请运行 gcloud auth login。 -k|--key_file FILE PATH
- 服务账号的密钥文件。如果您未使用服务账号,请忽略此选项。
-D|--output_dir DIR_PATH
- 如果未指定,脚本将创建一个临时目录,用于下载安装 Anthos Service Mesh 所需的文件和配置。指定
--output-dir
标志以改为指定使用现有目录。完成后,指定的目录包含asm
和istio-1.6.14-asm.2
子目录。asm
目录包含安装的配置。istio-1.6.14-asm.2
目录包含安装文件的解压缩内容,其中包含istioctl
、示例和清单。
标志
-e|--enable_apis
- 允许该脚本启用 Anthos Service Mesh 所需的 Google API。未使用此标志的情况下,如果所需的 API 尚未启用,则脚本将退出。如需查看脚本启用的 API 列表,请参阅 set_up_project。
-v|--verbose
- 在执行前后输出命令。
--dry_run
- 输出命令,但不执行这些命令。
--only_validate
- 运行验证,但不安装 Anthos Service Mesh。
--disable_canonical_service
- 默认情况下,该脚本会将规范化服务控制器部署到您的集群。如果您不希望脚本部署该控制器,请指定
--disable_canonical_service
。如需了解详情,请参阅启用和停用规范化服务控制器。 -h|--help
- 显示描述选项和标志的帮助消息并退出。
部署和重新部署工作负载
您需要启用自动边车代理注入(自动注入),才能完成安装。
对于新安装,在安装 Anthos Service Mesh 之前,您需要为集群上运行的所有工作负载启用自动注入和重启 pod。
从 Istio 迁移时,应遵循双控制平面升级过程(在 Istio 文档中称为 Canary 版升级)。在双控制平面升级中,脚本在现有
istiod
的基础上安装新版本的istiod
。然后,您再将部分工作负载移至新版本。利用此过程,您可以通过一小部分工作负载监控新版本的影响,然后再将所有流量迁移到新版本。在部署新工作负载之前,请务必启用自动注入,以便 Anthos Service Mesh 可以监控和保护流量。
要启用自动注入,您需要获取脚本应用于 istiod
的修订版本标签,并使用该修订版本标签为命名空间添加标签。以下部分将作详细介绍。
获取修订版本标签
脚本会将格式为 istio.io/rev=asm-1614-2
的修订版本标签添加到 istiod
。要启用自动注入,请向一个或多个命名空间添加匹配的修订版本标签。Sidecar 注入器网络钩子会使用修订版本标签将注入的 Sidecar 与特定 istiod
修订版本相关联。添加标签后,必须重启命名空间中的任何现有 pod,才能注入 Sidecar。
设置
kubectl
的当前上下文:gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID
显示
istiod
上的标签,以获取脚本设置的修订版本标签:kubectl -n istio-system get pods -l app=istiod --show-labels
此命令的输出类似如下所示。
NAME READY STATUS RESTARTS AGE LABELS istiod-7744bc8dd7-qhlss 1/1 Running 0 49m app=istiod,istio.io/rev=default,istio=pilot,pod-template-hash=7744bc8dd7 istiod-asm-1614-2-85d86774f7-flrt2 1/1 Running 0 26m app=istiod,istio.io/rev=asm-1614-2,istio=istiod,pod-template-hash=85d86774f7 istiod-asm-1614-2-85d86774f7-tcwtn 1/1 Running 0 26m app=istiod,istio.io/rev=asm-1614-2,istio=istiod,pod-template-hash=85d86774f7
在输出中的
LABELS
列下,记下istiod
修订版本标签的值,该值位于前缀istio.io/rev=
之后。在此示例中,该值为 asm-1614-2,但您的值可能会不同。对于迁移,请也记下旧
istiod
版本的修订版本标签中的值。完成迁移后,您需要使用此值来删除旧版本的istiod
。在示例输出中,旧istiod
版本的修订版本标签中的值为default
,但您的值可能会不同。
启用自动注入
按照以下步骤为新安装和迁移启用自动注入。
将修订版本标签添加到命名空间,并移除
istio-injection
标签。在以下命令中,将REVISION
更改为与istiod
上的修订版本匹配的值。kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
重启 pod 以触发重新注入。
kubectl rollout restart deployment -n NAMESPACE
验证 pod 是否配置为指向新版
istiod
。kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
测试您的应用,验证工作负载是否正常工作。
如果您的其他命名空间中存在工作负载,请重复上述步骤以标记命名空间并重启 Pod。
对于迁移:
完成转换
对于迁移,您需要移除 istiod
的旧版本。如果您确信应用按预期正常运行,请移除旧控制平面以完成到新版本的转换。
删除
istiod
的旧版本。在以下命令中,将OLD_REVISION
替换为上一步中获得的修订版本。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-OLD_REVISION -n istio-system --ignore-not-found=true
回滚到先前版本
对于迁移,如果您在使用 istiod
的新版本测试应用时遇到问题,请按照以下步骤回滚到之前的版本:
更新工作负载以注入先前的
istiod
版本:kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
重启 pod 以触发重新注入,以使代理具有之前的版本:
kubectl rollout restart deployment -n NAMESPACE
重新部署旧版
istio-ingressgateway
:kubectl -n istio-system rollout undo deploy istio-ingressgateway
移除新的
istiod
:kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true
如果您未添加
--disable_canonical_service
标志,则脚本会启用规范化服务控制器。按照启用和停用规范化服务控制器中的步骤操作以将其停用。
查看 Anthos Service Mesh 信息中心
本部分仅适用于使用 asm-gcp
配置文件安装了 Anthos Service Mesh 的情况。如果您使用 asm-gcp-multiproject
配置文件安装 Anthos Service Mesh,则 Google Cloud 控制台的 Anthos Service Mesh 信息中心内不会显示遥测数据。
在集群上部署完工作负载并注入 Sidecar 代理后,您可以在 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 的访问权限中所述的限制性更强的角色。
在 Google Cloud 控制台中,前往 Anthos Service Mesh。
从菜单栏的下拉列表中选择 Google Cloud 项目。
如果您有多个服务网格,请从服务网格下拉列表中选择相应网格。
如需了解详情,请参阅在 Google Cloud 控制台中探索 Anthos Service Mesh。
除了 Anthos Service Mesh 页面,系统还会将与服务相关的指标(例如特定服务收到的请求数)发送到 Cloud Monitoring,这些指标显示在 Cloud Monitoring 的 Metrics Explorer 中。
如需查看指标,请执行以下操作:
在 Google Cloud 控制台中,转到监控页面:
选择资源 > Metrics Explorer。
如需查看指标的完整列表,请参阅 Cloud Monitoring 文档中的 Istio 指标。
注册您的集群
您必须向项目的队列注册集群,才能获取对 Google Cloud 控制台中的统一界面的访问权限。队列提供一种统一方法来查看和管理集群及其工作负载,包括 Google Cloud 之外的集群。
如需了解如何注册集群,请参阅向舰队注册集群。
了解脚本
虽然您可以从安全的 Cloud Source Repositories 位置下载该脚本,但 GitHub 上也提供了该脚本,因此您可以在下载前查看它所执行的操作。该脚本会验证您的集群是否满足要求,并且会自动执行您在 GKE 上安装 Anthos Service Mesh 时需要手动执行的所有步骤。
validate_args
和 validate_dependencies
validate_args
和 validate_dependencies
函数:
set_up_project
如果您添加了 --enable_apis
标志,则 set_up_project
函数会启用所需的 API:
set_up_cluster
set_up_cluster
函数会对您的集群进行以下更新:
启用 Workload Identity,这是从 GKE 应用安全访问 Google Cloud 服务的推荐方法。
在集群上设置
mesh_id
标签,该标签对于在 Google Cloud 控制台中的 Anthos Service Mesh 页面上显示指标必不可少。设置像
asmv=asm-1614-2
这样的标签,以分辨脚本是否已修改集群。将运行脚本的 GCP 用户或服务账号绑定到集群上的集群管理员角色。
install_asm
install_asm
函数
- 将
kpt
软件包下载到临时目录。 - 运行
kpt
setter 以配置istio-operator.yaml
文件。 - 安装 Anthos Service Mesh。
与 1.7 脚本的区别
1.7 脚本 | 1.6 脚本 |
---|---|
支持升级。 | 不进行升级。 |
支持从 Istio 1.6 和 Istio 1.7 迁移。 | 支持从 Istio 1.6 迁移。 |
--print_config 提供使用 install_asm 脚本安装时使用的配置。通过标志,您可以轻松地使用先前安装时所用的相同配置重新安装 Anthos Service Meshversion(脚本不允许)。 |
不可用 |
--custom_overlay 允许多个叠加文件。 |
--custom_overlay 仅允许一个叠加文件。 |
--option 从 GitHub 上的 asm 软件包中拉取叠加文件。 |
不可用。 |
支持具有以下选项的自定义 CA:
|
不可用。 |