本页面介绍如何在 vSphere 中安装 GKE On-Prem。本页面上的说明介绍了如何创建一个管理员集群和一个用户集群。创建管理员集群和初始用户集群后,您可以创建其他用户集群。
准备工作
按照系统要求中的说明设置您的本地环境。
完成使用入门中的步骤。
在 vSphere 中创建管理员工作站。
创建私有 Docker 注册表(如果您想使用该注册表)。
如果您想使用手动负载平衡,请了解如何启用手动负载平衡。
配置静态 IP 地址(如果您想使用静态 IP 地址)。
通过 SSH 连接到管理员工作站:
ssh -i ~/.ssh/vsphere_workstation ubuntu@[IP_ADDRESS]
授权
gcloud
访问 Google Cloud:gcloud auth login
将
gcloud
注册为 Docker 凭据帮助程序。(详细了解此命令):gcloud auth configure-docker
设置默认项目。设置默认 Google Cloud 会使所有 gcloud CLI 命令针对该项目运行,这样就无需针对每条命令指定您的项目:
gcloud config set project [PROJECT_ID]
请将
[PROJECT_ID]
替换为您的项目 ID。(您可以在 Google Cloud 控制台中或通过运行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 激活访问服务帐号会导致所有 gcloud
和 gsutil
命令都以该服务帐号的身份运行。由于您的访问服务帐号已列入许可名单,可以访问 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
时,系统会为您填充此字段。
bundlepath
和 gkeplatformversion
的版本控制方案不同。但是,给定的软件包版本具有相应的 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
的值设置为 Integrated
或 Manual
来指定负载平衡选项。例如:
lbmode: Integrated
gkeconnect
gkeconnect
字段包含 GKE On-Prem 通过 Google Cloud Console 设置本地集群管理所需的信息。
将 gkeconnect.projectid
设置为您要在其中管理本地集群的 Google Cloud 项目的 ID。
将 gkeconnect.registerserviceaccountkeypath
的值设置为注册服务帐号的 JSON 密钥文件的路径。将 gkeconnect.agentserviceaccountkeypath
的值设置为 Connect 服务帐号的 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 地址。将 username
和 password
设置为您的私有 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
值。在 ingresshttpnodeport
和 ingresshttpsnodeport
中指定 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.serviceiprange
和 admincluster.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
值。在 ingresshttpnodeport
和 ingresshttpsnodeport
中指定 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.serviceiprange
和 usercluster.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
字段指定您希望用户集群拥有的控制层面节点数。用户集群的控制层面节点为用户集群运行控制层面组件。此值必须为 1
或 3
。
- 将此字段设置为
1
以运行一个用户控制层面。 - 如果您希望拥有高可用性用户控制层面,请将此字段设置为
3
。系统将创建三个用户控制层面。
usercluster.masternode.cpus
和 usercluster.masternode.memorymb
字段指定为用户集群的每个控制层面节点分配的 CPU 数量和内存大小(以兆字节为单位)。例如:
usercluster: ... masternode: cpus: 4 memorymb: 8192
oidc
如果您希望用户集群的客户端使用 OIDC 身份验证,请为 usercluster.oidc
下的字段设置值。配置 OIDC 是可选操作。
1.0.2-gke.3 版中添加了以下必填字段。这些字段可让您从 Google Cloud 控制台登录集群:
- usercluster.oidc.kubectlredirecturl
- usercluster.oidc.clientsecret
- usercluster.oidc.usehttpproxy
如果您不想通过 Google Cloud 控制台登录集群,但想要使用 OIDC,则可以为这些字段传入占位值:
oidc: kubectlredirecturl: "redirect.invalid" clientsecret: "secret" usehttpproxy: "false"
如需了解详情,请参阅使用 OIDC 进行身份验证。
sni
如果要为用户集群的 Kubernetes API 服务器提供其他服务证书,请提供 usercluster.sni.certpath
和 usercluster.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.cpus
和 usercluster.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 注册该集群。您可以在 Google Cloud 控制台的 Kubernetes 集群菜单中查看已注册的 GKE On-Prem 集群。然后,您可以登录集群以查看其工作负载。
如果您在创建集群后一小时内未在 Google Cloud 控制台中看到该集群,请参阅排查连接问题。
启用 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 控制器可向客户端提供的一个或多个证书。
如需提供证书,请执行以下操作:
- 创建一个包含您的证书和密钥的 Secret。
- 创建一个网关对象,或修改引用您的 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 共享集群信息。请参阅诊断集群问题。
默认日志记录行为
对于 gkectl
和 gkeadm
,使用默认日志记录设置便已足够:
-
默认情况下,日志条目的保存方式如下:
- 对于
gkectl
,默认日志文件为/home/ubuntu/.config/gke-on-prem/logs/gkectl-$(date).log
,该文件与运行gkectl
的本地目录中的logs/gkectl-$(date).log
文件进行符号链接。 - 对于
gkeadm
,默认日志文件是运行gkeadm
的本地目录中的logs/gkeadm-$(date).log
。
- 对于
- 所有日志条目都会保存在日志文件中,即使它们不输出到终端(当
--alsologtostderr
为false
时)也是如此。 -v5
详细程度(默认)涵盖支持团队所需的所有日志条目。- 日志文件还包含已执行的命令和失败消息。
我们建议您在需要帮助时将日志文件发送给支持团队。
为日志文件指定非默认位置
要为 gkectl
日志文件指定非默认位置,请使用 --log_file
标志。您指定的日志文件不会与本地目录进行符号链接。
要为 gkeadm
日志文件指定非默认位置,请使用 --log_file
标志。
在管理员集群中查找 Cluster API 日志
如果虚拟机在管理员控制层面启动后无法启动,您可以通过在管理员集群中检查 Cluster API 控制器的日志来尝试进行调试:
在
kube-system
命名空间中找到 Cluster API 控制器 pod 的名称,其中 [ADMIN_CLUSTER_KUBECONFIG] 是管理员集群的 kubeconfig 文件的路径:kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] -n kube-system get pods | grep clusterapi-controllers
打开 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]