创建具有静态 IP 地址的管理员工作站

本页面介绍如何创建可用于安装 GKE On-Prem 的管理员工作站。

在本主题中,您将创建一个具有静态 IP 地址的管理员工作站。

如果您要创建使用动态主机配置协议 (DHCP) 来获取 IP 地址的管理员工作站,请参阅使用 DHCP 创建管理员工作站

如果您是在 Linux 上运行命令,则可以采用另一种方法,而不是执行本主题中的步骤。另一种方法就是使用 gkeadm 工具,该工具可以自动完成创建管理员工作站的大部分工作。

概览

管理员工作站是一个 vSphere 虚拟机,它包含创建和管理 GKE On-Prem 集群所需的全部工具。如需创建管理员工作站,请执行本主题中介绍的以下步骤:

  • 下载管理员工作站开放虚拟化设备 (OVA) 文件(管理员工作站虚拟机的压缩映像)。
  • 使用 govc(vSphere 的命令行界面)将 OVA 导入 vSphere 作为虚拟机模板。
  • 复制并填充 HashiCorp Terraform 配置文件。
  • 使用 Terraform 0.11 版创建管理员工作站虚拟机。

为已列入许可名单的服务帐号创建密钥

如果已列入许可名单的服务帐号还没有 JSON 密钥文件,请立即创建一个:

  1. gcloud auth login
  2. gcloud iam service-accounts keys create whitelisted-key.json \
    --iam-account [ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]
    

其中,[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL] 是已列入许可名单的服务帐号的电子邮件地址。

下载管理员工作站 OVA

管理员工作站 OVA 包括安装和管理 GKE On-Prem 集群所需的全部集群组件、命令行工具和其他实体。

激活已列入许可名单的服务帐号:

gcloud auth activate-service-account --key-file [KEY_ALLOWLISTED_ACCOUNT]

其中,[KEY_ALLOWLISTED_ACCOUNT] 是已列入许可名单的服务帐号的 JSON 密钥文件的路径。

下载最新版本的管理员工作站 OVA 及其签名文件:

gsutil cp gs://gke-on-prem-release/admin-appliance/1.4.3-gke.3/gke-on-prem-admin-appliance-vsphere-1.4.3-gke.3.{ova,ova.1.sig} ./

使用 openssl 验证 OVA

使用 openssl 通过公钥验证下载的 OVA 文件:

openssl dgst -verify - -signature gke-on-prem-admin-appliance-vsphere-1.4.3-gke.3.ova.1.sig gke-on-prem-admin-appliance-vsphere-1.4.3-gke.3.ova <<'EOF'
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
-----END PUBLIC KEY-----
EOF

此命令的预期输出为 Verified OK

使用 govc 将 OVA 导入 vSphere 并将其标记为虚拟机模板

在以下部分中,您将:

  1. 创建一些变量,以声明您的 vCenter Server 和 vSphere 环境的元素。
  2. 将管理员工作站 OVA 导入 vSphere 并将其标记为虚拟机模板。

govc 创建变量

在将管理员工作站 OVA 导入 vSphere 之前,您需要提供一些 govc 变量,用于声明您的 vCenter Server 和 vSphere 环境的元素:

export GOVC_URL=https://[VCENTER_SERVER_ADDRESS]/sdk
export GOVC_USERNAME=[VCENTER_SERVER_USERNAME]
export GOVC_PASSWORD=[VCENTER_SERVER_PASSWORD]
export GOVC_DATASTORE=[VSPHERE_DATASTORE]
export GOVC_DATACENTER=[VSPHERE_DATACENTER]
export GOVC_INSECURE=true

您可以选择使用 vSphere 的默认资源池,也可以创建您自己的资源池

# If you want to use a resource pool you've configured yourself, export this variable:
export GOVC_RESOURCE_POOL=[VSPHERE_CLUSTER]/Resources/[VSPHERE_RESOURCE_POOL]
# If you want to use vSphere's default resource pool, export this variable instead:
export GOVC_RESOURCE_POOL=[VSPHERE_CLUSTER]/Resources

其中:

  • [VCENTER_SERVER_ADDRESS] 是您的 vCenter Server 的 IP 地址或主机名。
  • [VCENTER_SERVER_USERNAME] 是在 vCenter Server 上拥有管理员角色或同等权限的帐号的用户名。
  • [VCENTER_SERVER_PASSWORD] 是 vCenter Server 帐号的密码。
  • [VSPHERE_DATASTORE] 是您在 vSphere 环境中配置的数据存储区的名称。
  • [VSPHERE_DATACENTER] 是您在 vSphere 环境中配置的数据中心的名称。
  • [VSPHERE_CLUSTER] 是您在 vSphere 环境中配置的集群的名称。
  • 如果使用非默认资源池,则
  • [VSPHERE_RESOURCE_POOL] 是您为 vSphere 环境配置的资源池的名称。

为代理创建变量

如果您使用了代理,请导出变量以获取其 HTTP 和 HTTPS 地址,其中 [PROXY_ADDRESS] 是代理的 IP 地址或主机名:

export HTTP_PROXY=http://[PROXY_ADDRESS]
export HTTPS_PROXY=https://[PROXY_ADDRESS]

将 OVA 导入 vSphere:标准交换器

如果您使用的是 vSphere 标准交换器,请使用此命令将 OVA 导入 vSphere:

govc import.ova -options - gke-on-prem-admin-appliance-vsphere-1.4.3-gke.3.ova <<EOF
{
  "DiskProvisioning": "thin",
  "MarkAsTemplate": true
}
EOF

将 OVA 导入 vSphere:分布式交换器

如果您使用的是 vSphere 分布式交换器,请使用以下命令将 OVA 导入到 vSphere,其中 [YOUR_DISTRIBUTED_PORT_GROUP_NAME] 是您的分布式端口组的名称:

govc import.ova -options - gke-on-prem-admin-appliance-vsphere-1.4.3-gke.3.ova <<EOF
{
  "DiskProvisioning": "thin",
  "MarkAsTemplate": true,
  "NetworkMapping": [
      {
          "Name": "VM Network",
          "Network": "[YOUR_DISTRIBUTED_PORT_GROUP_NAME]"
      }
  ]
}
EOF

复制 Terraform 配置文件

为 Terraform 文件创建目录:

mkdir [TERRAFORM_DIR]

其中,[TERRAFORM_DIR] 是保存 Terraform 文件的目录路径。

复制以下 TF 和 TFVARS 文件,将其分别保存到 [TERRAFORM_DIR]/terraform.tf[TERRAFORM_DIR]/terraform.tfvars

TF 文件是执行虚拟机创建的 Terraform HCL 配置

此处提供的 Terraform 文件适用于具有静态 IP 地址的管理员工作站。如果您要创建使用 DHCP 来获取其 IP 地址的管理员工作站,则使用 DHCP 创建管理员工作站中提供的 Terraform 文件可供您使用。

创建 SSH 密钥

创建 SSH 密钥,以便从本地笔记本电脑或工作站通过 SSH 连接到管理员工作站。在基于 Linux 的操作系统上,您可以使用 ssh-keygen

ssh-keygen -t rsa -f ~/.ssh/vsphere_workstation -N ""

修改 TFVARS 文件

在文本编辑器中打开 terraform.tfvars,并为以下变量提供值。您可以通过登录 vCenter Client 找到其中许多值:

vcenter_user

以字符串的形式提供 vCenter Server 用户帐号。用户帐号应具有管理员角色或同等权限(请参阅 vSphere 要求)。

例如:

vcenter_user = "administrator@vsphere.local"

vcenter_password

以字符串的形式提供 vCenter Server 用户帐号的密码。例如:

vcenter_password = "#STyZ2T#Ko2o"

vcenter_server

以字符串的形式提供 vCenter Server 的地址(IP 地址或主机名)。例如:

vcenter_server = "198.51.100.2"

ssh_public_key_path

提供 SSH 公钥的路径。您在上一步中创建了此路径:

ssh_public_key_path = "~/.ssh/vsphere_workstation.pub"

vm_name

请为管理员工作站提供您选择的名称。例如:

vm_name = "my-admin-workstation"

datastore

请以字符串形式提供您的 vSphere 数据存储区的名称。例如:

datastore = "MY-DATASTORE"

datacenter

请以字符串形式提供您的 vSphere 数据中心的名称。例如:

datacenter = "MY-DATACENTER"

cluster

请以字符串形式提供您的 vSphere 集群的名称。例如:

cluster = "MY-CLUSTER"

resource_pool

如果您使用的是非默认资源池,请以字符串形式提供 vSphere 资源池的名称。例如:

resource_pool = "MY-POOL"

如果您使用的是默认资源池,请提供以下值:

resource_pool = "[MY_CLUSTER]/Resources"

其中,[MY_CLUSTER] 是您的 vSphere 集群的名称。

请参阅为独立主机指定根资源池

network

以字符串形式提供要在其中创建管理员工作站的 vSphere 网络。例如:

network = "MY-VM-NETWORK"

vm_template

以字符串形式提供虚拟机模板名称。您已创建并导入 OVA,并在上一步将它标记为模板。请注意,模板名称没有 .ova 扩展名。

vm_template = "gke-on-prem-admin-appliance-vsphere-1.4.3-gke.3"

ipv4_address

为管理员工作站提供 IPv4 静态 IP 地址。例如:

ipv4_address = "203.0.113.1"

ipv4_netmask_prefix_length

提供要在其中创建管理员工作站的网络的子网掩码中的位数。例如:

ipv4_netmask_prefix_length = "22"

ipv4_gateway

提供将在其中创建管理员工作站的子网的默认网关的 IP 地址。例如:

ipv4_gateway = "198.51.100.1

dns_nameservers

提供 DNS 域名服务器以供管理员工作站使用,以英文逗号分隔。例如:

dns_nameservers = "8.8.8.8,8.8.4.4"

创建管理员工作站

现在,您可以创建管理员工作站虚拟机了。对于本部分中的步骤,请使用 Terraform 0.11 版。

  1. 转到包含 Terraform 配置文件(TF 和 TFVARS)的目录:

  2. 在目录中初始化 Terraform 并应用配置。这可能需要几分钟时间:

    terraform init && terraform apply -auto-approve -input=false

通过 SSH 连接到管理员工作站

  1. 转到包含 Terraform 配置文件的目录。

  2. 检索管理员工作站的 IP 地址:

    terraform output ip_address

    记下管理员工作站的 IP 地址。

  3. 使用您的 SSH 密钥和 IP 地址通过 SSH 连接到管理员工作站:

    ssh -i ~/.ssh/vsphere_workstation ubuntu@[ADMIN_WORKSTATION_IP_ADDRESS]
    

验证管理员工作站是否已正确设置

确认您的管理员工作站上安装了 gkectldocker

gkectl version
docker version

在管理员工作站上配置 NTP 服务器

默认情况下,管理员工作站使用 ntp.ubuntu.com 作为其网络时间协议 (NTP) 服务器。如果您的组织使用另一个时间服务器,请将管理员工作站配置为与组织中的其他计算机使用相同的 NTP 服务器。

输入以下命令在管理员工作站上配置 NTP 服务器:

sudo mkdir -p /etc/systemd/timesyncd.conf.d/

sudo bash -c "cat >> /etc/systemd/timesyncd.conf.d/cloud-init.conf" << EOF
[Time]
NTP=[NTP_SERVER]
EOF

sudo systemctl restart systemd-timesyncd
timedatectl status

其中,[NTP_SERVER] 是 NTP 服务器的主机名或 IP 地址。

如需验证 NTP 服务器是否正常工作,请输入以下命令:

timedatectl

输出类似于以下内容:

                      Local time: Tue 2019-12-17 00:21:50 UTC
                  Universal time: Tue 2019-12-17 00:21:50 UTC
                        RTC time: Tue 2019-12-17 00:21:50
                       Time zone: Etc/UTC (UTC, +0000)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

问题排查

下载 OVA 时出现 AccessDeniedException

表现

尝试下载管理员工作站 OVA 和签名会返回以下错误:

AccessDeniedException: 403 whitelisted-service-account@project.iam.gserviceaccount.com does not have storage.objects.list access to gke-on-prem-release
潜在原因

已列入许可名单的服务帐号未激活。

解决方法

确保您已激活已列入许可名单的服务帐号。如果问题仍然存在,请与 Google 联系以获取帮助。

openssl 无法验证管理员工作站 OVA

表现

对管理员工作站 OVA 文件运行 openssl dgst 不会返回 Verified OK

潜在原因

OVA 文件存在问题,导致无法成功验证。

解决方法

按照下载管理员工作站 OVA 中的说明,尝试重新下载并部署管理员工作站 OVA。如果问题仍然存在,请与 Google 联系以获取帮助。

如需了解详情,请参阅问题排查