本文档介绍了如何创建可用于创建 GKE On-Prem 集群的管理员工作站。
在本文档中,您将创建一个具有静态 IP 地址的管理员工作站。这与基本安装过程一致,该过程会创建使用静态 IP 地址的集群。
如果您要创建使用动态主机配置协议 (DHCP) 来获取 IP 地址的管理员工作站,请参阅使用 DHCP 创建管理员工作站。
本文档中的步骤使用 gkeadm
命令行工具,该工具仅适用于 Linux。在 GKE On-Prem 的未来版本中,gkeadm
将可用于 Windows 和 Mac OS。如果您要使用运行 Windows 或 Mac OS 的计算机创建管理员工作站,请参阅使用静态 IP 地址创建管理员工作站或使用 DHCP 创建管理员工作站。
下载 gkeadm
下载 gkeadm
命令行工具并使其可执行:
gsutil cp gs://gke-on-prem-release-public/gkeadm/1.3.2-gke.1/linux/gkeadm ./ chmod +x gkeadm
生成配置文件模板
gkeadm
工具需要配置文件才能创建管理员工作站。如需生成配置文件模板,请运行以下命令:
./gkeadm create config
输出是名为 admin-ws-config.yaml
的文件:
gcp: # Path of the allowlisted service account's JSON key file whitelistedServiceAccountKeyPath: "" # Specify which vCenter resources to use vCenter: # The credentials and address GKE On-Prem should use to connect to vCenter credentials: address: "" username: "" ... adminWorkstation: ... network: # The IP allocation mode: 'dhcp' or 'static' ipAllocationMode: "" # # The host config in static IP mode. Do not include if using DHCP # hostConfig: # # The IPv4 static IP address for the admin workstation ...
填写配置文件
在配置文件中,输入字段值(如本部分所述)。
gcp.whitelistedServiceAccountKeyPath
字符串。已列入许可名单的服务账号的 JSON 密钥文件的路径。如需了解如何创建 JSON 密钥文件,请参阅已列入许可名单的服务账号。例如:
whitelistedServiceAccountKeyPath: "my-key-folder/whitelisted-key.json"
vCenter.credentials.address
字符串。您的 vCenter 服务器的 IP 地址或主机名。
在填写 address
字段之前,请下载并检查您的 vCenter 服务器的服务证书。输入以下命令以下载证书并将其保存到名为 vcenter.pem
的文件中。
true | openssl s_client -connect VCENTER_IPVCENTER_IP:443 -showcerts 2>/dev/null | sed -ne '/-BEGIN/,/-END/p' > vcenter.pem
将 VCENTER_IP
替换为您的 vCenter Server 的 IP 地址。
打开证书文件以查看主题通用名称和主题备用名称:
openssl x509 -in vcenter.pem -text -noout
输出会显示 Subject
通用名称 (CN)。这可能是 IP 地址,也可能是主机名。例如:
Subject: ... CN = 203.0.113.100
Subject: ... CN = my-host.my-domain.example
输出还可能在 Subject Alternative Name
下包含一个或多个 DNS 名称:
X509v3 Subject Alternative Name: DNS:vcenter.my-domain.example
选择 Subject
通用名称或 Subject Alternative Name
下的一个 DNS 名称,以在配置文件中用作 vcenter.credentials.address
的值。例如:
vcenter: credentials: address: "203.0.113.1" ...
vcenter: credentials: address: "my-host.my-domain.example" ...
vCenter.credentials.username
字符串。vCenter Server 用户账号。用户账号应具有 Administrator 角色或同等权限。请参阅 vSphere 要求。
例如:
username: "administrator@vsphere.local"
vCenter.credentials.password
字符串。vCenter Server 用户账号的密码。例如:
password: "#STyZ2T#Ko2o"
vCenter.datacenter
字符串。您的 vSphere 数据中心的名称。例如:
datacenter: "MY-DATACENTER"
vCenter.datastore
字符串。您的 vSphere 数据存储区的名称。例如:
datastore: "MY-DATASTORE"
vCenter.cluster
字符串。您的 vSphere 集群的名称。例如:
cluster: "MY-CLUSTER"
vCenter.network
字符串。要在其中创建管理员工作站的 vSphere 网络的名称。例如:
network: "MY-VM-NETWORK"
vCenter.resourcePool
字符串。如果您使用的是非默认资源池,请提供您的 vSphere 资源池的名称。例如:
resourcePool: "MY-POOL"
如果您使用的是默认资源池,请提供以下值:
resourcePool: "MY_CLUSTER/Resources"
将 MY_CLUSTER
替换为您的 vSphere 集群名称。
请参阅为独立主机指定根资源池。
vCenter.caCertPath
字符串。当客户端(如 GKE On-Prem)向您的 vCenter 服务器发送请求时,服务器必须通过提供证书或证书软件包来向客户端证明其身份。为了验证证书或软件包,GKE On-Prem 必须具有信任链中的根证书。
将 vCenter.caCertPath
设置为根证书的路径。例如:
caCertPath: "/usr/local/google/home/me/certs/vcenter-ca-cert.pem"
VMware 安装的证书授权机构 (CA) 会向您的 vCenter 服务器颁发证书。信任链中的根证书是由 VMware 创建的自签名证书。
如果您不想使用默认的 VMWare CA,则可以将 VMware 配置为使用其他证书授权机构。
如果您的 vCenter 服务器使用默认 VMware CA 颁发的证书,请按如下方式下载该证书:
curl -k "https://SERVER_ADDRESS/certs/download.zip" > download.zip
将 SERVER_ADDRESS
替换为您的 vCenter 服务器的地址。
安装 unzip
命令并解压缩证书文件:
sudo apt-get install unzip unzip downloads.zip
如果首次解压缩命令无效,请再次输入该命令。
在 certs/lin
中可找到证书文件。
proxyUrl
字符串:如果用于运行 gkeadm
的机器使用代理服务器访问互联网,请将此字段设置为代理服务器的网址。例如:
proxyUrl: "https://my-proxy.example.local"
adminWorkstation.name
字符串。您为管理员工作站选择的名称。例如:
name: "my-admin-workstation"
adminWorkstation.cpus
整数。管理员工作站的虚拟 CPU 数量。例如:
cpus: 4
adminWorkstation.memoryMB
整数。管理员工作站的内存大小(以 MB 为单位)。例如:
memoryMB: 8192
adminWorkstation.diskGB
整数。管理员工作站的虚拟磁盘空间大小(以 GB 为单位)。不得低于 50。例如:
diskGB: 50
adminWorkstation.network.ipAllocationMode
字符串。将此项设置为 "static"
。例如:
ipAllocationMode: "static"
adminWorkstation.network.hostConfig.ip
字符串。您为自己的管理员工作站选择的 IP 地址。例如:
ip: "172.16.5.1"
adminWorkstation.network.hostConfig.gateway
字符串。包含您的管理员工作站的网络的默认网关 IP 地址。例如:
gateway: "172.16.6.254"
adminWorkstation.network.hostConfig.netmask
字符串。包含您的管理员工作站的网络的网络掩码。例如:
netmask: "255.255.248.0"
adminWorkstation.network.hostConfig.dns
字符串数组。管理员工作站可以使用的 DNS 服务器的 IP 地址数组。例如:
dns: - "172.16.255.1" - "172.16.255.2"
adminWorkstation.proxyUrl
字符串。如果您的网络在代理服务器后端,并且您希望管理员工作站和 GKE On-Prem 集群使用同一个代理服务器,请将 adminworkstation.proxyURL
设置为代理服务器的网址。例如:
adminworkstation: proxyUrl: "http://aw-proxy.example"
adminWorkstation.ntpServer
字符串。您的管理员工作站将使用的网络时间协议服务器的主机名或 IP 地址。例如:
ntpServer: "216.239.35.0"
如果您将此字段留空,则 GKE On-Prem 使用 "ntp.ubuntu.com"
。
以下是已完成的 admin-ws-config.yaml
文件的示例:
gcp: whitelistedServiceAccountKeyPath: "my-key-folder/whitelisted-key.json" vCenter: credentials: address: "203.0.113.1" username: "administrator.vsphere.local" password: "#STyZ2T#Ko2o" datacenter: "MY-DATACENTER" datastore: "MY-DATASTORE" cluster: "MY-CLUSTER" network: "MY-VM-NETWORK" resourcePool: "MY-POOL" caCertPath: "/usr/local/google/home/me/certs/the-root.cert" proxyUrl: "" adminWorkstation: name: "my-admin-workstation" cpus: 4 memoryMB: 8192 diskGB: 50 network: ipAllocationMode: "static" hostConfig: ip: "172.16.5.1" gateway: "172.16.6.254" netmask: "255.255.248.0" dns: - "172.16.255.1" - "172.16.255.2 proxyUrl: "" ntpServer: "216.239.35.0"
创建管理员工作站
如需使用 gkeadm
创建管理员工作站和一组服务账号,您必须向默认 Google Cloud 账号授予 resourcemanager.projectIamAdmin
和 serviceusage.serviceUsageAdmin
IAM 角色。如需查看默认账号,请运行以下命令:
gcloud config get-value account
如需授予所需的角色,请执行以下操作:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:DEFAULT_ACCOUNT" \ --role="roles/resourcemanager.projectIamAdmin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:DEFAULT_ACCOUNT" \ --role="roles/serviceusage.serviceUsageAdmin"
请替换以下内容:
PROJECT_ID
:您的连接项目的 ID。DEFAULT_ACCOUNT
:默认 Cloud Billing 账号。
创建管理员工作站和一组服务账号。如果您希望手动创建和配置服务账号,则可以省略 --auto-create-service-accounts
标志。
./gkeadm create admin-workstation --auto-create-service-accounts
输出内容中会包含有关管理员工作站创建过程的详细信息。例如,您可以看到 gkeadm
执行了以下任务:
运行预检检查。
下载 OVA 映像,并将其上传为 vSphere 模板。
创建 SSH 密钥。
创建管理员工作站虚拟机。
显示在管理员工作站上安装的
gkectl
和 Docker 版本。显示有关管理员工作站上的 NTP 服务器的信息。
创建服务账号及其 JSON 密钥文件。这些服务账号是特定项目(已列入许可名单的服务账号的父账号项目)的成员。
为服务账号分配适当的 IAM 角色。这些角色针对特定项目(已列入许可名单的服务账号的父账号项目)授予。
将服务账号的 JSON 密钥文件复制到管理员工作站。
将 vCenter 服务器的 CA 证书文件复制到管理员工作站。
在管理员工作站上准备
config.yaml
。稍后,您将使用config.yaml
创建集群。
... - Validation Category: vCenter - [SUCCESS] Credentials - [SUCCESS] Version - [SUCCESS] Datacenter - [SUCCESS] Datastore - [SUCCESS] Resource Pool - [SUCCESS] Network All validation results were SUCCESS. ****************************************** Admin workstation VM successfully created: - Name: my-admin-workstation - IP: 172.16.5.1 - SSH Key: /usr/local/google/home/me/.ssh/gke-admin-workstation ****************************************** Printing gkectl and docker versions on admin workstation... gkectl version gkectl 1.3.1-gke.0 (git-3aaf91927) docker version Client: Version: 19.03.2 API version: 1.40 Go version: go1.12.9 Git commit: 6a30dfca03 Built: Mon Sep 30 22:47:02 2019 OS/Arch: linux/amd64 Experimental: false ... Getting allowlisted service account... Creating other service accounts and JSON key files... - log-mon-sa-2004211642 - connect-agent-sa-2004211642 - connect-register-sa-2004211642 Enabling APIs... - project my-project - serviceusage.googleapis.com - iam.googleapis.com - cloudresourcemanager.googleapis.com Configuring IAM roles for service accounts... - my-allowlisted-sa for project my-project - roles/serviceusage.serviceUsageViewer - roles/iam.serviceAccountCreator - roles/iam.roleViewer - log-mon-sa-2004211642 for project my-project - roles/stackdriver.resourceMetadata.writer - roles/logging.logWriter - roles/monitoring.metricWriter - connect-agent-sa-2004211642 for project my-project - roles/gkehub.connect - connect-register-sa-2004211642 for project my-project - roles/gkehub.admin - roles/serviceusage.serviceUsageViewer Copying files to admin workstation... - /usr/local/google/home/me/certs/vcenter-ca-cert.pem - /usr/local/google/home/me/service-account-keys/whitelisted-key.json - log-mon-sa-2004211642.json - connect-agent-sa-2004211642.json - connect-register-sa-2004211642.json Preparing config.yaml for gkectl... ******************************************************************** Admin workstation is ready to use. 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 ******************************************************************** Admin workstation information saved to /usr/local/google/home/me/my-admin-workstation
与管理员工作站建立 SSH 连接
在上述输出内容的末尾附近,有一条命令,您可以使用该命令通过 SSH 连接到管理员工作站。现在输入该命令。例如:
ssh -i /usr/local/google/home/me/.ssh/gke-admin-workstation ubuntu@172.16.5.1
列出管理员工作站上的文件:
ls -1
在输出中,您可以看到 GKE On-Prem 配置文件、您的 CA 证书文件以及服务账号的 JSON 密钥文件:
config.yaml connect-agent-sa-200303-143027.json connect-register-sa-200303-143027.json log-mon-sa-200303-143027.json the-root.crt whitelisted-key.json
检查 GKE On-Prem 配置文件
在管理员工作站上,配置文件已创建并命名为 config.yaml
。稍后您将使用此文件创建管理员集群和用户集群。使用文本编辑器打开 config.yaml
。请注意,许多字段已填充了您在 admin-ws-config.yaml
文件中提供的值。例如:
vcenter: credentials: address: 203.0.113.1 username: administrator@vsphere.local password: STyZ2T#Ko2o datacenter: MY-DATACENTER datastore: MY-DATASTORE cluster: MY-CLUSTER network: MY-VM-NETWORK … gkeconnect: projectid: my-project-id registerserviceaccountkeypath: /home/ubuntu/connect-register-sa-xxx.json agentserviceaccountkeypath: /home/ubuntu/connect-agent-sa-xxx.json stackdriver: projectid: my-project-id clusterlocation: "" enablevpc: false serviceaccountkeypath: /home/ubuntu/log-mon-sa-xxx.json
使用单个 Google Cloud 项目
GKE On-Prem 配置文件中有多个字段可供您指定 Google Cloud 项目 ID。例如,您可以为 gkeconnect
指定一个项目 ID,而为 stackdriver
指定另一个项目 ID:
gkeconnect: projectid: "" ... stackdriver: projectid: ""
在 gkeadm
准备 GKE On-Prem 配置文件时,它会将所有 projectid
字段设置为项目,该项目是已列入许可名单的服务账号的父账号项目。此外,gkeadm
还针对特定项目(已列入许可名单的服务账号的父账号项目)向您的服务账号授予角色。简而言之,gkeadm
使用了一个 Google Cloud 项目。
如果您要灵活地使用多个 Google Cloud 项目,则必须手动填写 projectid
字段并向您的服务账号手动授予角色。如需了解详情,请参阅使用多个 Google Cloud 项目。