参考文档

本页面介绍脚本可用的参数,并提供有关脚本对项目和 GKE 集群所做的更改的详细信息。

选项

-p|--project_id CLUSTER_PROJECT_ID
在其中创建集群的项目的 ID。
-n|--cluster_name CLUSTER_NAME
集群的名称。
-l|--cluster_location CLUSTER_LOCATION
在其中创建集群的区域(对于单区域集群)或地区(对于地区级集群)。
-m|--mode {install|migrate|upgrade}

您可以使用 --mode install 从 Istio 进行新安装、升级或迁移。使用 --mode install 进行升级或迁移时,无论集群上的控制平面版本如何,install_asm 都允许升级/迁移。migrateupgrade 标志仅允许从上一个次要版本或更早的补丁程序版本进行升级或迁移。

如果您使用 --mode install 进行升级或迁移,请务必指定当前在集群上启用的同一证书授权机构 (CA)。更改 CA 将导致停机。--upgrade 标志不允许您更改 CA,从而防止意外停机。

如果您要从 Istio 迁移,可以更改 CA 并启用 Anthos Service Mesh 证书授权机构 (Mesh CA)。如果您无法为迁移到 Mesh CA 安排停机时间,则仍然有向 Mesh CA 迁移的路径,但需要执行其他步骤。如需了解详情,请参阅迁移到 Mesh CA

-c|--ca {mesh_ca|citadel}

对于新安装,如果您想使用 Mesh CA,则无需添加此选项,因为脚本默认为 Mesh CA。对于升级,您无需添加此选项,因为脚本不允许您更改 CA。对于迁移,请指定 citadelmesh_ca。如果您可以为迁移安排停机时间,我们建议您使用 mesh_ca。如需详细了解应使用哪个 CA,请参阅选择证书授权机构。如需了解使用 Istio CA 时必须指定的其他选项,请参阅 Istio CA 自定义证书选项

--co|--custom_overlay YAML_FILE

IstioOperator 自定义资源 (CR) YAML 文件的名称,用于启用默认情况下未启用的功能。该脚本必须能够找到该 YAML 文件,因此该文件必须与该脚本位于同一目录中,您也可以指定相对路径。如需添加多个文件,请指定 --co|--custom_overlay 和文件名,例如:--co overlay_file1.yaml --co overlay_file2.yaml --co overlay_file3.yaml

-o|--option OPTION_FILE

YAML 文件名来自 anthos-service-mesh 软件包,其包含 IstioOperator CR,可启用可选功能。添加其中某个文件时,您无需先下载 anthos-service-mesh 软件包,也无需指定 .yaml 扩展名。如需修改任何文件,请下载 anthos-service-mesh 软件包、进行更改,然后使用 --custom_overlay 选项。如需添加多个文件,请指定 -o|--option 和文件名,例如:-o option_file1 -o option_file2 -o option_file3

-D|--output_dir DIR_PATH

如果未指定,脚本将创建一个临时目录,用于下载安装 Anthos Service Mesh 所需的文件和配置。指定 --output-dir 标志以指定要改用的目录的相对路径。完成后,指定的目录包含 asmistio-1.10.6-asm.2 子目录。asm 目录包含安装的配置。istio-1.10.6-asm.2 目录包含安装文件的解压缩内容,其中包含 istioctl、示例和清单。如果指定 --output-dir,并且目录已经包含必要的文件,则脚本会使用这些文件,而不是重新下载。

-r|--revision_name REVISION NAME>

修订版本标签是在控制平面上设置的键值对。修订版本标签键始终为 istio.io/rev。默认情况下,脚本会根据 Anthos Service Mesh 版本设置修订版本标签的值,例如:asm-1106-2。如果您想替换默认值并指定自己的值,请添加此选项。REVISION NAME 参数必须是 DNS-1035 标签,并且必须包含小写字母数字字符或 -,以字母字符开头,并以字母数字字符结尾(例如 my-name'abc-123)。用于验证的正则表达式为:'[a-z]([-a-z0-9]*[a-z0-9])?')

-s|--service_account ACCOUNT

用于安装 Anthos Service Mesh 的服务账号的名称。如果未指定,则使用当前 gcloud 配置中的活动用户账号。如果您需要更改活跃用户账号,请运行 gcloud auth login

-k|--key_file FILE_PATH

服务账号的密钥文件。如果您未使用服务账号,请忽略此选项。

Citadel 自定义证书选项

如果指定了 --ca citadel 并且您使用的是自定义 CA,请添加以下选项:

  • --ca_cert FILE_PATH:中间证书
  • --ca_key FILE_PATH:中间证书的密钥
  • --root_cert FILE_PATH:根证书
  • --cert_chain FILE_PATH:证书链

如需了解详情,请参阅在现有 CA 证书中插入

启用标志

--enable 开头的标志让脚本可启用所需的 Google API,设置所需的 Identity and Access Management (IAM) 权限,以及更新您的集群。如《多项目安装指南》中的设置项目设置集群部分所述,如果您愿意,您可以在运行脚本之前自行更新项目和集群。所有这些标志都与 --only_validate 不兼容,在这种情况下,脚本将终止并返回错误。

-e|--enable_all
允许脚本执行下文介绍的所有各项启用操作。
--enable_cluster_roles
允许脚本尝试将运行脚本的 GCP 用户或服务账号绑定到集群上的 cluster-admin 角色。脚本根据 gcloud config get-value core/account 命令确定用户账号。如果您使用用户账号在本地运行脚本,请确保在运行脚本之前调用 gcloud auth login 命令。如果您需要更改用户账号,请运行 gcloud config set core/account GCP_EMAIL_ADDRESS 命令,其中 GCP_EMAIL_ADDRESS 是您用于登录 Google Cloud 的账号。
--enable_cluster_labels
允许脚本设置所需的集群标签
--enable_gcp_components

允许脚本启用以下所需的 Google Cloud 代管式服务和组件:

--enable_gcp_apis

允许脚本启用所有所需的 Google API

--enable_gcp_iam_roles

允许脚本设置所需的 IAM 权限

--enable_registration

允许脚本将集群注册到集群所属的项目。如果您未包含此标志,请按照注册集群中的步骤手动注册集群。请注意,与其他启用标志不同,当您指定需要集群注册的选项(例如 --option vm--option hub-meshca)时,--enable_registration 才会包含在 --enable_all 中。否则,您需要单独指定此标志。

其他标志

--dry_run
输出命令,但不执行这些命令。
--only_validate
运行验证,但不更新项目或集群,并且不安装 Anthos Service Mesh。此标志与启用标志不兼容。如果您使用任何启用标志指定 --only_validate,脚本会终止并显示错误。
--print_config
请将所有已编译的 YAML 输出到标准输出 (stdout),而不是安装 Anthos Service Mesh。所有其他输出都会写入标准错误 (stderr),即使它通常会转到 stdout 也是如此。当您指定此标志时,该脚本会跳过所有验证和设置操作。
--disable_canonical_service
默认情况下,该脚本会将规范化服务控制器部署到您的集群。如果您不希望脚本部署该控制器,请指定 --disable_canonical_service。如需了解详情,请参阅启用和停用规范化服务控制器
-h|--help
显示描述选项和标志的帮助消息并退出。
-v|--verbose
在脚本运行时,如果输出命令,则接下来将运行。使用 --verbose 标志时,脚本还会在执行后输出该命令。
--version
打印 install_asm 版本并退出。如果命令未输出版本,请下载最新版本的 install_asm_1.10

了解脚本

虽然您可以从安全的 Cloud Source Repositories 位置下载该脚本,但 GitHub 上也提供了该脚本,因此您可以在下载前查看它所执行的操作。脚本会验证您的项目和集群是否满足 Anthos Service Mesh 要求,并且会自动执行您配置项目和集群时将手动执行的所有步骤,然后使用 istioctl install 命令安装 Anthos Service Mesh。

通过 Anthos Service Mesh 1.10.6,您可以在 release-1.10-asm 分支上使用 install_asm 脚本的版本。如需查看版本控制和发布流程的说明,请参阅版本控制/发布

验证

validate_dependencies() {
  validate_node_pool
  validate_k8s
  validate_expected_control_plane

  if [[ "${MODE}" = "migrate" ]]; then
    validate_istio_version
  elif [[ "${MODE}" = "upgrade" ]]; then
    validate_asm_version
    validate_ca_consistency
  fi
}

install_asm 脚本会验证以下信息:

  • 作为参数值输入的项目 ID、集群名称和集群位置是否有效。
  • 集群是否满足机器类型和节点数的最低要求

设置项目

所需的角色

如果您已添加 --enable_all--enable_gcp_iam_roles 标志,脚本会设置所需的 IAM 权限

required_iam_roles() {
  # meshconfig.admin - required for init, stackdriver, UI elements, etc.
  # servicemanagement.admin/serviceusage.serviceUsageAdmin - enables APIs
  if can_modify_gcp_components || \
     can_modify_cluster_labels || \
     can_modify_cluster_roles; then
    echo roles/container.admin
  fi
  if can_modify_gcp_components; then
    echo roles/meshconfig.admin
  fi
  if can_modify_gcp_apis; then
    echo roles/servicemanagement.admin
    echo roles/serviceusage.serviceUsageAdmin
  fi
  if can_modify_gcp_iam_roles; then
    echo roles/resourcemanager.projectIamAdmin
  fi
  if is_sa; then
    echo roles/iam.serviceAccountAdmin
  fi
  if can_register_cluster; then
    echo roles/gkehub.admin
  fi
  if [[ "${CA}" = "gcp_cas" ]]; then
    echo roles/privateca.admin
  fi
  if [[ "${_CI_I_AM_A_TEST_ROBOT}" -eq 1 ]]; then
    echo roles/compute.admin
    echo roles/iam.serviceAccountKeyAdmin
  fi
}

所需的 Google API

如果您已添加 --enable_all--enable_apis 标志,脚本会启用所需的 APIS:

required_apis() {
    cat << EOF
container.googleapis.com
monitoring.googleapis.com
logging.googleapis.com
cloudtrace.googleapis.com
meshtelemetry.googleapis.com
meshconfig.googleapis.com
iamcredentials.googleapis.com
gkeconnect.googleapis.com
gkehub.googleapis.com
cloudresourcemanager.googleapis.com
stackdriver.googleapis.com
EOF
  case "${CA}" in
   mesh_ca)
     echo meshca.googleapis.com
     ;;
   gcp_cas)
     echo privateca.googleapis.com
     ;;
    *);;
  esac

  if [[ "${_CI_I_AM_A_TEST_ROBOT}" -eq 1 ]]; then
    echo compute.googleapis.com
  fi
}

设置集群

如果您已添加 --enable_all 标志,或下列更精细的启用标志之一,则脚本会对集群进行以下更新:

集群更新 标志
启用 Workload Identity,使 GKE 应用能够安全地访问 Google Cloud 服务。 --enable_gcp_components
启用 GKE 上的 Cloud Monitoring 和 Cloud Logging。 --enable_gcp_components
在集群上设置 mesh_id 标签,该标签对于要在 Google Cloud 控制台中的 Anthos Service Mesh 页面上显示的指标必不可少。 --enable_cluster_labels
设置像 asmv=asm-1106-2 这样的标签,以分辨脚本是否已修改集群。 --enable_cluster_labels
将运行脚本的 GCP 用户或服务账号绑定到集群上的“集群管理员”角色。 --enable_cluster_roles

后续步骤