本文档介绍如何为 Google Distributed Cloud 创建管理员工作站。管理员工作站托管在安装期间预配集群的命令行界面 (CLI) 工具和配置文件,以及在安装后与预配的集群交互的 CLI 工具。
本页面适用于设置、监控和管理技术基础设施的管理员、架构师和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务。
此处为完整说明。如需查看创建管理员工作站的简要说明,请参阅“创建基本集群”指南中的创建管理员工作站。
您可以通过以下两种方式创建管理员工作站:
- 使用
gkeadm
在 vSphere 环境中创建管理员工作站虚拟机。 在您选择的任何计算机上创建用户管理的管理员工作站。
gkeadm
准备工作
按照使用多个 Google Cloud 项目中的说明,创建一个或多个 Google Cloud 项目。
规划服务账号
使用 gkeadm
创建管理员工作站时,您可以选择让 gkeadm
为您创建一些服务账号和密钥。在这种情况下,gkeadm
还会向服务账号授予相应的 Identity and Access Management 角色。
作为替代方案,您可以手动创建服务账号和密钥。在这种情况下,您必须向服务账号授予 IAM 角色。
与 gkeadm
为您创建服务账号相比,手动创建服务账号具有更大的灵活性:
自动创建的服务账号与您的组件访问服务账号具有相同的父 Google Cloud 项目。手动创建服务账号时,您可以选择父 Google Cloud 项目。
自动创建的服务账号都被授予组件访问服务账号的父 Google Cloud 项目的 IAM 角色。这没什么问题,因为这是与您的集群关联的唯一 Google Cloud 项目。但是,如果您要将您的集群与多个 Google Cloud 项目关联,则需要向服务账号授予在所选 Google Cloud 项目上的角色的灵活性。
如果您决定创建自己的服务账号,请按照服务账号和密钥中的说明操作。
无论您是否让 gkeadm
自动为您创建服务账号,您都必须手动创建一个服务账号:您的组件访问服务账号。如需了解如何创建组件访问服务账号并向其授予适当的 IAM 角色,请参阅组件访问服务账号。
您可能还需要手动创建另一个服务账号:您的审核日志记录服务账号。如果您想使用 GKE On-Prem API 客户端管理用户集群,则必须在管理员集群中启用审核日志记录。
生成配置文件模板
下载 gkeadm
到当前目录。
生成模板:
./gkeadm create config
上述命令在当前目录中创建了这些文件:
credential.yaml
admin-ws-config.yaml
填写 credential.yaml
在 credential.yaml
中,填写 vCenter 用户名和密码。例如:
kind: CredentialFile items: - name: vCenter username: "my-account-name" password: "AadmpqGPqq!a"
填写 admin-ws-config.yaml
admin-ws-config.yaml
中的多个字段已经填充了默认值或生成的值。您可以保留填充的值,也可以根据需要进行更改。
必须填写的字段
填写以下必填字段。如需了解如何填写这些字段,请参阅管理员工作站配置文件。
gcp: componentAccessServiceAccountKeyPath: "Fill in" vCenter: credentials: address: "Fill in" datacenter: "Fill in" datastore: "Fill in" cluster: "Fill in" network: "Fill in" resourcePool: "Fill in" caCertPath: "Fill in"
如果要在 vSphere 虚拟机文件夹中创建管理员工作站,请填写 vCenter.folder
字段:
vCenter: folder: "Fill in"
如果您的管理员工作站位于代理服务器后面,请填写 proxyURL
字段:
adminWorkstation: proxyURL: "Fill in"
如果您希望管理员工作站从 DHCP 服务器获取其 IP 地址,请将 ipAllocationMode
设置为 "dhcp"
,并移除 hostconfig
部分:
adminWorkstation: network: ipAllocationMode: "dhcp"
如果您希望为管理员工作站指定静态 IP 地址,请将 ipAllocationMode
设置为 "static"
,然后填写 hostconfig
部分:
adminWorkstation: network: ipAllocationMode: "static" hostconfig: ip: "Fill in" gateway: "Fill in" netmask: "Fill in" dns: - "Fill in"
登录
- 使用任意 Google 账号登录。这将设置您的 SDK
account
属性:
gcloud auth login
- 验证您的 SDK
account
属性是否已正确设置:
gcloud config list
- 设置为 SDK
account
属性的 Google 账号称为 SDK 账号。gkeadm
命令行工具使用您的 SDK 账号下载管理员工作站 OVA 并在 Google Cloud 项目中启用服务。
如果您选择让 gkeadm
自动为您创建服务账号,则 gkeadm
还会使用您的 SDK 账号创建服务账号和密钥,并向服务账号授予角色。因此,在运行 gkeadm
以创建管理员工作站之前,请务必设置 SDK account
属性。
输出会显示 SDK account
属性的值。例如:
[core] account = my-name@google.com disable_usage_reporting = False Your active configuration is: [default]
向您的 SDK 账号授予角色
您的 SDK 账号必须具有组件访问服务账号的父 Google Cloud 项目的以下 IAM 角色。这样,gkeadm
就可以在 Google Cloud 项目上启用服务。
serviceUsage.serviceUsageAdmin
如果您选择让 gkeadm
自动为您创建服务账号,则您的 SDK 账号还必须在组件访问服务账号的父项目中拥有以下角色。这样,gkeadm
就可以创建服务账号和密钥。
resourcemanager.projectIamAdmin
iam.serviceAccountCreator
iam.serviceAccountKeyAdmin
要向 Google Cloud 项目授予角色,您必须拥有 Google Cloud 项目的某些权限。如需了解详情,请参阅授予、更改和撤消对资源的访问权限。
如果您拥有所需的权限,则可以自行授予这些角色。否则,必须由您所在组织中的其他人为您授予这些角色。
如需向 SDK 账号授予所需的角色,请执行以下操作:
Linux 和 macOS
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/serviceusage.serviceUsageAdmin"
Windows
gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/serviceusage.serviceUsageAdmin"
请替换以下内容:
PROJECT_ID
:组件访问服务账号的父级 Google Cloud 项目的 IDACCOUNT
:您的 SDK 账号
如果您希望 gkeadm
自动创建服务账号,则授予其他角色:
Linux 和 macOS
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/resourcemanager.projectIamAdmin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/iam.serviceAccountCreator" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/iam.serviceAccountKeyAdmin"
Windows
gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/resourcemanager.projectIamAdmin" gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/iam.serviceAccountCreator" gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/iam.serviceAccountKeyAdmin"
替换以下内容:
PROJECT_ID
:组件访问服务账号的父项目 IDACCOUNT
:您的 SDK 账号
创建管理员工作站
输入下面的命令来创建管理员工作站。如果您希望 gkeadm
为您创建 connect-register 和 logging-monitoring 服务账号,请添加 --auto-create-service-accounts
标志。如果您希望手动创建这些服务账号,请省略此标志。
./gkeadm create admin-workstation [--auto-create-service-accounts]
输出内容中会包含有关管理员工作站创建过程的详细信息:
... Getting ... service account... ... ******************************************************************** Admin workstation is ready to use. Admin workstation information saved to /usr/local/google/home/me/my-admin-workstation This file is required for future upgrades SSH into the admin workstation with the following command: ssh -i /usr/local/google/home/me/.ssh/gke-admin-workstation ubuntu@172.16.5.1 ********************************************************************
与管理员工作站建立 SSH 连接
在上述输出内容的末尾附近,有一条命令,您可以使用该命令通过 SSH 连接到管理员工作站。现在输入该命令。例如:
ssh -i /usr/local/google/home/me/.ssh/gke-admin-workstation ubuntu@172.16.5.1
列出管理员工作站上的文件:
ls -1
在输出内容中,您可以看到两个集群配置文件、您的 CA 证书文件和您的组件访问服务账号的 JSON 密钥文件。如果 gkeadm
为您创建了服务账号,您还可以看到这些服务账号的 JSON 密钥文件。例如:
admin-cluster.yaml user-cluster.yaml vcenter-ca-cert.pem component-access-key.json
验证 gkeadm
是否已在管理员工作站上激活您的组件访问服务账号:
gcloud config get-value account
将 JSON 密钥文件复制到管理员工作站
在创建集群之前,服务账号的 JSON 密钥文件必须位于管理员工作站的主目录中。
组件访问服务账号的密钥已在管理员工作站中。
如果您在运行 gkeadm create admin-workstation
时添加了 --auto-create-service-accounts
标志,则以下服务账号的密钥已经在管理员工作站的主目录中。否则,您必须手动将密钥复制到管理员工作站的主目录中:
- 连接和注册服务账号
- 日志记录和监控服务账号
如果您创建了以下任一服务账号,则必须手动将这些服务账号的密钥复制到管理员工作站的主目录中:
- 用量计量服务账号
- 审核日志记录服务账号
- Binary Authorization 服务账号
从备份文件恢复管理员工作站
当您升级管理员工作站时,gkeadm upgrade
命令会保存一个备份文件。之后,如果您不再拥有管理员工作站,或者丢失了升级后的管理员工作站中的部分文件,则可以使用该备份文件创建一个管理员工作站,该工作站会立即恢复升级后的数据。
如需从备份文件创建管理员工作站,请运行以下命令:
gkeadm create admin-workstation --restore-from-backup ADMIN_WORKSTATION_NAME-backup.tar.gz
将 ADMIN_WORKSTATION_NAME 替换为管理员工作站的名称。
由用户管理
选择计算机作为管理员工作站。您可以使用 Ubuntu 或 Red Hat Enterprise Linux (RHEL)。具体要求如下:
Ubuntu 20.04 LTS 或 22.04 LTS
- 4 核 CPU
- 8 GiB RAM
- 100 GiB 存储空间
RHEL 8.6、8.7 或 8.8
- 4 核 CPU
- 12 GB RAM
- 256 GiB 存储空间
Google Cloud 访问权限
您的管理员工作站必须有权访问 Google Cloud 才能下载和安装工具、处理授权请求、创建服务账号等。
如需了解连接到 Google Cloud 的不同方法,请参阅连接到 Google。
您可以直接访问 Google Cloud 或通过代理服务器访问 Google Cloud。如需了解防火墙规则以及如何配置代理服务器,请参阅代理和防火墙规则。
访问 vCenter Server
如需通过管理员工作站创建和管理集群,您需要有权访问 vCenter Server 实例。如需了解详情,请参阅以下主题:
设置 NTP 服务器
当集群配置为使用 NTP 服务器时,您需要在管理员工作站上设置时间同步服务,以确保 timedatectl
报告与集群同步的时间。此做法是避免重大时钟偏移问题所必需的,该问题可能会由于失效日期不匹配而导致证书验证失败。
Ubuntu
我们建议您使用 chrony
时间服务器。
如需安装 chrony
,请执行以下步骤:
sudo apt-get update sudo apt install chrony
这样会提供两个二进制文件:
chronyd
- 通过网络时间协议同步和运行的守护程序chronyc
-chrony
守护程序的命令行界面
要配置 chronyd
,请执行以下操作:
修改 /etc/chrony/chrony.conf
以添加或移除服务器行。然后重启 chrony
:
sudo systemctl restart chrony.service
RHEL
我们建议您使用 chrony
时间服务器。
如需了解安装说明,请参阅如何配置 chrony。
无密码 sudo
如果您的安全政策允许,请为当前用户启用无密码 sudo。这允许 gkectl
准备私有注册表(如果提供),为代理服务器后面的网络设置代理,并在删除失败时强制删除用于管理员集群生命周期操作的引导集群。
如果您选择不启用无密码 sudo,并且打算为管理员集群使用专用注册表,请在创建管理员集群之前执行以下手动配置:
将专用注册表的 CA 根证书放置在此目录中:
/etc/docker/certs.d/REGISTRY_ADDRESS/
将 REGISTRY_ADDRESS 替换为运行私有注册表的机器的地址。
如需了解详情,请参阅使用证书验证存储库客户端。
如果您的网络位于代理服务器后端,请在管理员集群配置文件中指定代理服务器,并配置 Docker 以使用代理服务器。
如果您选择不启用无密码 sudo,则可能需要在创建管理员集群后手动删除 kind
集群。如需了解详情,请参阅问题排查文档中的不被删除的集群类型部分。
安装软件
Ubuntu
安装以下软件:
Docker 19.03 或更高版本:请参阅在 Ubuntu 上安装 Docker Engine。确保非根用户是 Docker 群组的成员。请参阅以非根用户身份管理 Docker。
Google Cloud CLI 的最新版本:请参阅安装 gcloud CLI。
kubectl:运行
gcloud components install kubectl
,或使用apt-get
:
sudo apt-get update sudo apt-get -y install kubectl
RHEL
安装以下软件:
Docker 19.03 或更高版本
移除任何之前的 Docker 版本:
sudo dnf remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
移除 podman-manpages:
sudo dnf remove podman-manpages
安装 Docker 19.03+:
sudo dnf install -y yum-utils sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install -y --allowerasing docker-ce docker-ce-cli containerd.io sudo systemctl start docker
验证您运行的是 19.03+ 版:
sudo docker version
将您的输出与以下示例进行比较,确保客户端版本和服务器版本均为 19.03+:
Client: Docker Engine - Community Version: 19.03.13 ... Server: Docker Engine - Community Engine: Version: 19.03.13
验证 Docker 是否能运行:
docker run hello-world
您应该会看到如下所示的内容:
Hello from Docker!
此消息表明您的安装似乎在正常运行。
Google Cloud CLI 最新版本:
请参阅安装 gcloud CLI。
kubectl
运行 gcloud components install kubectl
。
登录
设置为 SDK account
属性的 Google 账号称为 SDK 账号。gkectl
命令行工具使用您的 SDK 账号下载集群节点 OVA、拉取容器映像等。因此,在运行 gkectl
命令之前,请务必设置 SDK 账号属性。
使用任意 Google 账号登录。这将设置您的 SDK account
属性:
gcloud auth login
验证您的 SDK account
属性是否已正确设置:
gcloud config list
输出会显示 SDK account
属性的值。例如:
[core] account = my-name@google.com disable_usage_reporting = False Your active configuration is: [default]
下载 gkectl 和软件包
转到您要在其中安装 gkectl
的目录。
下载 gkectl
:
gcloud storage cp gs://gke-on-prem-release/gkectl/VERSION/gkectl ./ chmod +x gkectl
将 VERSION 替换为 Google Distributed Cloud 版本。例如:1.16.0-gke.1
。
下载 Google Distributed Cloud 软件包。确保该版本与您用于下载 gkectl
的版本一致:
gcloud storage cp gs://gke-on-prem-release/gke-onprem-bundle/VERSION/gke-onprem-vsphere-VERSION.tgz ./
服务账号和密钥
请确保您已创建以下所需的服务账号和 JSON 密钥文件:
此外,请确保您已创建所需的所有可选服务账号和 JSON 密钥文件:
将所有 JSON 密钥文件放置在管理员工作站的主目录中。
问题排查
以下部分介绍了如何在 SSH 密钥丢失或损坏的情况下重新启用对管理员工作站的 SSH 访问权限。
SSH 密钥恢复
使用临时虚拟机执行以下步骤:
如需生成一组新的 SSH 密钥,请按照 Compute Engine 文档中的创建 SSH 密钥部分中的说明操作。
确保临时虚拟机和管理员工作站处于
Powered Off
状态。在 vSphere 中,将管理员工作站的启动磁盘挂接到临时虚拟机。
启动磁盘带有
Hard disk 1
标签。通过运行以下命令,在虚拟机内装载启动磁盘:
sudo mkdir -p /mnt/boot-disk sudo mount DISK_ID /mnt/boot-disk
将
DISK_ID
替换为您的启动磁盘标识符,其格式应类似于dev/sdc1
。修改启动磁盘上的
authorized_keys
文件,以附加上一步生成的公钥文件的内容:vi /mnt/boot-disk/.ssh/authorized_keys
关停临时虚拟机。
启动管理员工作站。
使用新生成的私钥访问管理员工作站。
ssh -i ~/.ssh/new-admin-ws.key ubuntu@"${ADMIN_WS_IP}"
使用新生成的私钥继续访问您的管理员工作站。