本指南介绍了如何使用 GKE Enterprise 命令行界面 (CLI) 在新的 Google Cloud GKE 集群上安装 Anthos Service Mesh 1.4.10-asm.18 并启用以下功能:
- Anthos Service Mesh 可观测性功能
- Anthos Service Mesh 安全功能,包括 Anthos Service Mesh 证书授权机构 (Mesh CA)。
- 支持的 Istio 功能
目前,GKE Enterprise CLI 不支持在现有 GKE 集群或 GKE on VMware 上安装。
准备工作
本指南假定您已具备:
- 具有一个 Google Cloud 项目。
- Cloud Billing 账号。
使用要求
您必须拥有 GKE Enterprise 试用许可或订阅。如需了解详情,请参阅 GKE Enterprise 价格指南。
您的 GKE 集群必须满足以下要求:
如需将服务端口纳入服务网格,必须为服务端口命名,并且名称必须包含以下语法的端口协议:
name: protocol[-suffix]
,其中方括号表示必须以短划线开头的可选后缀。 如需了解详情,请参阅命名服务端口。如果您是在专用集群上安装 Anthos Service Mesh,则必须添加防火墙规则来打开端口 9443,以使用自动 Sidecar 注入。如果您未添加防火墙规则并启用了自动 Sidecar 注入,则在部署工作负载时会收到错误。如需详细了解如何添加防火墙规则,请参阅针对特定用例添加防火墙规则。
如果您在组织中创建了服务边界,则可能需要将 Mesh CA 服务添加到边界。如需了解详情,请参阅将 Mesh CA 添加到服务边界。
限制
仅支持每个 Google Cloud 项目安装一次 Anthos Service Mesh。不支持在单个项目中进行多次网格部署。
证书数据
来自 Mesh CA 的证书包含有关应用的服务的以下数据:
- Google Cloud 项目 ID
- GKE 命名空间
- GKE 服务账号名称
安装 kpt
和 Anthos CLI
您可以使用 kpt
来安装 GKE Enterprise CLI。您还可以使用 kpt
来下载、管理和自定义存储在 GitHub 中的 Anthos Service Mesh 资源配置文件。配置文件包含特定 Google Cloud 项目和 GKE 集群信息的占位符。自定义配置文件后,您可以将其签入您自己的 GitHub 代码库或其他源代码控制系统中。
使用 Google Cloud CLI 进行身份验证:
gcloud auth login
获取您的 Google Cloud 项目 ID 并为其创建环境变量:
export PROJECT_ID=
YOUR_PROJECT_ID
设置 Google Cloud CLI 的默认项目 ID:
gcloud config set project ${PROJECT_ID}
为新集群选择区域或地区和机器类型。Anthos Service Mesh 所需的最小机器类型为 n1-standard-4。您可以使用任何发布版本选项。
创建以下环境变量:
设置集群名称:
export CLUSTER_NAME=YOUR_CLUSTER_NAME
集群名称只能包含小写字母、数字和“-”,必须以字母开头,以字母数字结尾,并且不能超过 40 个字符。
将
CLUSTER_LOCATION
设置为您的集群可用区或集群区域:export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
安装 GKE Enterprise CLI 并更新组件。如果您使用的是 Cloud Shell,请将
sudo
添加到以下命令:gcloud components install kpt anthoscli alpha
gcloud components update --version 292.0.0
(可选)为 Anthos Service Mesh 软件包创建一个新目录,并为其创建
cd
。将 Anthos Service Mesh 软件包下载到当前工作目录:
kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.4-asm .
默认情况下,
kpt pkg get
命令会填充软件包文件中的计算可用区以与当前配置匹配。在配置文件中设置以下值:
设置项目 ID:
kpt cfg set asm gcloud.core.project ${PROJECT_ID}
设置集群名称:
kpt cfg set asm cluster-name ${CLUSTER_NAME}
设置默认区域或地区:
kpt cfg set asm gcloud.compute.zone ${CLUSTER_LOCATION}
(可选)从默认值
REGULAR
更改发布版本。在以下命令中,将YOUR_CHANNEL
替换为STABLE
或RAPID
。kpt cfg set asm gcloud.container.cluster.releaseChannel YOUR_CHANNEL
如需了解每个发布版本,请参阅您可以获得哪些发布版本。
在新集群上安装 Anthos Service Mesh
运行以下命令以创建一个新集群,并使用您自定义的 Anthos Service Mesh 配置文件安装 Anthos Service Mesh:
anthoscli apply -f asm
等待部署完成:
kubectl wait --for=condition=available --timeout=600s deployment --all -n istio-system
输出:
deployment.extensions/istio-galley condition met deployment.extensions/istio-ingressgateway condition met deployment.extensions/istio-pilot condition met deployment.extensions/istio-sidecar-injector condition met deployment.extensions/promsd condition met
检查控制层面组件
检查 istio-system
中的控制层面 Pod 是否已启动:
kubectl get pod -n istio-system
预期会看到类似如下所示的输出:
NAME READY STATUS RESTARTS AGE istio-galley-5c65896ff7-m2pls 2/2 Running 0 18m istio-ingressgateway-587cd459f-q6hqt 2/2 Running 0 18m istio-nodeagent-74w69 1/1 Running 0 18m istio-nodeagent-7524w 1/1 Running 0 18m istio-nodeagent-7652w 1/1 Running 0 18m istio-nodeagent-7948w 1/1 Running 0 18m istio-pilot-9db77b99f-7wfb6 2/2 Running 0 18m istio-sidecar-injector-69c4d9f875-dt8rn 1/1 Running 0 18m promsd-55f464d964-lqs7w 2/2 Running 0 18m
您应该会看到集群中每个节点的 istio-nodeagent
实例。Mesh CA 取代了 Citadel OSS Istio 组件,用于创建节点代理来为服务网格中运行的工作负载颁发 mTLS 证书。
验证 Mesh CA 是否正常工作:
kubectl get pods -n istio-system -l app=istio-nodeagent \
--output=jsonpath={.items..metadata.name} -o yaml | grep CA_ADDR -A 1
预期输出:meshca.googleapis.com:443.
注册您的集群
您必须向项目的队列注册集群,才能获取对 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 文档中的注册集群。
启用 Pod 安全政策
为在服务网格上获得最佳安全性,我们建议您启用 Pod 安全政策。
注入 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 指标。
使用 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
现在您已经有一个示例正在运行,接下来您可以在 Google Cloud 控制台中探索 Anthos Service Mesh。请注意,拓扑图最长可能需要 5 分钟才会显示网格中的服务。
探索完毕后,移除 Hipster 示例:
kubectl delete -f hipster-demo