创建管理员工作站

本文档介绍了如何为 Google Distributed Cloud 创建管理员工作站。管理员工作站托管在安装期间预配集群的命令行界面 (CLI) 工具和配置文件,以及在安装后与预配的集群交互的 CLI 工具。

此处为完整说明。如需查看创建管理员工作站的简要说明,请参阅创建管理员工作站(快速入门)

您可以通过以下两种方式创建管理员工作站:

  • 使用 gkeadm 在 vSphere 环境中创建管理员工作站虚拟机。
  • 在您选择的任何计算机上创建用户管理的管理员工作站。

gkeadm

准备工作

了解您的 vCenter 服务器地址

了解您的 CA 证书路径

安装 Google Cloud CLI

按照使用多个 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"

登录

  1. 使用任意 Google 账号登录。这将设置您的 SDK account 属性:
gcloud auth login
  1. 验证您的 SDK account 属性是否已正确设置:
gcloud config list
  1. 设置为 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 项目的 ID

  • ACCOUNT:您的 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:组件访问服务账号的父项目 ID

  • ACCOUNT:您的 SDK 账号

创建管理员工作站

输入下面的命令来创建管理员工作站。如果您希望 gkeadm 为您创建 connect-registerlogging-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 便可以准备私有注册表(如果提供),为 Docker 设置代理(如果您的网络位于代理服务器后面),并在删除失败时强制删除用于管理员集群生命周期操作的引导集群。

如果您选择不启用无密码 sudo,并且打算为管理员集群使用私有注册表,请在创建管理员集群之前执行以下手动配置:

如果您选择不启用无密码 sudo,则可能需要在创建管理员集群后手动删除 kind 集群。如需了解详情,请参阅问题排查文档中的种类集群不会被删除

安装软件

Ubuntu

安装以下软件:

sudo apt-get update
sudo apt-get -y install kubectl

RHEL

安装以下软件:

Docker 19.03 或更高版本

  1. 移除任何之前的 Docker 版本:

    sudo dnf remove docker \
      docker-client \
      docker-client-latest \
      docker-common \
      docker-latest \
      docker-latest-logrotate \
      docker-logrotate \
      docker-engine
    
  2. 移除 podman-manpages:

    sudo dnf remove podman-manpages
    
  3. 安装 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
    
  4. 验证您运行的是 19.03+ 版:

    sudo docker version
    
  5. 将您的输出与以下示例进行比较,确保客户端版本和服务器版本均为 19.03+:

    Client: Docker Engine - Community
    Version:           19.03.13
    ...
    Server: Docker Engine - Community
    Engine:
    Version:          19.03.13
    
  6. 验证 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

gsutil 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 的版本一致:

gsutil cp gs://gke-on-prem-release/gke-onprem-bundle/VERSION/gke-onprem-vsphere-VERSION.tgz ./

服务账号和密钥

确保您已创建以下所需的服务帐号和 JSON 密钥文件:

此外,请确保您已创建所需的所有可选服务帐号和 JSON 密钥文件:

将所有 JSON 密钥文件放在管理员工作站的主目录中。

问题排查

如果 SSH 密钥丢失或损坏,以下部分将重新启用对管理员工作站的 SSH 访问权限。

SSH 密钥恢复

使用临时虚拟机执行以下步骤:

  1. 如需生成一组新的 SSH 密钥,请按照 Compute Engine 文档中的创建 SSH 密钥中的说明操作。

  2. 确保临时虚拟机和管理员工作站处于 Powered Off 状态。

  3. 在 vSphere 中,将管理员工作站的启动磁盘挂接到临时虚拟机。

    启动磁盘的标签为 Hard disk 1

  4. 运行以下命令,在虚拟机中装载启动磁盘:

    sudo mkdir -p /mnt/boot-disk
    sudo mount DISK_ID /mnt/boot-disk
    

    DISK_ID 替换为您的启动磁盘标识符,其格式应类似于 dev/sdc1

  5. 修改启动磁盘上的 authorized_keys 文件,以附加第一步中生成的公钥文件的内容:

    vi /mnt/boot-disk/.ssh/authorized_keys
    
  6. 关停临时虚拟机。

  7. 开启管理员工作站。

  8. 使用新生成的私钥访问管理员工作站。

    ssh -i ~/.ssh/new-admin-ws.key ubuntu@"${ADMIN_WS_IP}"
    

使用新生成的私钥继续访问管理员工作站。

后续步骤

创建管理员集群