Anthos Service Mesh 是一种与 Istio 兼容的框架,用于连接、监控和保护在 Google Kubernetes Engine (GKE) 和 GKE on VMware 上运行的服务。它可让您创建部署服务的网络并进行负载均衡、服务到服务身份验证、监控等,无需对服务代码进行任何更改。Anthos Service Mesh 会自动为每个应用的 Pod 注入边车代理。边车代理会拦截进出 pod 的所有网络流量。Anthos Service Mesh 还配置了一个入站流量网关来管理该网格的入站流量。您可以使用开源 Istio API 来配置在辅助信息文件和网关上强制执行的政策。
本指南介绍了如何在新的 Google Cloud GKE 集群上安装 Anthos Service Mesh 版本 1.5.10。安装会启用以下功能:
本指南还介绍了如何在与集群位于同一 Google Cloud 项目的队列中注册集群。借助队列,您可以组织集群,以简化多集群管理。通过在队列中注册集群,您可以根据需要对服务和其他基础架构进行分组,以应用一致的政策。
准备工作
本指南假定您已具备:
开始安装之前,请执行以下操作:
使用要求
您必须拥有 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
-
为
gcloud
命令行工具设置默认项目 ID:gcloud config set project ${PROJECT_ID}
- 为项目编号创建环境变量:
export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")
-
设置所需的 Identity and Access Management (IAM) 角色。如果您是 Project Owner,则拥有完成安装和向 Environ 注册集群所需的所有必要权限。如果您不是 Project Owner,则需要有人授予您以下特定 IAM 角色。在以下命令中,将
GCP_EMAIL_ADDRESS
更改为您用于登录 Google Cloud 的账号。gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member user:GCP_EMAIL_ADDRESS \ --role=roles/editor \ --role=roles/compute.admin \ --role=roles/container.admin \ --role=roles/resourcemanager.projectIamAdmin \ --role=roles/iam.serviceAccountAdmin \ --role=roles/iam.serviceAccountKeyAdmin \ --role=roles/gkehub.admin
如需详细了解如何授予 IAM 角色,请参阅授予、更改和撤消对资源的访问权限。如需了解这些角色,请参阅安装 Anthos Service Mesh 所需的权限
- 启用以下 API:
gcloud services enable \ container.googleapis.com \ compute.googleapis.com \ monitoring.googleapis.com \ logging.googleapis.com \ cloudtrace.googleapis.com \ meshca.googleapis.com \ meshtelemetry.googleapis.com \ meshconfig.googleapis.com \ iamcredentials.googleapis.com \ anthos.googleapis.com \ gkeconnect.googleapis.com \ gkehub.googleapis.com \ cloudresourcemanager.googleapis.com
启用 API 可能需要 1 分钟或更长时间才能完成。启用这些 API 后,您将看到如下输出:
Operation "operations/acf.601db672-88e6-4f98-8ceb-aa3b5725533c" finished successfully.
设置新的 GKE 集群
本部分介绍使用 Anthos Service Mesh 所需的选项创建 GKE 集群的基础知识。如需了解详情,请参阅创建集群。
如需设置新集群,请执行以下操作:
为新集群选择区域或地区、机器类型和 GKE 发布版本。Anthos Service Mesh 所需的最小机器类型为 e2-standard-4e2-standard-4。您可以使用任何发布版本选项。
创建以下环境变量:
设置集群名称:
export CLUSTER_NAME=YOUR_CLUSTER_NAME
集群名称只能包含小写字母、数字和“-”,必须以字母开头,以字母数字结尾,并且不能超过 40 个字符。
将
CLUSTER_LOCATION
设置为您的集群区域或集群地区:export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
设置工作负载池:
export WORKLOAD_POOL=${PROJECT_ID}.svc.id.goog
设置网格 ID:
export MESH_ID="proj-${PROJECT_NUMBER}"
设置发布版本。将
YOUR_CHANNEL
替换为以下某个值:regular
、stable
或rapid
。export CHANNEL=YOUR_CHANNEL
如需了解每个发布版本,请参阅您可以获得哪些发布版本。
为 Google Cloud CLI 设置默认可用区或区域。
对于单区域集群,请设置默认区域:
gcloud config set compute/zone ${CLUSTER_LOCATION}
对于地区级集群,请设置默认地区:
gcloud config set compute/region ${CLUSTER_LOCATION}
提示:为了让您以后更轻松地设置 shell 环境,您可以将每个环境变量的
export
语句复制并粘贴到启动新 shell 时将对其执行source
的简单 shell 脚本。您还可以添加gcloud
命令,以将默认值设置为脚本。或者,您可以使用gcloud init
创建并激活命名的gcloud
配置。使用 Anthos Service Mesh 所需的选项创建集群。以下命令会创建一个集群,其中包含 4 个机器类型为 e2-standard-4e2-standard-4 的节点,该机器类型具有 4 个 vCPU。这是 Anthos Service Mesh 所需的最小机器类型和节点数。您可以指定其他机器类型,前提是该机器类型至少有 4 个 vCPU,并且您可以根据系统要求增加节点数。
gcloud beta container clusters create ${CLUSTER_NAME} \ --machine-type=e2-standard-4 \ --num-nodes=4 \ --workload-pool=${WORKLOAD_POOL} \ --enable-stackdriver-kubernetes \ --subnetwork=default \ --labels=mesh_id=${MESH_ID} \ --release-channel=${CHANNEL}
clusters create
命令包含:workload-pool=${WORKLOAD_POOL}
:启用 Workload Identity,这是从 GKE 应用安全访问 Google Cloud 服务的推荐方法。enable-stackdriver-kubernetes
:启用 GKE 上的 Cloud Monitoring 和 Cloud Logging。subnetwork=default
:创建默认子网。labels mesh_id=${MESH_ID}
:在集群上设置mesh_id
标签,该标签对于在 Google Cloud 控制台中的 Anthos Service Mesh 页面上显示指标必不可少。release-channel ${CHANNEL}
:在指定的发布版本中注册集群。
设置凭据和权限
在继续操作之前,确保您已启用所有必需 API。如果您有任何疑问,不妨再次运行 gcloud services enable 命令。
- 初始化您的项目,以便准备好安装。除此之外,此命令还将创建一个服务账号,让 Istio 组件(例如边车代理)可安全地访问您项目的数据和资源:
curl --request POST \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ --data '' \ https://meshconfig.googleapis.com/v1alpha1/projects/${PROJECT_ID}:initialize
该命令会以空花括号作为响应:
{}
如果您日后在此集群上安装新版本的 Anthos Service Mesh,则无需重新运行命令,但再次运行该命令不会影响安装。
-
获取用于与集群交互的身份验证凭据:
gcloud container clusters get-credentials ${CLUSTER_NAME}
-
向当前用户授予集群管理员权限。您需要这些权限,以便为 Anthos Service Mesh 创建必要的基于角色的访问权限控制 (RBAC) 规则:
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user="$(gcloud config get-value core/account)"
如果您看到
"cluster-admin-binding" already exists
错误,可以放心地忽略该错误并继续使用现有的集群管理员绑定。
注册您的集群
您必须向项目的队列注册集群,才能获取对 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 文档中的注册集群。
下载安装文件
在继续操作之前,请验证 ASM 网格数据平面服务账号是否为项目成员:
gcloud projects get-iam-policy ${PROJECT_ID} | grep -B 1 'roles/meshdataplane.serviceAgent'
如果上一个命令没有输出任何内容,请返回设置凭据和权限部分,然后运行 curl
命令。
-
将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-linux.tar.gz
-
下载签名文件并使用
openssl
验证签名:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-linux.tar.gz.1.sig openssl dgst -verify - -signature istio-1.5.10-asm.2-linux.tar.gz.1.sig istio-1.5.10-asm.2-linux.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
预期输出为
Verified OK
-
将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.5.10-asm.2-linux.tar.gz
该命令会在当前工作目录中创建一个名为
istio-1.5.10-asm.2
的安装目录,其中包含:samples
中的示例应用bin
目录中的以下工具:istioctl
:您使用istioctl
来安装 Anthos Service Mesh。asmctl
:安装 Anthos Service Mesh 后,您可以使用asmctl
来帮助验证安全配置。(目前,GKE on VMware 不支持asmctl
。)
-
将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-osx.tar.gz
-
下载签名文件并使用
openssl
验证签名:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.5.10-asm.2-osx.tar.gz.1.sig istio-1.5.10-asm.2-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
预期输出为
Verified OK
-
将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.5.10-asm.2-osx.tar.gz
该命令会在当前工作目录中创建一个名为
istio-1.5.10-asm.2
的安装目录,其中包含:samples
中的示例应用bin
目录中的以下工具:istioctl
:您使用istioctl
来安装 Anthos Service Mesh。asmctl
:安装 Anthos Service Mesh 后,您可以使用asmctl
来帮助验证安全配置。(目前,GKE on VMware 不支持asmctl
。)
-
将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-win.zip
-
下载签名文件并使用
openssl
验证签名:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-win.zip.1.sig openssl dgst -verify - -signature istio-1.5.10-asm.2-win.zip.1.sig istio-1.5.10-asm.2-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
预期输出为
Verified OK
-
将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.5.10-asm.2-win.zip
该命令会在当前工作目录中创建一个名为
istio-1.5.10-asm.2
的安装目录,其中包含:samples
中的示例应用bin
目录中的以下工具:istioctl
:您使用istioctl
来安装 Anthos Service Mesh。asmctl
:安装 Anthos Service Mesh 后,您可以使用asmctl
来帮助验证安全配置。(目前,GKE on VMware 不支持asmctl
。)
-
确保您位于 Anthos Service Mesh 安装的根目录。
cd istio-1.5.10-asm.2
-
为方便起见,请将
/bin
目录中的工具添加到 PATH:export PATH=$PWD/bin:$PATH
Linux
Mac OS
Windows
准备资源配置文件
运行 istioctl apply command
以安装 Anthos Service Mesh 时,将在命令行上指定 -f istio-operator.yaml
。此文件包含启用网格遥测和网格安全功能所需的项目和集群的相关信息。您需要下载 istio-operator.yaml
及其他资源配置文件并设置项目和集群信息。
如需准备资源配置文件,请执行以下操作:
安装
kpt
(如果您尚未安装):gcloud components install kpt
(可选)为 Anthos Service Mesh 软件包资源配置文件创建一个新目录。如果您计划设置多个集群,则可能需要使用集群名称作为目录名称。
切换到您要在其中下载 Anthos Service Mesh 软件包的目录。
将 Anthos Service Mesh 软件包下载到当前工作目录:
kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.5-asm .
设置集群名称:
kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
(可选)使用
kpt
setter 自定义资源配置文件。默认情况下,这些 setter 使用gcloud config
的默认值。如果设置gcloud config
默认值,或者如果您要更改值,请运行以下 setter 方法:设置项目 ID:
kpt cfg set asm gcloud.core.project ${PROJECT_ID}
设置默认可用区或区域:
kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
(可选)您可以将资源配置文件签入到您自己的源代码控制系统(例如 Cloud Source Repositories),以便您可以跟踪这些文件的更改。
安装 Anthos Service Mesh
本部分介绍如何安装 Anthos Service Mesh 并启用:
- 支持的功能页面上列出的支持的默认功能。
- Anthos Service Mesh 证书授权机构 (Mesh CA)。
- 为 Google Cloud Console 中的 Anthos Service Mesh 信息中心提供支持的遥测数据流水线。
如需了解如何启用支持的可选功能,请参阅启用可选功能。
如需安装 Anthos Service Mesh,请运行以下命令:
选择以下任一命令,以在 PERMISSIVE
双向 TLS (mTLS) 身份验证模式或 STRICT
mTLS 模式下配置 Anthos Service Mesh。
PERMISSIVE mTLS
istioctl manifest apply --set profile=asm \ -f asm/cluster/istio-operator.yaml
STRICT mTLS
istioctl manifest apply --set profile=asm \ -f asm/cluster/istio-operator.yaml \ --set values.global.mtls.enabled=true
验证安装
我们建议您使用 asmctl
分析工具来验证项目、集群和工作负载的基本配置。如果 asmctl
测试失败,则 asmctl
会尽可能推荐解决方案。asmctl validate
命令会运行检查以下项的基本测试:
- 在项目中启用 Anthos Service Mesh 所需的 API。
- Istio-Ingressgateway 是否已正确配置为调用 Mesh CA。
- Istiod 和 Istio-Ingressgateway 的整体运行状况。
如果您运行带有可选 --with-testing-workloads
标志的 asmctl validate
命令,则除了基本测试外,asmctl
还会运行检查以下项的安全测试:
- 双向 TLS (mTLS) 通信是否配置正确。
- Mesh CA 是否可以颁发证书。
为了运行安全测试,asmctl
会在测试命名空间中的集群上部署工作负载,运行 mTLS 通信测试,输出结果,并删除测试命名空间。
如需运行 asmctl
,请执行以下操作:
确保已设置 gcloud application-default 凭据:
gcloud auth application-default login
获取身份验证凭据以与集群进行交互(如果尚未这样做):
gcloud container clusters get-credentials ${CLUSTER_NAME}
如需同时运行基本和安全测试(假设
istio-1.5.10-asm.2/bin
位于PATH
中),请运行以下命令:asmctl validate --with-testing-workloads
成功后,该命令会以如下所示的输出作为响应:
[asmctl version 0.3.0] Using Kubernetes context: example-project_us-central1-example-cluster To change the context, use the --context flag Validating enabled APIs OK Validating ingressgateway configuration OK Validating istio system OK Validating sample traffic Launching example services... Sent traffic to example service http code: 200 verified mTLS configuration OK Validating issued certs OK
注入 Sidecar 代理
Anthos Service Mesh 使用边车代理来增强网络安全性、可靠性和可观测性。借助 Anthos Service Mesh,这些功能可以从应用的主容器中抽象出来,并在作为同一 Pod 中单独容器提供的常见进程外代理中实施。
在部署工作负载之前,请务必配置边车代理注入,以便 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 指标。