1.0 版。如 Anthos 版本支持政策中所述,此版本已不再受支持。如需获取影响 VMware 上的 Anthos 集群 (GKE On-Prem) 的安全漏洞、威胁和问题的最新补丁程序和更新,请升级到支持的版本。您可以在此处找到最新版本。

安装 GKE On-Prem

本页面介绍如何在 vSphere 中安装 GKE On-Prem。本页面上的说明介绍了如何创建一个管理员集群和一个用户集群。创建管理员集群和初始用户集群后,您可以创建其他用户集群

准备工作

  1. 按照系统要求中的说明设置您的本地环境。

  2. 完成使用入门中的步骤。

  3. 在 vSphere 中创建管理员工作站

  4. 创建私有 Docker 注册表(如果您想使用该注册表)。

  5. 如果您想使用手动负载平衡,请了解如何启用手动负载平衡

  6. 配置静态 IP 地址(如果您想使用静态 IP 地址)。

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

    ssh -i ~/.ssh/vsphere_workstation ubuntu@[IP_ADDRESS]
    
  8. 授权 gcloud 访问 Google Cloud:

    gcloud auth login
  9. gcloud 注册为 Docker 凭据帮助程序。(详细了解此命令):

    gcloud auth configure-docker
  10. 设置默认项目。设置默认 Google Cloud 会使所有 gcloud CLI 命令针对该项目运行,这样就无需针对每条命令指定您的项目:

    gcloud config set project [PROJECT_ID]
    

    请将 [PROJECT_ID] 替换为您的项目 ID。(您可以在 Cloud Console 中或通过运行 gcloud config get-value project 查找项目 ID。)

在管理员工作站中创建服务帐号的私钥

使用入门中,您创建了四个服务帐号。现在,您需要为每个服务帐号创建一个 JSON 私钥文件。您将在安装过程中提供这些密钥。

列出服务帐号的电子邮件地址

首先,列出您的 Google Cloud 项目中的服务帐号:

gcloud iam service-accounts list

对于名为 my-gcp-project 的 Google Cloud 项目,此命令的输出如下所示:

gcloud iam service-accounts list
NAME                                    EMAIL
                                        access-service-account@my-gcp-project.iam.gserviceaccount.com
                                        register-service-account@my-gcp-project.iam.gserviceaccount.com
                                        connect-service-account@my-gcp-project.iam.gserviceaccount.com
                                        stackdriver-service-account@my-gcp-project.iam.gserviceaccount.com

记下每个帐号的电子邮件地址。对于以下各个部分,您需要提供相关帐号的电子邮件帐号。

访问服务帐号

gcloud iam service-accounts keys create access-key-file \
--iam-account [ACCESS_SERVICE_ACCOUNT_EMAIL]

其中,[ACCESS_SERVICE_ACCOUNT_EMAIL] 是访问服务帐号的电子邮件地址。

注册服务帐号

gcloud iam service-accounts keys create register-key \
--iam-account [REGISTER_SERVICE_ACCOUNT_EMAIL]

其中,[REGISTER_SERVICE_ACCOUNT_EMAIL] 是注册服务帐号的电子邮件地址。

Connect 服务帐号

gcloud iam service-accounts keys create connect-key \
--iam-account [CONNECT_SERVICE_ACCOUNT_EMAIL]

其中,[CONNECT_SERVICE_ACCOUNT_EMAIL] 是 Connect 服务帐号的电子邮件地址。

Cloud Monitoring 服务帐号

gcloud iam service-accounts keys create stackdriver-key \
--iam-account [STACKDRIVER_SERVICE_ACCOUNT_EMAIL]

其中,[STACKDRIVER_SERVICE_ACCOUNT_EMAIL] 是 Cloud Monitoring 服务帐号的电子邮件地址。

为 Google Cloud CLI 激活访问服务帐号

为 gcloud CLI 激活访问服务帐号会导致所有 gcloudgsutil 命令都以该服务帐号的身份运行。由于您的访问服务帐号已列入许可名单,可以访问 GKE On-Prem 二进制文件,因此激活 gcloud CLI 帐号可让您从 Cloud Storage 下载 GKE On-Prem 的二进制文件。

如需激活您的访问服务帐号,请运行以下命令。如果该帐号的密钥文件不在当前工作目录中,请务必提供该文件的路径:

gcloud auth activate-service-account --key-file=access-key.json

生成配置文件

如需开始安装,请运行 gkectl create-config 来生成配置文件。您可以使用环境的规范和所需的集群规范来修改该文件。

如需生成文件,请运行以下命令。其中 --config [PATH] 为可选项,并接受配置文件的路径和名称。如果省略 --config,则系统会在当前工作目录中创建 config.yaml

gkectl create-config [--config [PATH]]

修改配置文件

现在您已生成配置文件,接下来需要对其进行修改,以适合您的环境并满足您对集群的预期。以下部分介绍了每个字段、其所需的值以及在哪里可以找到相关信息。默认情况下,某些字段会被注释掉。如果这些字段中的任何一个与您的安装相关,请取消注释并提供值。

bundlepath

GKE On-Prem 软件包是一组 YAML 文件。总的来说,YAML 文件描述了特定版本的 GKE On-Prem 中的所有组件。

创建管理员工作站时,该工作站会随附软件包 (/var/lib/gke/bundles/gke-onprem-vsphere-[VERSION]-full.tgz)。

bundlepath 的值设置为软件包文件的路径。也就是说,将 bundlepath 设置为:

/var/lib/gke/bundles/gke-onprem-vsphere-[VERSION]-full.tgz

其中,[VERSION] 是要安装的 GKE On-Prem 版本。

请注意,您可以将软件包文件保存在其他位置,也可以为其指定其他名称。您只需确保配置文件中 bundlepath 的值是软件包文件的路径即可。

gkeplatformversion

gkeplatformversion 字段包含您要安装的 GKE On-Prem 版本的 Kubernetes 版本。其格式如下:

[KUBERNETES_VERSION]-[GKE_PATCH]

Kubernetes 版本的一个例子是 1.12.7-gke.19。

在您运行 gkectl create-config 时,系统会为您填充此字段。

bundlepathgkeplatformversion 的版本控制方案不同。但是,给定的软件包版本具有相应的 GKE 平台版本。例如,如果软件包版本为 1.0.10,则 GKE 平台版本必须为 1.12.7-gke.19。

如需了解软件包版本与 GKE 平台版本之间的对应关系,请提取软件包文件并查看 YAML 文件。尤其要打开 gke-onprem-vsphere-[VERSION]-images.yaml 并查看 osImages 字段。您可以在操作系统映像文件的名称中查看 GKE 平台版本。例如,在以下操作系统映像中,您可以看到 GKE 平台版本为 1.12.7-gke.19。

osImages:
  admin: "gs://gke-on-prem-os-ubuntu-release/gke-on-prem-osimage-1.12.7-gke.19-20190516-905ef43658.ova"

vcenter

您可以使用此字段为 vCenter Server 声明全局设置。GKE On-Prem 需要知道 vCenter Server 实例的 IP 地址、用户名和密码。设置 vcenter 下的值以提供此信息。例如:

vcenter:
  credentials:
    address: "203.0.113.1"
    username: "my-name"
    password: "my-password"

GKE On-Prem 需要一些有关您的 vSphere 环境结构的信息。设置 vcenter 下的值以提供此信息。例如:

vcenter:
  ...
  datacenter: "MY-DATACENTER"
  datastore: "MY-DATASTORE"
  cluster: "MY-VSPHERE-CLUSTER"
  network: "MY-VIRTUAL-NETWORK"
  resourcepool: "my-pool"

GKE On-Prem 会创建一个虚拟机磁盘 (VMDK) 来保存管理员集群的 Kubernetes 对象数据。安装程序会为您创建 VMDK,但您必须在 vcenter.datadisk 字段中提供 VMDK 的名称。例如:

vcenter:
  ...
  datadisk: "my-disk.vmdk"

如果您希望 GKE On-Prem 将 VMDK 放在目录中,则必须提前手动创建目录。例如,您可以使用 govc 创建目录:

govc datastore.mkdir my-gke-on-prem-directory

然后,您可以在 vcenter.datadisk 字段中添加该目录:

vcenter:
  ...
  datadisk: "my-gke-on-prem-directory/my-disk.vmdk"

当客户端(如 GKE On-Prem)将请求发送到 vCenter Server 时,服务器必须通过提供证书来向客户端证明其身份。该证书由证书授权机构 (CA) 进行签名。客户端使用 CA 的证书来验证服务器的证书。

vcenter.cacertpath 设置为 CA 的证书路径。例如:

vcenter:
  ...
  cacertpath: "/my-cert-directory/altostrat.crt"

如需了解如何下载 CA 的证书,请参阅如何下载和安装 vCenter Server 根证书

如果您的 vCenter 服务器使用的是自签名证书,您可以通过从管理员工作站使用 openssl 连接到 vCenter 来提取证书:

true | openssl s_client -connect [VCENTER_IP]:443 -showcerts 2>/dev/null | sed -ne '/-BEGIN/,/-END/p' > vcenter.pem

gcrkeypath

gcrkeypath 的值设置为访问服务帐号的 JSON 密钥文件路径。例如:

gcrkeypath: "/my-key-directory/access-key.json"

lbmode

您可以使用集成负载平衡或手动负载平衡。您选择的负载平衡模式将用于管理员集群和初始用户集群。它也将用于您未来创建的任何其他用户集群。

通过将 lbmode 的值设置为 IntegratedManual 来指定负载平衡选项。例如:

lbmode: Integrated

gkeconnect

gkeconnect 字段包含 GKE On-Prem 通过 Google Cloud Console 设置本地集群管理所需的信息。

gkeconnect.projectid 设置为您要在其中管理本地集群的 Google Cloud 项目的 ID。

gkeconnect.registerserviceaccountkeypath 的值设置为注册服务帐号的 JSON 密钥文件的路径。将 gkeconnect.agentserviceaccountkeypath 的值设置为连接服务帐号的 JSON 密钥文件的路径。

如果您希望 Connect Agent 使用代理与 Google Cloud 通信,请将 gkeconnect.proxy 的值设置为代理的网址。请使用格式 http(s)://[PROXY_ADDRESS]

例如:

gkeconnect:
  projectid: "my-project"
  registerserviceaccountkeypath: "/my-key-directory/register-key.json"
  agentserviceaccountkeypath: "/my-key-directory/connect-key.json"
  proxy: https://203.0.113.20

stackdriver

stackdriver 字段包含 GKE On-Prem 在存储由本地集群生成的日志条目时所需的信息。

stackdriver.projectid 设置为 Google Cloud 项目的 ID,您可以在其中查看与本地集群有关的 Stackdriver 日志。

stackdriver.clusterlocation 设置为您要在其中存储 Stackdriver 日志的 Google Cloud 地区。建议选择一个靠近您的本地数据中心的区域。

stackdriver.serviceaccountkeypath 设置为 Stackdriver Logging 服务帐号的 JSON 密钥文件路径。

例如:

stackdriver:
  projectid: "my-project"
  clusterlocation: "us-west1"
  proxyconfigsecretname: ""
  enablevpc: false
  serviceaccountkeypath: "/my-key-directory/logging-key.json

privateregistryconfig

如果您有私有 Docker 注册表,则 privateregistryconfig 字段包含 GKE On-Prem 用于将映像推送到该私有注册表的信息。如果您没有指定私有注册表,则 gkectl 会在安装期间从其 Container Registry 代码库 gcr.io/gke-on-prem-release 中拉取 GKE On-Prem 的容器映像。

privatedockerregistry.credentials 下,将 address 设置为运行您的私有 Docker 注册表的机器的 IP 地址。将 usernamepassword 设置为您的私有 Docker 注册表的用户名和密码。

当 Docker 从您的私有注册表中拉取映像时,该注册表必须通过提供证书来证明其身份。注册表的证书由证书授权机构 (CA) 签名。Docker 使用 CA 的证书来验证该注册表的证书。

privateregistryconfig.cacertpath 设置为 CA 的证书路径。

例如:

privateregistryconfig
  ...
  cacertpath: /my-cert-directory/registry-ca.crt

admincluster

admincluster 字段包含 GKE On-Prem 创建管理员集群所需的信息。

vCenter 网络 - 管理员集群

admincluster.vcenter.network 中,您可以为您的管理员集群选择不同的 vCenter 网络。请注意,这会覆盖您在 vcenter 中提供的全局设置。例如:

admincluster:
  vcenter:
    network: MY-ADMIN-CLUSTER-NETWORK

DHCP 或静态 IP 地址 - 管理员集群

决定是否要使用动态主机配置协议 (DHCP) 将 IP 地址分配给管理员集群节点。另一种方法是为您的集群节点使用静态 IP 地址。请注意,如果您选择使用手动负载平衡模式,则必须对集群节点使用静态 IP 地址。

如果您选择使用 DHCP,请将 admincluster.ipblockfilepath 字段注释掉。

如果您选择使用静态 IP 地址,则必须有一个主机配置文件,如配置静态 IP 地址中所述。在 admincluster.ipblockfilepath 字段中提供主机配置文件的路径。例如:

admincluster:
  ipblockfilepath: "/my-config-directory/my-admin-hostconfig.yaml"

集成式负载平衡 - 管理员集群

如果您使用的是集成式负载平衡模式,GKE On-Prem 需要知道您的 BIG-IP 负载平衡器的 IP 地址、用户名和密码。设置 admincluster.bigip 下的值以提供此信息。例如:

admincluster:
  ...
  bigip:
    credentials:
      address: "203.0.113.2"
      username: "my-admin-f5-name"
      password: "rJDlm^%7aOzw"

如果您使用的是集成负载平衡模式,则必须为管理员集群创建 BIG-IP 分区。将 admincluster.bigip.partition 设置为分区的名称。例如:

admincluster:
  ...
  bigip:
    partition: "my-admin-f5-partition"

手动负载平衡 - 管理员集群

如果您使用的是手动负载平衡模式,则必须对集群节点使用静态 IP 地址。验证您是否已为 admincluster.ipblockfilepath 设置值。例如:

admincluster:
  ipblockfilepath: "/my-config-directory/my-admin-hostconfig.yaml"

管理员集群中的 Ingress 控制器实现为 NodePort 类型的 Service。该 Service 有一个用于 HTTP 的 ServicePort 和一个用于 HTTPS 的 ServicePort。如果您使用的是手动负载平衡模式,则必须为这些 ServicePort 选择 nodePort 值。在 ingresshttpnodeportingresshttpsnodeport 中指定 nodePort 值。例如:

admincluster:
  ...
  manuallbspec:
    ingresshttpnodeport: 32527
    ingresshttpsnodeport: 30139

管理员集群中的 Kubernetes API 服务器实现为 NodePort 类型的 Service。如果您使用的是手动负载平衡,则必须为该 Service 选择 nodePort 值。在 controlplanenodeport 中指定 nodePort 值,例如:

admincluster:
  ...
  manuallbspec:
    ...
    controlplanenodeport: 30968

管理员集群中的插件服务器实现为 NodePort 类型的 Service。如果您使用的是手动负载平衡,则必须为该 Service 选择 nodePort 值。在 controlplanenodeport 中指定 nodePort 值,例如:

admincluster:
  manuallbspec:
    ...
    addonsnodeport: 30562

vips - 管理员集群

无论您是为管理员集群使用集成负载平衡还是手动负载平衡,都需要填写 admincluster.vips 字段。

admincluster.vips.controlplanevip 的值设置为您已选择在负载平衡器上为管理员集群的 Kubernetes API 服务器配置的 IP 地址。将 ingressvip 的值设置为您已选择在负载平衡器上为管理员集群的 Ingress 控制器配置的 IP 地址。例如:

admincluster:
  ...
  vips:
    controlplanevip: 203.0.113.3
    ingressvip: 203.0.113.4

serviceiprange 和 podiprange - 管理员集群

管理员集群必须拥有用于 Service 的 IP 地址范围以及用于 pod 的 IP 地址范围。这些范围由 admincluster.serviceiprangeadmincluster.podiprange 字段指定。当您运行 gkectl create-config 时,系统会填充这些字段。您也可以将填充值更改为您选择的值。如需了解如何选择 Service 和 Pod IP 地址范围,请参阅优化 IP 地址分配

Service 和 pod 范围不得重叠。此外,您为管理员集群选择的 Service 和 Pod 范围不得与您为用户集群选择的 Service 和 Pod 范围重叠。

例如:

admincluster:
  ...
  serviceiprange: 10.96.232.0/24
  podiprange: 192.168.0.0/16

usercluster

usercluster 字段包含 GKE On-Prem 创建初始用户集群所需的信息。

vCenter 网络 - 管理员集群

admincluster.vcenter.network 中,您可以为您的用户集群选择不同的 vCenter 网络。请注意,这会覆盖您在 vcenter 中提供的全局设置。例如:

usercluster:
  vcenter:
    network: MY-USER-CLUSTER-NETWORK

DHCP 或静态 IP 地址 - 用户集群

决定是否要使用 DHCP 将 IP 地址分配给您的用户集群节点。另一种方法是为您的集群节点使用静态 IP 地址。请注意,如果您选择了手动负载平衡模式,则必须对集群节点使用静态 IP 地址。

如果您选择使用 DHCP,请将 usercluster.ipblockfilepath 字段注释掉。

如果您选择使用静态 IP 地址,则必须有一个主机配置文件,如配置静态 IP 地址中所述。在 usercluster.ipblockfilepath 字段中提供主机配置文件的路径。例如:

usercluster:
  ipblockfilepath: "/my-config-directory/my-user-hostconfig.yaml"

集成式负载平衡 - 用户集群

如果您使用的是集成式负载平衡模式,GKE On-Prem 需要知道要用于用户集群的 BIG-IP 负载平衡器的 IP 地址、用户名和密码。设置 usercluster.bigip 下的值以提供此信息。例如:

usercluster:
  ...
  bigip:
    credentials:
      address: "203.0.113.5"
      username: "my-user-f5-name"
      password: "8%jfQATKO$#z"
  ...

如果您使用的是集成负载平衡模式,则必须为用户集群创建 BIG-IP 分区。将 usercluster.bigip.partition 设置为分区的名称。例如:

usercluster:
  ...
  bigip:
    partition: "my-user-f5-partition"
  ...

手动负载平衡 - 用户集群

如果您使用的是手动负载平衡模式,则必须对集群节点使用静态 IP 地址。验证您是否已为 usercluster.ipblockfilepath 设置值。例如:

usercluster:
  ipblockfilepath: "/my-config-directory/my-user-hostconfig.yaml"
  ...

用户集群中的 Ingress 控制器实现为 NodePort 类型的 Service。该 Service 有一个用于 HTTP 的 ServicePort 和一个用于 HTTPS 的 ServicePort。如果您使用的是手动负载平衡模式,则必须为这些 ServicePort 选择 nodePort 值。在 ingresshttpnodeportingresshttpsnodeport 中指定 nodePort 值。例如:

usercluster:
  manuallbspec:
    ingresshttpnodeport: 30243
    ingresshttpsnodeport: 30879

用户集群中的 Kubernetes API 服务器实现为 NodePort 类型的 Service。如果您使用的是手动负载平衡,则必须为该 Service 选择 nodePort 值。在 controlplanenodeport 中指定 nodePort 值。例如:

usercluster:
  ...
  manuallbspec:
    ...
    controlplanenodeport: 30562

vips - 用户集群

无论您是为用户集群使用集成负载平衡还是手动负载平衡,都需要填写 usercluster.vips 字段。

usercluster.vips.controlplanevip 的值设置为您已选择在负载平衡器上为用户集群的 Kubernetes API 服务器配置的 IP 地址。将 ingressvip 的值设置为您已选择在负载平衡器上为用户集群的 Ingress 控制器配置的 IP 地址。例如:

usercluster:
  ...
  vips:
    controlplanevip: 203.0.113.6
    ingressvip: 203.0.113.7

serviceiprange 和 podiprange - 用户集群

用户集群必须拥有用于 Service 的 IP 地址范围以及用于 pod 的 IP 地址范围。这些范围由 usercluster.serviceiprangeusercluster.podiprange 字段指定。当您运行 gkectl create-config 时,系统会填充这些字段。您也可以将填充值更改为您选择的值。如需了解如何选择 Service 和 Pod IP 地址范围,请参阅优化 IP 地址分配

Service 和 pod 范围不得重叠。此外,您为用户集群选择的 Service 和 Pod 范围不得与您为管理员集群选择的 Service 和 Pod 范围重叠。

例如:

usercluster:
  ...
  serviceiprange: 10.96.233.0/24
  podiprange: 172.16.0.0/12

clustername

usercluster.clustername 的值设置为您选择的名称。例如:

usercluster:
  ...
  clustername: "my-user-cluster-1"

masternode

usercluster.masternode.replicas 字段指定您希望用户集群拥有的控制层面节点数。用户集群的控制层面节点为用户集群运行控制层面组件。此值必须为 13

  • 将此字段设置为 1 以运行一个用户控制层面。
  • 如果您希望拥有高可用性用户控制层面,请将此字段设置为 3。系统将创建三个用户控制层面。

usercluster.masternode.cpususercluster.masternode.memorymb 字段指定为用户集群的每个控制层面节点分配的 CPU 数量和内存大小(以兆字节为单位)。例如:

usercluster:
  ...
  masternode:
    cpus: 4
    memorymb: 8192

oidc

如果您希望用户集群的客户端使用 OIDC 身份验证,请为 usercluster.oidc 下的字段设置值。配置 OIDC 是可选操作。

1.0.2-gke.3 版中添加了以下必填字段。这些字段可让您从 Cloud Console 登录集群:

  • usercluster.oidc.kubectlredirecturl
  • usercluster.oidc.clientsecret
  • usercluster.oidc.usehttpproxy

如果您不想通过 Cloud Console 登录集群,但想要使用 OIDC,则可以为这些字段传入占位值:

oidc:
  kubectlredirecturl: "redirect.invalid"
  clientsecret: "secret"
  usehttpproxy: "false"

如需了解详情,请参阅使用 OIDC 进行身份验证

sni

如果要为用户集群的 Kubernetes API 服务器提供其他服务证书,请提供 usercluster.sni.certpathusercluster.sni.keypath 的值。例如:

usercluster:
  ...
  sni:
    certpath: "/my-cert-directory/my-second-cert.crt"
    keypath: "/my-cert-directory/my-second-cert.key"

workernode

usercluster.workernode.replicas 字段指定您希望用户集群拥有的工作器节点数。工作器节点运行集群工作负载。

usercluster.masternode.cpususercluster.masternode.memorymb 字段指定为用户集群的每个工作器节点分配的 CPU 数量和内存大小(以兆字节为单位)。例如:

usercluster:
  ...
  workernode:
    cpus: 4
    memorymb: 8192
    replicas: 3

验证配置文件

修改配置文件后,请运行 gkectl check-config 验证文件是否有效并可用于安装:

gkectl check-config --config [PATH_TO_CONFIG]

如果该命令返回任何 FAILURE 消息,请修复问题并再次验证文件。

跳过验证

以下 gkectl 命令会自动对配置文件运行验证:

  • gkectl prepare
  • gkectl create cluster
  • gkectl upgrade

如需跳过命令的验证,请传入 --skip-validation-all。例如,如需跳过对 gkectl prepare 的所有验证,请运行以下命令:

gkectl prepare --config [PATH_TO_CONFIG] --skip-validation-all

如需查看跳过特定验证的所有可用标志,请运行以下命令:

gkectl check-config --help

运行 gkectl prepare

在安装之前,您需要在管理员工作站上运行 gkectl prepare 以初始化您的 vSphere 环境。gkectl prepare 执行以下任务:

  • 将节点操作系统映像导入 vSphere,并将其标记为模板。

  • 如果您使用的是私有 Docker 注册表,请将 GKE On-Prem 映像推送到您的注册表。

  • 您可以选择验证容器映像的版本证明,从而验证这些映像是由 Google 构建和签名的,并已准备好部署。

使用 GKE On-Prem 配置文件运行 gkectl prepare,其中 --validate-attestations 是可选的:

gkectl prepare --config [CONFIG_FILE] --validate-attestations

--validate-attestations 的正输出为 Image [IMAGE_NAME] validated

安装 GKE On-Prem

您已创建指定环境情况和集群预期情况的配置文件,并已验证该文件。您已运行 gkectl prepare 以使用 GKE On-Prem 软件初始化环境。现在,您可以开始全新安装 GKE On-Prem 了。

如需安装 GKE On-Prem,请运行以下命令:

gkectl create cluster --config [CONFIG_FILE]

其中,[CONFIG_FILE] 是您生成和修改的配置文件。

您可以重复使用配置文件来创建其他用户集群

将集群连接到 Google

  • 创建用户集群时,系统会自动向 Google Cloud 注册该集群。您可以在 Cloud Console 的 Kubernetes 集群菜单中查看已注册的 GKE On-Prem 集群。然后,您可以登录集群以查看其工作负载。

  • 如果您在创建集群后一小时内未在 Cloud Console 中看到该集群,请参阅 Connect 问题排查

启用 Ingress

用户集群运行后,您必须通过创建网关对象来启用 Ingress。网关清单的第一部分始终如下所示:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: istio-autogenerated-k8s-ingress
  namespace: gke-system
spec:
  selector:
    istio: ingress-gke-system

您可以根据需要定制清单的其余部分。例如,此清单显示客户端可以使用 HTTP/2 协议和任何主机名在端口 80 上发送请求:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: istio-autogenerated-k8s-ingress
  namespace: gke-system
spec:
  selector:
    istio: ingress-gke-system
  servers:
  - port:
      number: 80
      protocol: HTTP2
      name: http
    hosts:
    - "*"

如果您希望接受 HTTPS 请求,则必须提供 Ingress 控制器可向客户端提供的一个或多个证书。

如需提供证书,请执行以下操作:

  1. 创建一个包含您的证书和密钥的 Secret。
  2. 创建一个网关对象,或修改引用您的 Secret 的现有网关对象。网关对象的名称必须是 istio-autogenerated-k8s-ingress

例如,假设您已创建证书文件 ingress-wildcard.crt 和密钥文件 ingress-wildcard.key

创建一个名为 ingressgateway-wildcard-certs 的 Secret:

kubectl create secret tls \
    --namespace gke-system \
    ingressgateway-wildcard-certs \
    --cert ./ingress-wildcard.crt \
    --key ./ingress-wildcard.key

以下是一个引用您的 Secret 的网关清单。客户端可以使用 HTTPS 协议和与 *.example.com 匹配的任何主机名在端口 443 上调用。请注意,证书中的主机名必须与清单中的主机名(在此示例中为 *.example.com)匹配:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: istio-autogenerated-k8s-ingress
  namespace: gke-system
spec:
  selector:
    istio: ingress-gke-system
  servers:
  - port:
      number: 80
      protocol: HTTP2
      name: http
    hosts:
    - "*"
  - hosts:
    - "*.example.com"
    port:
      name: https-demo-wildcard
      number: 443
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: ingressgateway-wildcard-certs

您可以通过修改网关清单为不同的主机创建多个 TLS 证书。

将清单保存到名为 my-gateway.yaml 的文件中,然后创建网关:

kubectl apply -f my-gateway.yaml

现在,您可以按标准方式使用 Kubernetes Ingress 对象。

问题排查

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

使用 gkectl 诊断集群问题

使用 gkectl diagnose 命令识别集群问题并与 Google 共享集群信息。请参阅诊断集群问题

默认日志记录行为

对于 gkectlgkeadm,使用默认日志记录设置便已足够:

  • 默认情况下,日志条目的保存方式如下:

    • 对于 gkectl,默认日志文件为 /home/ubuntu/.config/gke-on-prem/logs/gkectl-$(date).log,该文件与运行 gkectl 的本地目录中的 logs/gkectl-$(date).log 文件进行符号链接。
    • 对于 gkeadm,默认日志文件是运行 gkeadm 的本地目录中的 logs/gkeadm-$(date).log
  • 所有日志条目都会保存在日志文件中,即使它们不输出到终端(当 --alsologtostderrfalse 时)也是如此。
  • -v5 详细程度(默认)涵盖支持团队所需的所有日志条目。
  • 日志文件还包含已执行的命令和失败消息。

我们建议您在需要帮助时将日志文件发送给支持团队。

为日志文件指定非默认位置

要为 gkectl 日志文件指定非默认位置,请使用 --log_file 标志。您指定的日志文件不会与本地目录进行符号链接。

要为 gkeadm 日志文件指定非默认位置,请使用 --log_file 标志。

在管理员集群中查找 Cluster API 日志

如果虚拟机在管理员控制层面启动后无法启动,您可以通过在管理员集群中检查 Cluster API 控制器的日志来尝试进行调试:

  1. kube-system 命名空间中找到 Cluster API 控制器 pod 的名称,其中 [ADMIN_CLUSTER_KUBECONFIG] 是管理员集群的 kubeconfig 文件的路径:

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] -n kube-system get pods | grep clusterapi-controllers
  2. 打开 pod 的日志,其中 [POD_NAME] 是 pod 的名称。您可以选择使用 grep 或类似工具来搜索错误:

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] -n kube-system logs [POD_NAME] vsphere-controller-manager

使用管理员集群控制层面节点的 kubeconfig 调试 F5 BIG-IP 问题

安装完成后,GKE On-Prem 会在管理员工作站的主目录中生成一个名为 internal-cluster-kubeconfig-debug 的 kubeconfig 文件。此 kubeconfig 文件与管理员集群的 kubeconfig 完全相同,只是它直接指向管理员集群的控制层面节点(该节点上运行着管理员控制层面)。您可以使用 internal-cluster-kubeconfig-debug 文件调试 F5 BIG-IP 问题。

gkectl check-config 验证失败:找不到 F5 BIG-IP 分区

表现

验证失败,因为找不到 F5 BIG-IP 分区(即使分区存在)。

潜在原因

F5 BIG-IP API 的问题可能会导致验证失败。

解决方法

尝试再次运行 gkectl check-config

gkectl prepare --validate-attestations 失败:无法验证版本证明

表现

如果使用可选的 --validate-attestations 标志运行 gkectl prepare,则系统会返回以下错误:

could not validate build attestation for gcr.io/gke-on-prem-release/.../...: VIOLATES_POLICY
潜在原因

受影响的映像可能没有证明。

解决方法

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

使用引导集群的日志进行调试

在安装期间,GKE On-Prem 会创建临时引导集群。成功安装后,GKE On-Prem 会删除引导集群,留下您的管理员集群和用户集群。通常情况下,您无需与此集群进行交互。

如果在安装过程中出现问题,并且您确实向 gkectl create cluster 传递了 --cleanup-external-cluster=false,则使用引导集群的日志进行调试可能会有用。您可以找到 pod,然后获取其日志:

kubectl --kubeconfig /home/ubuntu/.kube/kind-config-gkectl get pods -n kube-system
kubectl --kubeconfig /home/ubuntu/.kube/kind-config-gkectl -n kube-system get logs [POD_NAME]

后续步骤