本指南介绍如何使用 GKE Enterprise 命令行界面 (CLI) 在现有 Google Cloud GKE 集群上执行 Anthos Service Mesh 版本 1.5.10-asm.2 全新安装。请注意,此 Beta 版 GKE Enterprise CLI 存在以下限制:
- 不支持升级。如果您的集群中已安装以前版本的 Anthos Service Mesh,请参阅在 GKE 上升级 Anthos Service Mesh。
- 不支持在 GKE on VMware 上安装。如需在现有 GKE on VMware 集群上安装 Anthos Service Mesh,请参阅在本地安装 Anthos Service Mesh。
安装会启用以下功能:
本指南还介绍了如何在与集群位于同一 Google Cloud 项目的队列中注册集群。借助队列,您可以组织集群,以简化多集群管理。通过在队列中注册集群,您可以根据需要对服务和其他基础架构进行分组,以应用一致的政策。
准备工作
开始安装之前,请执行以下操作:
- 设置您的环境。
- 安装 GKE Enterprise CLI。
- 查看以下要求和限制。
使用要求
您必须拥有 GKE Enterprise 试用许可或订阅。如需了解详情,请参阅 GKE Enterprise 价格指南。
您的 GKE 集群必须满足以下要求:
如需将服务端口纳入服务网格,必须为服务端口命名,并且名称必须包含以下语法的端口协议:
name: protocol[-suffix]
,其中方括号表示必须以短划线开头的可选后缀。 如需了解详情,请参阅命名服务端口。如果您是在专用集群上安装 Anthos Service Mesh,则必须添加防火墙规则来打开端口 15017,以使用自动 Sidecar 注入。如果您未添加防火墙规则并启用了自动 Sidecar 注入,则在部署工作负载时会收到错误。如需详细了解如何添加防火墙规则,请参阅针对特定用例添加防火墙规则。
如果您在组织中创建了服务边界,则可能需要将 Mesh CA 服务添加到边界。如需了解详情,请参阅将 Mesh CA 添加到服务边界。
限制
仅支持每个 Google Cloud 项目安装一次 Anthos Service Mesh。不支持在单个项目中进行多次网格部署。
证书数据
来自 Mesh CA 的证书包含有关应用的服务的以下数据:
- Google Cloud 项目 ID
- GKE 命名空间
- GKE 服务账号名称
设置项目和集群默认值
获取在其中创建集群的项目的项目 ID:
gcloud
gcloud projects list
控制台
在 Google Cloud 控制台中,前往信息中心页面:
点击页面顶部的从以下列表中选择:下拉列表。在随即显示的从以下列表中选择:窗口中,选择您的项目。项目 ID 会显示在项目信息中心的项目信息卡片上。
为项目 ID 创建环境变量:
export PROJECT_ID=
YOUR_PROJECT_ID
设置 Google Cloud CLI 的默认项目 ID:
gcloud config set project ${PROJECT_ID}
创建以下环境变量:
设置集群名称:
export CLUSTER_NAME=YOUR_CLUSTER_NAME
将
CLUSTER_LOCATION
设置为您的集群区域或集群地区:export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
为 Google Cloud CLI 设置默认可用区或区域。
如果您有一个单可用区集群,请设置默认可用区:
gcloud config set compute/zone ${CLUSTER_LOCATION}
如果您有一个地区集群,请设置默认地区:
gcloud config set compute/region ${CLUSTER_LOCATION}
准备资源配置文件
您可以使用 GKE Enterprise CLI 和 kustomize
导出和修补 Config Connector 资源文件,这些文件用于使用 Anthos Service Mesh 所需的选项更新现有集群。Config Connector 资源是以 Kubernetes 表示 Google Cloud 资源。
导出资源配置文件
您可以使用 gcloud beta anthos export
命令输出现有集群的资源配置文件。
为 Anthos Service Mesh 资源创建一个目录。为方便起见,以下步骤将您创建的目录指定为 ASM_RESOURCES。
切换到 ASM_RESOURCES 目录:
将
asm-patch
软件包下载到当前工作目录:kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm-patch@release-1.5-asm .
该命令会创建一个名为
asm-patch/
的子目录。在名为
BASE_DIR
的环境变量中添加目录名称。当您对现有集群运行gcloud beta anthos export
命令时,GKE Enterprise CLI 会采用在BASE_DIR
中指定的名称创建一个目录,并将 Config Connector 资源文件输出到该目录中。export BASE_DIR=YOUR_BASE_DIR
如果要设置多个集群,我们建议您使用集群名称作为目录名称。例如,如果要为两个集群准备资源配置文件,在您针对
cluster-1
和cluster-2
运行gcloud beta anthos export
命令后,您的目录结构应类似于如下所示:在该图中,
cluster-1
和cluster-2
这两个目录包含名为cluster-1
和cluster-2
的集群的 Config Connector 资源配置文件。导出 Config Connector 资源配置文件:
gcloud beta anthos export ${CLUSTER_NAME} --output-directory ${BASE_DIR}
export
命令会在集群的资源配置文件中填充项目 ID 和集群区域/地区,以与当前gcloud config
设置相匹配。如果要导出与当前gcloud config
设置不匹配的集群的资源配置文件,您可以指定以下命令行选项:-p PROJECT_ID
-l YOUR_ZONE_OR_REGION
如需了解详情,请查看
gcloud beta anthos export --help
。
修补资源配置文件
您可以使用 GKE Enterprise kpt
setter 和 kustomize
来更新资源配置文件。
列出
asm-patch
软件包中的可用配置 setter:kpt cfg list-setters asm-patch/
输出类似于以下内容:
NAME VALUE SET BY DESCRIPTION COUNT base-dir base 1 gcloud.compute.location your_zone_or_region 1 gcloud.container.cluster your_cluster_name 3 gcloud.core.project your_project_id kpt 11 gcloud.project.projectNumber your_project_number kpt 1
设置
${BASE_DIR}
和asm-patch
目录之间的相对路径:kpt cfg set asm-patch/ base-dir ../${BASE_DIR}
设置集群名称:
kpt cfg set asm-patch/ gcloud.container.cluster ${CLUSTER_NAME}
如果您尚未设置
gcloud config
默认值,或者想要更改值,请运行以下 setter:kpt cfg set asm-patch/ gcloud.compute.location ${CLUSTER_LOCATION}
kpt cfg set asm-patch/ gcloud.core.project ${PROJECT_ID}
将 Anthos Service Mesh 补丁程序应用于集群资源配置文件:
pushd ${BASE_DIR} && kustomize create --autodetect \ --namespace ${PROJECT_ID} && popd
pushd asm-patch && kustomize build -o ../${BASE_DIR}/all.yaml && popd
验证最终资源配置:
kpt fn source ${BASE_DIR} | kpt fn run --image gcr.io/kustomize-functions/validate-asm:v0.1.0
如果出现任何错误,请更正错误,然后再次验证资源配置。
(可选)您可以将资源配置文件签入到您自己的源代码控制系统(例如 Cloud Source Repositories),以便您可以跟踪这些文件的更改。
更新集群并安装 Anthos Service Mesh
GKE Enterprise CLI 会使用 Anthos Service Mesh 所需的以下选项更新集群:
以
proj-PROJECT_NUMBER
格式向集群添加mesh_id
标签,其中PROJECT_NUMBER
是在其中创建集群的项目的编号。mesh_id
标签对于在 Google Cloud 控制台中的 Anthos Service Mesh 信息中心上显示指标是必需的。如果您的集群已有标签,GKE Enterprise CLI 会保留这些标签。在发布版本概览中注册集群。
运行以下命令可更新集群并安装 Anthos Service Mesh:
gcloud beta anthos apply ${BASE_DIR}
该命令会使用所需选项更新集群,然后部署 Anthos Service Mesh。此过程大约需要 30 分钟才能完成。
检查控制层面组件
检查 istio-system
中的控制层面 Pod 是否已启动:
kubectl get pod -n istio-system
预期输出如下所示:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-74cc894bfd-786rg 1/1 Running 0 7m19s istiod-78cdbbbdb-d7tps 1/1 Running 0 7m36s promsd-576b8db4d6-lqf64 2/2 Running 1 7m19s
注册您的集群
您必须向项目的队列注册集群,才能获取对 Google Cloud 控制台中的统一界面的访问权限。队列提供一种统一方法来查看和管理集群及其工作负载,包括 Google Cloud 之外的集群。
创建 Google Cloud 服务账号和密钥文件
必须提供包含服务账号凭据的 JSON 文件才能注册集群。为遵循最小权限原则,我们建议您为注册的每个集群创建不同的服务账号。
如需创建服务账号和密钥文件,请执行以下操作:
为服务账号选择一个名称并为其创建环境变量:
export SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
创建服务账号:
gcloud iam service-accounts create ${SERVICE_ACCOUNT_NAME}
列出项目的所有服务账号以确认服务账号已创建:
gcloud iam service-accounts list
将 gkehub.connect IAM 角色绑定到服务账号:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/gkehub.connect"
为您要保存 JSON 文件的本地文件路径创建环境变量。我们建议您使用服务账号名称和项目 ID 命名文件,例如:
/tmp/creds/${SERVICE_ACCOUNT_NAME}-${PROJECT_ID}.json
export SERVICE_ACCOUNT_KEY_PATH=LOCAL_KEY_PATH
下载服务账号的私钥 JSON 文件:
gcloud iam service-accounts keys create ${SERVICE_ACCOUNT_KEY_PATH} \ --iam-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
注册集群
在以下命令中,将 MEMBERSHIP_NAME
替换为一个唯一表示要在 Hub 中注册的集群的名称。
gcloud container hub memberships register MEMBERSHIP_NAME \ --gke-cluster=${CLUSTER_LOCATION}/${CLUSTER_NAME} \ --service-account-key-file=${SERVICE_ACCOUNT_KEY_PATH}
该命令会返回如下输出:
kubeconfig entry generated for CLUSTER_NAME. Waiting for membership to be created...done. Created a new membership [projects/PROJECT_ID/locations/global/memberships/MEMBERSHIP_NAME] for the cluster [MEMBERSHIP_NAME] Generating the Connect Agent manifest... Deploying the Connect Agent on cluster [MEMBERSHIP_NAME] in namespace [gke-connect]... Deployed the Connect Agent on cluster [MEMBERSHIP_NAME] in namespace [gke-connect]. Finished registering the cluster [MEMBERSHIP_NAME] with the Hub.
此服务账号密钥作为 Secret(名为 creds-gcp
)存储在 gke-connect
命名空间中。
如需详细了解集群注册,请参阅 Connect 文档中的注册集群。
注入 Sidecar 代理
Anthos Service Mesh 使用边车代理来增强网络安全性、可靠性和可观测性。借助 Anthos Service Mesh,这些功能可以从应用的主容器中抽象出来,并在作为同一 Pod 中单独的容器提供的常见进程外代理中实现。
在安装 Anthos Service Mesh 之前在集群上运行的任何工作负载都需要注入或更新边车代理,以使其具有当前的 Anthos Service Mesh 版本。在部署新工作负载之前,确保配置边车代理注入,以便 Anthos Service Mesh 可以监控并保护流量。您可以使用一个命令启用自动 Sidecar 注入,例如:
kubectl label namespace NAMESPACE istio-injection=enabled --overwrite
其中,NAMESPACE
是应用服务的命名空间的名称;如果未显式创建命名空间,则为 default
。
如需了解详情,请参阅注入 Sidecar 代理。
查看 Anthos 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 的访问权限中所述的限制性更强的角色。
在 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 指标。
使用 kpt
安装示例
(可选)您可以使用 kpt
将 Hipster 示例安装到集群中。
下载示例:
kpt pkg get \ https://github.com/GoogleCloudPlatform/microservices-demo.git/release \ hipster-demo
启用自动 Sidecar 注入:
kubectl label namespace default istio-injection=enabled
将示例部署到集群:
kubectl apply -f hipster-demo
找到应用的外部 IP 地址:
kubectl get service frontend-external
使用浏览器访问应用,以确认安装:
http://EXTERNAL_IP/
现在您已在运行一个示例,接下来您可以在 Google Cloud 控制台中探索 Anthos Service Mesh 可观测性功能。请注意,拓扑图最长可能需要 10 分钟才会显示网格中的服务。
探索完毕后,移除 Hipster 示例:
kubectl delete -f hipster-demo
后续步骤
详细了解 GKE Enterprise CLI 使用的配置资源: