安装 Anthos Service Mesh
本页面介绍如何在 GKE 及本地平台上安装 Anthos Service Mesh:
- 运行
asmcli
以全新安装 Anthos Service Mesh 1.15.7-asm.23。 - (可选)部署入站流量网关。
- 部署或重新部署工作负载以注入 Sidecar 代理。
限制
请注意以下限制:
一个网格的所有 Anthos Service Mesh 集群必须始终注册到同一舰队,才能使用 Anthos Service Mesh。Anthos Service Mesh 集群的项目中的其他集群不得注册到其他舰队。
asmcli
工具必须有权访问 Google Kubernetes Engine (GKE) 端点。您可以通过“跳转”服务器(例如提供特定访问权限的 Virtual Private Cloud [VPC] 中的 Compute Engine 虚拟机)配置访问权限。
准备工作
开始之前,请确保执行以下操作:
安装 Anthos Service Mesh
以下内容概述了如何安装 Anthos Service Mesh:
运行
asmcli install
以在单个集群上安装集群内控制层面。有关命令行示例,请参阅以下部分。这些示例同时包含必需参数和可能很有用的可选参数。我们建议您始终指定output_dir
参数,以便轻松找到示例网关和istioctl
等工具。请在右侧的导航栏中查看示例列表。专用 GKE 集群需要额外的防火墙配置步骤来允许流量访问
istiod
。(可选)安装入站流量网关。默认情况下,
asmcli
不会安装istio-ingressgateway
。我们建议您单独部署和管理控制平面和网关。如果您需要随集群内控制层面安装的默认istio-ingressgateway
,请添加--option legacy-default-ingressgateway
参数。要完成 Anthos Service Mesh 的设置,您需要启用自动 Sidecar 注入并部署或重新部署工作负载。
如果要在多个集群上安装 Anthos Service Mesh,请在每个集群上运行
asmcli install
。运行asmcli install
时,请务必为每个集群使用相同的FLEET_PROJECT_ID
。安装 Anthos Service Mesh 后,请参阅在 GKE 上或在 Google Cloud 之外设置多集群网格的说明。如果您的集群位于不同的网络(如处于孤岛模式时),您应该使用
--network_id
标志将唯一的网络名称传递给asmcli
。
安装默认功能和 Mesh CA
本部分介绍如何运行 asmcli
以使用默认平台支持的功能安装 Anthos Service Mesh,并启用 Anthos Service Mesh 证书授权机构 (Mesh CA) 作为证书授权。
GKE
运行以下命令以使用默认功能和 Mesh CA 安装控制层面。在提供的占位符中输入值。
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca mesh_ca
--project_id
、--cluster_name
和--cluster_location
指定集群所在的项目 ID、集群名称以及集群区域或地区。--fleet_id
:队列宿主项目的项目 ID。如果您未包含此选项,则asmcli
会使用注册集群时在其中创建集群的项目。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
--ca mesh_ca
使用 Mesh CA 作为证书授权机构。asmcli
将 Mesh CA 配置为使用机群工作负载身份
本地
在 GKE on VMware 或 Google Distributed Cloud Virtual for Bare Metal 上运行以下命令,以使用默认功能和 Mesh CA 安装控制平面。在提供的占位符中输入值。
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca mesh_ca
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
--ca mesh_ca
使用 Mesh CA 作为证书授权机构。asmcli
将 Mesh CA 配置为使用机群工作负载身份
如需在 Anthos Service Mesh 界面中查看 SLO 和基础架构指标,您还必须执行启用应用日志记录和监控部分中的前三个步骤。如果未启用日志记录和监控功能且不接收自定义日志和指标,则 Anthos Service Mesh 信息中心不会显示 SLO、错误日志或 CPU 和内存指标。
安装默认功能和证书授权机构 (CA) 服务
本部分介绍如何运行 asmcli
来安装 Anthos Service Mesh(具有适用于您平台的默认支持功能),并启用 CA Service 作为证书授权机构。
除 Mesh CA 以外,您也可以将 Anthos Service Mesh 配置为使用 Certificate Authority Service。本指南提供了与 CA Service 集成的机会,建议用于以下使用场景:
- 您需要不同的证书授权机构对不同集群上的工作负载证书签名。
- 您需要使用
istiod
自定义 CA 插件证书。 - 您需要将签名密钥备份到代管式 HSM 中。
- 您从事的要是严格监管的行业,且需要遵守法规。
- 您需要将 Anthos Service Mesh CA 链接到自定义企业根证书来为工作负载证书签名。
Mesh CA 的费用包含在 Anthos Service Mesh 价格中。CA Service 不包含在 Anthos Service Mesh 基础价格中,而是单独计费。此外,CA Service 附带显式 SLA,但 Mesh CA 没有。
对于此集成,Anthos Service Mesh 中的所有工作负载都被授予 IAM 角色:
privateca.workloadCertificateRequester
privateca.auditor
privateca.template
(如果使用证书模板则必须提供)
配置 CA Service
- 在层级
DevOps
中创建 CA 池,并且与其服务的集群位于同一区域,以避免延迟时间过长问题或潜在的跨区域服务中断。如需了解详情,请参阅工作负载优化的层级。 - 创建 CA,从而保证在 GKE 集群所在项目内,该 CA 池中至少有一个活跃的证书授权机构。使用从属 CA 对 Anthos Service Mesh 工作负载证书签名。记下与从属 CA 对应的 CA 池。
如果您希望它仅为 Anthos Service Mesh 工作负载提供证书,请为 CA 池设置以下颁发政策:
policy.yaml
baselineValues: keyUsage: baseKeyUsage: digitalSignature: true keyEncipherment: true extendedKeyUsage: serverAuth: true clientAuth: true caOptions: isCa: false identityConstraints: allowSubjectPassthrough: false allowSubjectAltNamesPassthrough: true celExpression: expression: subject_alt_names.all(san, san.type == URI && san.value.startsWith("spiffe://PROJECT_ID.svc.id.goog/ns/") )
要更新 CA 池的颁发政策,请使用以下命令:
gcloud privateca pools update CA_POOL --location ca_region --issuance-policy policy.yaml
如需了解如何对池设置政策,请参阅使用证书颁发政策。
如果您使用的是证书模板,请立即配置。如需了解详情,请按照 CA 服务指南获取工作负载身份证书。确保在 CA 池所在的区域中创建证书模板。如果 CA 池有多个区域,则每个区域创建一个证书模板。
将 Anthos Service Mesh 配置为使用 CA Service
GKE
安装将 Certificate Authority Service 用作 CA 的 Anthos Service Mesh 控制层面:
./asmcli install \ --project_id PROJECT_ID \ --cluster_name CLUSTER_NAME \ --cluster_location CLUSTER_LOCATION \ --enable_all \ --ca gcp_cas \ --ca_pool projects/CA_POOL_PROJECT_ID/locations/ca_region/caPools/CA_POOL
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
--ca gcp_cas
使用 Certificate Authority Service 作为证书授权机构。在升级期间更改证书授权机构会导致停机。asmcli
将 Certificate Authority Service 配置为使用舰队工作负载身份--ca_pool
Certificate Authority Service CA 池的完整标识符。 如果使用证书模板,请附加以:
分隔的模板 ID。--ca_pool projects/CA_POOL_PROJECT_ID/locations/ca_region/caPools/CA_POOL:projects/CA_POOL_PROJECT_ID/locations/ca_region/certificateTemplates/CERT_TEMPLATE_ID
安装入站流量网关以接收传入或传出 HTTP/TCP 连接。如需了解详情,请参阅安装网关。
完成 Anthos Service Mesh 安装,以在工作负载上启用自动边车代理注入。如需了解详情,请参阅部署和重新部署工作负载。
本地
在 GKE on VMware 或 Google Distributed Cloud Virtual for Bare Metal 上运行以下命令,以使用默认功能和 Certificate Authority Service 安装控制平面。在提供的占位符中输入值。
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
:./asmcli install \ --kubeconfig KUBECONFIG_FILE \ --fleet_id FLEET_PROJECT_ID \ --output_dir DIR_PATH \ --enable_all \ --ca gcp_cas \ --platform multicloud \ --ca_pool projects/CA_POOL_PROJECT_ID/locations/ca_region/caPools/CA_POOL
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
--ca gcp_cas
使用 Certificate Authority Service 作为证书授权机构。在升级期间更改证书授权机构会导致停机。asmcli
将 Certificate Authority Service 配置为使用舰队工作负载身份--ca_pool
Certificate Authority Service CA 池的完整标识符。 如果您使用的是证书模板,请附加以:
分隔的模板 ID。例如:--ca_pool projects/CA_POOL_PROJECT_ID/locations/ca_region/caPools/CA_POOL:projects/CA_POOL_PROJECT_ID/locations/ca_region/certificateTemplates/CERT_TEMPLATE_ID
如需在 Anthos Service Mesh 界面中查看 SLO 和基础架构指标,您还必须执行启用应用日志记录和监控部分中的前三个步骤。如果未启用日志记录和监控功能且不接收自定义日志和指标,则 Anthos Service Mesh 信息中心不会显示 SLO、错误日志或 CPU 和内存指标。
使用 Istio CA 安装默认功能
本节介绍如何执行以下操作:
- 为 Anthos Service Mesh 用于对工作负载签名的 Istio CA 生成证书和密钥。
- 运行
asmcli
以安装具有默认功能的 Anthos Service Mesh 并启用 Istio CA。
默认情况下,安装使用 Istio CA 的 Anthos Service Mesh 的环境会向 Prometheus 报告指标。如果您想使用 Anthos Service Mesh 信息中心,则必须启用 Stackdriver。如需了解详情,请参阅使用可选功能安装。
为了获得最佳安全性,我们强烈建议您维护离线根 CA,并使用从属 CA 为每个集群颁发证书。如需了解详情,请参阅插入 CA 证书。在此配置中,服务网格中的所有工作负载都将使用相同的根证书授权机构 (CA)。每个 Anthos Service Mesh CA 使用中间 CA 签名密钥和证书(由根 CA 签名)。当网格中存在多个 CA 时,这会建立 CA 间的信任层次结构。您可以重复这些步骤,为任意数量的证书授权机构预配证书和密钥。
用于生成证书的 Makefile 位于您通过 asmcli validate
命令指定的 --output_dir
目录中的 istio-1.15.7-asm.23
子目录内。如果您未运行 asmcli validate
,或者您没有本地下载目录,则可以通过下载 Anthos Service Mesh 安装文件并提取其内容来获取 Makefile。
切换到
istio-1.15.7-asm.23
目录:为证书和密钥创建一个目录:
mkdir -p certs && \ pushd certs
生成根证书和密钥:
make -f ../tools/certs/Makefile.selfsigned.mk root-ca
这会生成以下文件:
- root-cert.pem:根证书
- root-key.pem:根密钥
- root-ca.conf:openssl 用于生成根证书的配置
- root-cert.csr:根证书的 CSR
生成中间证书和密钥:
make -f ../tools/certs/Makefile.selfsigned.mk cluster1-cacerts
此操作会在名为
cluster1
的目录中生成以下文件:- ca-cert.pem:中间证书
- ca-key.pem:中间密钥
- cert-chain.pem:
istiod
使用的证书链 - root-cert.pem:根证书
如果您使用离线计算机执行这些步骤,请将生成的目录复制到有权访问集群的计算机。
返回上一个目录:
popd
运行
asmcli
以使用 Istio CA 安装网格:GKE
运行以下命令以使用默认功能和 Istio CA 安装控制层面。在提供的占位符中输入值。
./asmcli install \ --project_id PROJECT_ID \ --cluster_name CLUSTER_NAME \ --cluster_location CLUSTER_LOCATION \ --fleet_id FLEET_PROJECT_ID \ --output_dir DIR_PATH \ --enable_all \ --ca citadel \ --ca_cert CA_CERT_FILE_PATH \ --ca_key CA_KEY_FILE_PATH \ --root_cert ROOT_CERT_FILE_PATH \ --cert_chain CERT_CHAIN_FILE_PATH
--project_id
、--cluster_name
和--cluster_location
指定集群所在的项目 ID、集群名称以及集群区域或地区。--fleet_id
:队列宿主项目的项目 ID。如果您未包含此选项,则asmcli
会使用注册集群时在其中创建集群的项目。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书--ca_key
:中间证书的密钥--root_cert
:根证书--cert_chain
:证书链
本地
在 GKE on VMware 或 Google Distributed Cloud Virtual for Bare Metal 上运行以下命令,以使用默认功能和 Istio CA 安装控制平面。在提供的占位符中输入值。
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert CA_CERT_FILE_PATH \ --ca_key CA_KEY_FILE_PATH \ --root_cert ROOT_CERT_FILE_PATH \ --cert_chain CERT_CHAIN_FILE_PATH
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书--ca_key
:中间证书的密钥--root_cert
:根证书--cert_chain
:证书链
AWS
在 GKE on AWS 上运行以下命令,以使用默认功能和 Istio CA 安装控制平面。在提供的占位符中输入值。您可以选择为公共子网或专用子网启用 Ingress。
公有云
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert CA_CERT_FILE_PATH \ --ca_key CA_KEY_FILE_PATH \ --root_cert ROOT_CERT_FILE_PATH \ --cert_chain CERT_CHAIN_FILE_PATH
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书。--ca_key
:中间证书的密钥。--root_cert
:根证书。--cert_chain
:证书链
专用
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
将以下 YAML 保存到名为
istio-operator-internal-lb.yaml
的文件:apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: components: ingressGateways: - enabled: true k8s: serviceAnnotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" name: istio-ingressgateway
运行
asmcli install
:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH \ --custom_overlay istio-operator-internal-lb.yaml
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书。--ca_key
:中间证书的密钥。--root_cert
:根证书。--cert_chain
:证书链--custom_overlay
:创建的叠加文件的名称。如需详细了解叠加文件,请参阅在集群内控制层面上启用可选功能。
Amazon EKS
在 Amazon EKS 上运行以下命令,以使用默认功能和 Istio CA 安装控制层面。在提供的占位符中输入值。
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert CA_CERT_FILE_PATH \ --ca_key CA_KEY_FILE_PATH \ --root_cert ROOT_CERT_FILE_PATH \ --cert_chain CERT_CHAIN_FILE_PATH
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书--ca_key
:中间证书的密钥--root_cert
:根证书--cert_chain
:证书链
Microsoft AKS
在 Microsoft AKS 上运行以下命令,以使用默认功能和 Istio CA 安装控制层面。在提供的占位符中输入值。
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
:HUB_REGISTRATION_EXTRA_FLAGS=--has-private-issuer ./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert CA_CERT_FILE_PATH \ --ca_key CA_KEY_FILE_PATH \ --root_cert ROOT_CERT_FILE_PATH \ --cert_chain CERT_CHAIN_FILE_PATH
HUB_REGISTRATION_EXTRA_FLAGS=--has-private-issuer
允许向 GKE Hub 注册。--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书--ca_key
:中间证书的密钥--root_cert
:根证书--cert_chain
:证书链
使用启用了 Google Cloud Observability 的 Istio CA 进行安装
如果您想使用 Anthos Service Mesh 信息中心,则必须启用 Stackdriver。
GKE
运行以下命令以使用默认功能和 Istio CA 安装控制平面。在提供的占位符中输入值。
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca citadel \
--ca_cert CA_CERT_FILE_PATH \
--ca_key CA_KEY_FILE_PATH \
--root_cert ROOT_CERT_FILE_PATH \
--cert_chain CERT_CHAIN_FILE_PATH
--project_id
、--cluster_name
和--cluster_location
指定集群所在的项目 ID、集群名称以及集群区域或地区。--fleet_id
:队列宿主项目的项目 ID。如果您未包含此选项,则asmcli
会使用注册集群时在其中创建集群的项目。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书--ca_key
:中间证书的密钥--root_cert
:根证书--cert_chain
:证书链--option stackdriver
:启用 Stackdriver 选项。请注意,您还可以使用--option prometheus-and-stackdriver
启用 Stackdriver 和 Prometheus。
本地
在 GKE on VMware 或 Google Distributed Cloud Virtual for Bare Metal 上运行以下命令,以使用 Stackdriver、其他可选功能和 Istio CA 安装控制平面。在提供的占位符中输入值。
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert CA_CERT_FILE_PATH \ --ca_key CA_KEY_FILE_PATH \ --root_cert ROOT_CERT_FILE_PATH \ --cert_chain CERT_CHAIN_FILE_PATH
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书--ca_key
:中间证书的密钥--root_cert
:根证书--cert_chain
:证书链--option stackdriver
:启用 Stackdriver 选项。请注意,您还可以使用--option prometheus-and-stackdriver
启用 Stackdriver 和 Prometheus。
如需在 Anthos Service Mesh 界面中查看 SLO 和基础架构指标,您还必须执行启用应用日志记录和监控部分中的前三个步骤。如果未启用日志记录和监控功能且不接收自定义日志和指标,则 Anthos Service Mesh 信息中心不会显示 SLO、错误日志或 CPU 和内存指标。
AWS
在 GKE on AWS 上运行以下命令,以使用 Stackdriver、其他可选功能和 Istio CA 安装控制平面。在提供的占位符中输入值。您可以选择为公共子网或专用子网启用 Ingress。
公有云
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert CA_CERT_FILE_PATH \ --ca_key CA_KEY_FILE_PATH \ --root_cert ROOT_CERT_FILE_PATH \ --cert_chain CERT_CHAIN_FILE_PATH \ --option stackdriver
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书。--ca_key
:中间证书的密钥。--root_cert
:根证书。--cert_chain
:证书链--option stackdriver
:启用 Stackdriver 选项。请注意,您还可以使用--option prometheus-and-stackdriver
启用 Stackdriver 和 Prometheus。
专用
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
将以下 YAML 保存到名为
istio-operator-internal-lb.yaml
的文件:apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: components: ingressGateways: - enabled: true k8s: serviceAnnotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" name: istio-ingressgateway
运行
asmcli install
:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH --custom_overlay istio-operator-internal-lb.yaml \ --option stackdriver
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书。--ca_key
:中间证书的密钥。--root_cert
:根证书。--cert_chain
:证书链--custom_overlay
:创建的叠加文件的名称。如需详细了解叠加文件,请参阅在集群内控制层面上启用可选功能--option stackdriver
:启用 Stackdriver 选项。请注意,您还可以使用--option prometheus-and-stackdriver
启用 Stackdriver 和 Prometheus。 或者,您可以使用--custom_overlay stackdriver.yaml
启用 Stackdriver。您必须下载 anthos-service-mesh-package,或者从提供的清单中创建stackdriver.yaml
。
Amazon EKS
在 Amazon EKS 上运行以下命令,使用 Stackdriver、其他可选功能和 Istio CA 安装控制层面。在提供的占位符中输入值。
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert CA_CERT_FILE_PATH \ --ca_key CA_KEY_FILE_PATH \ --root_cert ROOT_CERT_FILE_PATH \ --cert_chain CERT_CHAIN_FILE_PATH \ --option stackdriver
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书--ca_key
:中间证书的密钥--root_cert
:根证书--cert_chain
:证书链--option stackdriver
:启用 Stackdriver 选项。请注意,您还可以使用--option prometheus-and-stackdriver
启用 Stackdriver 和 Prometheus。
Microsoft AKS
在 Microsoft AKS 上运行以下命令,以使用默认功能和 Istio CA 安装控制层面。在提供的占位符中输入值。
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
:HUB_REGISTRATION_EXTRA_FLAGS=--has-private-issuer ./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert CA_CERT_FILE_PATH \ --ca_key CA_KEY_FILE_PATH \ --root_cert ROOT_CERT_FILE_PATH \ --cert_chain CERT_CHAIN_FILE_PATH \ --option stackdriver
HUB_REGISTRATION_EXTRA_FLAGS=--has-private-issuer
允许向 GKE Hub 注册。--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
-ca citadel
将 Istio CA 用作证书授权机构。--ca_cert
:中间证书--ca_key
:中间证书的密钥--root_cert
:根证书--cert_chain
:证书链--option stackdriver
:启用 Stackdriver 选项。请注意,您还可以使用--option prometheus-and-stackdriver
启用 Stackdriver 和 Prometheus。
安装(包含可选功能)
叠加文件是一个 YAML 文件,其中包含您传递给 asmcli
以配置控制平面的 IstioOperator
自定义资源 (CR)。您可以替换默认控制平面配置,并通过将 YAML 文件传递给 asmcli
来启用可选功能。您可以叠加多个文件,每个叠加文件会覆盖之前各层的配置。 我们建议的最佳做法是将叠加文件保存在您的版本控制系统中。
您可以通过以下两个选项启用可选功能:--option
和 --custom_overlay
。
如果您不需要更改叠加文件,请使用 --option
。使用此方法,asmcli
会为您从 GitHub 代码库中提取文件。
如果您需要自定义叠加层文件,请使用 --custom_overlay
。
如需了解详情,请参阅在集群内控制层面上启用可选功能。
GKE
运行以下命令以使用可选功能安装控制层面。如需添加多个文件,请指定 --custom_overlay
和文件名,例如:--custom_overlay overlay_file1.yaml
--custom_overlay overlay_file2.yaml --custom_overlay overlay_file3.yaml
。在提供的占位符中输入值。
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca mesh_ca \
--custom_overlay OVERLAY_FILE
--project_id
、--cluster_name
和--cluster_location
指定集群所在的项目 ID、集群名称以及集群区域或地区。--fleet_id
:队列宿主项目的项目 ID。如果您未包含此选项,则asmcli
会使用注册集群时在其中创建集群的项目。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
--ca mesh_ca
将 Mesh CA 用作证书授权机构。请注意,asmcli
将 Mesh CA 配置为使用队列工作负载身份--custom_overlay
指定叠加文件的名称。
Google Cloud 外部
在 GKE on VMware、Google Distributed Cloud Virtual for Bare Metal、GKE on AWS、Amazon EKS 或 Microsoft AKS 上运行以下命令。在提供的占位符中输入值。
将当前上下文设置为用户集群:
kubectl config use-context CLUSTER_NAME
运行
asmcli install
以使用可选功能安装控制层面。如需添加多个文件,请指定--custom_overlay
和文件名,例如:--custom_overlayoverlay_file1.yaml --custom_overlay overlay_file2.yaml --custom_overlay overlay_file3.yaml
./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca mesh_ca \ --custom_overlay OVERLAY_FILE
--fleet_id
:队列宿主项目的项目 ID。--kubeconfig
kubeconfig
文件的完整路径。环境变量$PWD
不适用于此处。 此外,使用“~”的相对kubeconfig
文件位置将不起作用。--output_dir
添加此选项可指定asmcli
在其中下载anthos-service-mesh
软件包并提取安装文件的目录,其中包含istioctl
、示例和清单。否则,asmcli
会将文件下载到tmp
目录。您可以指定相对路径或完整路径。环境变量$PWD
不适用于此处。--platform multicloud
指定平台是非 Google Cloud 平台,例如本地平台或多云平台。--enable_all
允许脚本执行以下操作:- 授予所需的 IAM 权限
- 启用所需的 Google API。
- 在集群上设置用于标识网格的标签。
- 如果尚未注册集群,请注册集群。
--ca mesh_ca
将 Mesh CA 用作证书授权机构。请注意,asmcli
将 Mesh CA 配置为使用舰队工作负载身份--custom_overlay
指定叠加文件的名称。
安装网关
Anthos Service Mesh 允许您将网关部署和管理为服务网格的一部分。网关描述了在网格边缘运行的负载均衡器,用于接收传入或传出 HTTP/TCP 连接。网关是 Envoy 代理,可让您精确控制进出网格的流量。
为入站流量网关创建命名空间(如果您还没有命名空间)。网关是用户工作负载,最佳做法是不应部署在控制平面命名空间中。将
GATEWAY_NAMESPACE
替换为您的命名空间名称。kubectl create namespace GATEWAY_NAMESPACE
预期输出:
namespace/GATEWAY_NAMESPACE created
在网关上启用自动注入功能。所需步骤取决于您是要在网关命名空间中使用默认注入标签(例如
istio-injection=enabled
)还是修订版本标签。Sidecar 注入器网络钩子会使用默认的修订版本标记和修订版本标签来将注入的代理与特定控制层面修订版本相关联。默认注入标签
将默认注入标签应用于命名空间。
kubectl label namespace GATEWAY_NAMESPACE istio-injection=enabled istio.io/rev-
修订版本标签
使用以下命令查找
istiod
的修订版本标签:kubectl get deploy -n istio-system -l app=istiod -o \ "jsonpath={.items[*].metadata.labels['istio\.io/rev']}{'\n'}"
该命令会输出与 Anthos Service Mesh 版本对应的修订版本标签,例如:
asm-1157-23
将修订版本标签应用于命名空间。在以下命令中,
REVISION
是您在上一步中记下的istiod
修订版本标签的值。kubectl label namespace GATEWAY_NAMESPACE \ istio.io/rev=REVISION --overwrite
预期输出:
namespace/GATEWAY_NAMESPACE labeled
您可以忽略输出中的
"istio.io/rev" not found
消息。这意味着命名空间之前没有istio.io/rev
标签,对于 Anthos Service Mesh 的新安装或新部署,这是预期现象。如果命名空间同时具有istio.io/rev
和istio-injection
标签,自动注入将失败,因此 Anthos Service Mesh 文档中的所有kubectl label
命令都会明确指定这两个标签。如果网关命名空间未添加标签,则在网关尝试拉取
auto
映像时,istio-ingressgateway
Pod 将失败并显示ImagePullBackOff
错误。此映像应替换为 webhook。从
anthos-service-mesh-packages
代码库下载示例入站流量网关 .yaml 配置文件。按原样应用示例入站流量网关 .yaml 配置,或根据需要进行修改。
kubectl apply -n GATEWAY_NAMESPACE \ -f CONFIG_PATH/istio-ingressgateway
预期输出:
deployment.apps/istio-ingressgateway created poddisruptionbudget.policy/istio-ingressgateway created horizontalpodautoscaler.autoscaling/istio-ingressgateway created role.rbac.authorization.k8s.io/istio-ingressgateway created rolebinding.rbac.authorization.k8s.io/istio-ingressgateway created service/istio-ingressgateway created serviceaccount/istio-ingressgateway created
详细了解网关的最佳做法。
部署和重新部署工作负载
Anthos Service Mesh 使用边车代理来增强网络安全性、可靠性和可观测性。借助 Anthos Service Mesh,这些功能可以从应用的主容器中抽象出来,并在作为同一 Pod 中单独的容器提供的常见进程外代理中实现。
您需要启用自动边车代理注入(自动注入),并为在安装 Anthos Service Mesh 之前集群上运行的所有工作负载重启 Pod,才能完成安装。
如需启用自动注入功能,请使用默认注入标签(如果设置了默认标记)或使用安装 Anthos Service Mesh 时在 istiod
上设置的修订版本标签来为您的命名空间添加标签。Sidecar 注入器网络钩子会使用默认的修订版本标记和修订版本标签来将注入的 Sidecar 与 istiod
修订版本相关联。添加标签后,必须重启命名空间中的所有现有 Pod,才能注入 Sidecar。
在将新工作负载部署到新命名空间中之前,请先确保配置自动注入,以便 Anthos Service Mesh 能够监控和保护流量。
启用自动注入功能所需的步骤取决于您是要使用默认注入标签还是修订版本标签:
默认注入标签
在以下命令中,
NAMESPACE
是您要为其启用自动注入功能的命名空间的名称。kubectl label namespace NAMESPACE istio-injection=enabled istio.io/rev-
由于默认注入标签将注入默认标记指向的修订版本,因此无需为命名空间重新添加标签。
修订版本标签
使用以下命令查找
istiod
的修订版本标签:kubectl -n istio-system get pods -l app=istiod --show-labels
输出类似于以下内容:
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-1157-23-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-1157-23,istio=istiod,pod-template-hash=5788d57586 istiod-asm-1157-23-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-1157-23,istio=istiod,pod-template-hash=5788d57586
在输出中的
LABELS
列下,记下istiod
修订版本标签的值,该值位于前缀istio.io/rev=
之后。在此示例中,该值为asm-1157-23
。应用修订版本标签并移除
istio-injection
标签(如果存在)。在以下命令中,NAMESPACE
是您要启用自动注入的命名空间的名称,REVISION
是您在上一步中记下的修订版本标签。kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
您可以忽略输出中的
"istio-injection not found"
消息。这意味着命名空间之前没有istio-injection
标签,对于 Anthos Service Mesh 的新安装或新部署,这是预期现象。如果命名空间同时具有istio-injection
和修订版本标签,自动注入将失败,因此 Anthos Service Mesh 文档中的所有kubectl label
命令都会明确指定这两个标签。
如果在安装 Anthos Service Mesh 之前集群上已运行工作负载,请重启 pod 以触发重新注入。
如何重启 pod 取决于您的应用和集群所在的环境。例如,在预演环境中,您可能只需删除所有 pod 即可使其重启。但是,在生产环境中,您可能需要通过实现蓝绿部署流程来安全地重启 pod,以避免流量中断。
您可以使用
kubectl
执行滚动重启:kubectl rollout restart deployment -n NAMESPACE
后续步骤
了解如何设置多集群网格:
如果网格完全由 GKE 集群组成,请参阅在 GKE 上设置多集群网格。
如果网格由 Google Cloud 外部的集群组成,请参阅在 Google Cloud 外部设置多集群网格。