本页面介绍 GKE On-Prem 版本 1.3 及更低版本使用的集群配置文件中的字段。
在 GKE On-Prem 1.4 版中,配置文件发生了重大变化。新文件称为版本 1 配置文件。低于 1.4 的 GKE On-Prem 版本中使用的配置文件称为版本 0 配置文件。
如果要使用 GKE On-Prem 1.4 中引入的新功能,则必须使用 v1 配置文件。
v0 配置文件与 GKE On-Prem 1.4 中的工具兼容。例如,您可以将 v0 配置文件传递给 GKE On-Prem 1.4 中的 gkectl create cluster
命令。此外,您还可以运行将 v0 配置文件转换为 v1 配置文件的命令。
转换配置文件
GKE On-Prem 1.4 版为管理员集群和用户集群使用不同的配置文件。也就是说,您可以使用一个配置文件创建管理员集群,而使用另一个配置文件来创建用户集群。
要将 v0 配置文件转换为 v1 管理员集群配置文件,请执行以下操作:
gkectl create-config admin --from [OLD_CONFIG_PATH] --config [OUTPUT_PATH]
其中:
[OLD_CONFIG_PATH] 是 v0 配置文件的路径。
[OUTPUT_PATH] 是您为生成的 v1 管理员集群配置文件选择的路径。如果省略此标志,则
gkectl
将该文件命名为admin-cluster.yaml
,并将其放在当前目录中。
要将 v0 配置文件转换为 v1 用户集群配置文件,请执行以下操作:
gkectl create-config cluster --from [OLD_CONFIG_PATH] --config [OUTPUT_PATH]
[OLD_CONFIG_PATH] 是 v0 配置文件的路径。
[OUTPUT_PATH] 是您为生成的 v1 用户集群配置文件选择的路径。如果省略此标志,则
gkectl
将该文件命名为user-cluster.yaml
,并将其放在当前目录中。
v0 配置文件的模板
填写 v0 配置文件
如果您使用的是 v0 配置文件,请按照本部分中的说明输入字段值。
bundlepath
GKE On-Prem 软件包文件包含特定 GKE On-Prem 版本中的所有组件。创建管理员工作站时,该工作站会随附完整软件包 (/var/lib/gke/bundles/gke-onprem-vsphere-[VERSION]-full.tgz
)。此软件包版本与您用来创建管理员工作站的已导入 OVA 版本一致。
将 bundlepath
的值设置为管理员工作站的软件包文件的路径。也就是说,将 bundlepath
设置为:
/var/lib/gke/bundles/gke-onprem-vsphere-[VERSION]-full.tgz
其中,[VERSION] 是要安装的 GKE On-Prem 版本。最新版本为 1.4.3-gke.3。
请注意,您可以将软件包文件保存在其他位置,也可以为其指定其他名称。您只需确保配置文件中 bundlepath
的值是软件包文件的路径即可。
vCenter 规范
vcenter
规范包含 vCenter Server 实例的相关信息。GKE On-Prem 需要此信息才能与 vCenter Server 进行通信。
vcenter.credentials.address
vcenter.credentials.address
字段中包含 vCenter 服务器的 IP 地址或主机名。
在填写 vsphere.credentials.address field
之前,请下载并检查您的 vCenter 服务器的服务证书。输入以下命令以下载证书并将其保存到名为 vcenter.pem
的文件中。
true | openssl s_client -connect [VCENTER_IP]:443 -showcerts 2>/dev/null | sed -ne '/-BEGIN/,/-END/p' > vcenter.pem
打开证书文件以查看主题通用名称和主题备用名称:
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" ...
您必须选择证书中显示的值。例如,如果 IP 地址未显示在证书中,则您不能将其用于 vcenter.credentials.address
。
vcenter.credentials
GKE On-Prem 需要知道您的 vCenter Server 的用户名和密码。如需提供此信息,请在 vcenter.credentials
下设置 username
和 password
值。例如:
vcenter: credentials: username: "my-name" password: "my-password"
vcenter.datacenter、.datastore、.cluster、.network
GKE On-Prem 需要一些有关您的 vSphere 环境结构的信息。设置 vcenter
下的值以提供此信息。例如:
vcenter: datacenter: "MY-DATACENTER" datastore: "MY-DATASTORE" cluster: "MY-VSPHERE-CLUSTER" network: "MY-VIRTUAL-NETWORK"
vcenter.resourcepool
vSphere 资源池是指 vSphere 集群中 vSphere 虚拟机的逻辑分组。如果您使用的不是默认资源池,请将其名称提供给 vcenter.resourcepool
。例如:
vcenter: resourcepool: "my-pool"
如果您希望 GKE On-Prem 将其节点部署到 vSphere 集群的默认资源池,请向 vcenter.resourcepool
提供空字符串。例如:
vcenter: resourcepool: ""
vcenter.datadisk
GKE On-Prem 会创建一个虚拟机磁盘 (VMDK) 来保存管理员集群的 Kubernetes 对象数据。安装程序会为您创建 VMDK,但您必须在 vcenter.datadisk
字段中提供 VMDK 的名称。例如:
vcenter: datadisk: "my-disk.vmdk"
- vSAN 数据存储区:为 VMDK 创建文件夹
如果您使用的是 vSAN 数据存储区,则需要将 VMDK 放在一个文件夹中。您必须提前手动创建文件夹。为此,您可以使用
govc
创建文件夹:govc datastore.mkdir -namespace=true my-gke-on-prem-folder
然后将
vcenter.datadisk
设置为 VMDK 的路径(包括文件夹)。例如:vcenter: datadisk: "my-gke-on-prem-folder/my-disk.vmdk"
在 1.1.1 版及更早版本中,一个已知问题会要求您向
vcenter.datadisk
提供文件夹的通用唯一标识符 (UUID) 路径,而不是文件路径。从上述govc
命令的输出中复制该值。然后,在
vcenter.datadisk
字段中提供该文件夹的 UUID。请勿在 UUID 前添加正斜杠。例如:vcenter: datadisk: "14159b5d-4265-a2ba-386b-246e9690c588/my-disk.vmdk"
此问题已在 1.1.2 版及更高版本中得到修复。
vcenter.cacertpath
当客户端(如 GKE On-Prem)向 vCenter Server 发送请求时,服务器必须通过提供证书或证书软件包向客户端证明其身份。为了验证证书或软件包,GKE On-Prem 必须具有信任链中的根证书。
将 vcenter.cacertpath
设置为根证书的路径。例如:
vcenter: cacertpath: "/my-cert-folder/the-root.crt"
VMware 安装的证书授权机构 (CA) 会向您的 vCenter 服务器颁发证书。信任链中的根证书是由 VMware 创建的自签名证书。
如果您不想使用默认的 VMWare CA,则可以将 VMware 配置为使用其他证书授权机构。
如果 vCenter 服务器使用默认 VMware CA 颁发的证书,您可以通过以下几种方式获取根证书:
curl -k "https://[SERVER_ADDRESS]/certs/download.zip" > download.zip
其中,[SERVER_ADDRESS] 是 vCenter 服务器的地址。
在浏览器中,输入 vCenter 服务器的地址。在右侧的灰色框中,点击下载受信任的根 CA 证书 (Download trusted root CA certificates)。
输入以下命令以获取服务证书:
true | openssl s_client -connect [SERVER_ADDRESS]:443 -showcerts
在输出结果中,找到如下网址:https://[SERVER_ADDRESS]/afd/vecs/ca。在浏览器中输入该网址。此时会下载根证书。
下载的文件名为 downloads.zip
。
解压该文件:
unzip downloads.zip
如果首次解压缩命令无效,请再次输入该命令。
在 certs/lin
中可找到证书文件。
代理规范
如果您的网络位于代理服务器后面,请用 HTTPS 代理以及要从代理中排除的地址填充 proxy
字段。例如:
proxy: url: "https://username:password@domain" noproxy: "10.0.1.0/24,private-registry.example,10.0.2.1"
proxy.url
是 HTTPS 代理的网址。proxy.noproxy
包括不应代理的 CIDR 范围、IP 地址、网域和主机名。例如,不应代理对集群节点 IP 地址的调用。因此,如果您的子网仅包含集群节点,则可以在noproxy
字段中列出该子网的 CIDR 范围。请注意,如果指定了privateregistryconfig
,系统会自动添加该地址以防止调用您的私有注册表。
管理员集群规范
admincluster
规范包含 GKE On-Prem 创建管理员集群所需的信息。
admincluster.vcenter.network
在 admincluster.vcenter.network
中,您可以为管理员集群节点指定一个 vCenter 网络。请注意,这会替换您在 vcenter
中提供的全局设置。例如:
admincluster: vcenter: network: MY-ADMIN-CLUSTER-NETWORK
admincluster.ipblockfilepath
由于您使用的是静态 IP 地址,因此必须有一个主机配置文件,如配置静态 IP 地址中所述。在 admincluster.ipblockfilepath
字段中提供主机配置文件的路径。例如:
admincluster: ipblockfilepath: "/my-config-folder/my-admin-hostconfig.yaml"
admincluster.manuallbspec(手动负载平衡模式)
管理员集群中的 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
admincluster.bigip.credentials(集成负载平衡模式)
如果您未使用集成负载平衡模式,请将 admincluster.bigip
注释掉。
如果您使用的是集成负载平衡模式,则 GKE On-Prem 需要知道 F5 BIG-IP 负载平衡器的 IP 地址、主机名、用户名和密码。设置 admincluster.bigip
下的值以提供此信息。例如:
admincluster: bigip: credentials: address: "203.0.113.2" username: "my-admin-f5-name" password: "rJDlm^%7aOzw"
admincluster.bigip.partition(集成负载平衡模式)
如果您使用的是集成负载平衡模式,则必须为管理员集群创建 BIG-IP 分区。将 admincluster.bigip.partition
设置为分区的名称。例如:
admincluster: bigip: partition: "my-admin-f5-partition"
admincluster.vips
无论您是为管理员集群使用集成负载平衡还是手动负载平衡,都需要填写 admincluster.vips
字段。
将 admincluster.vips.controlplanevip
的值设置为您已选择在负载平衡器上为管理员集群的 Kubernetes API 服务器配置的 IP 地址。将 ingressvip
的值设置为您已选择在负载平衡器上为管理员集群的 Ingress 控制器配置的 IP 地址。例如:
admincluster: vips: controlplanevip: 203.0.113.3 ingressvip: 203.0.113.4
admincluster.serviceiprange 和 admincluster.podiprange
管理员集群必须拥有用于 Service 的 IP 地址范围以及用于 pod 的 IP 地址范围。这些范围由 admincluster.serviceiprange
和 admincluster.podiprange
字段指定。当您运行 gkectl create-config
时,系统会填充这些字段。您也可以将填充值更改为您选择的值。
Service 和 pod 范围不得重叠。此外,Service 和 pod 范围不得与任何集群中节点的 IP 地址重叠。
例如:
admincluster: serviceiprange: 10.96.232.0/24 podiprange: 192.168.0.0/16
用户集群规范
用户集群规范 usercluster
包含 GKE On-Prem 创建初始用户集群所需的信息。
usercluster.vcenter.network
在 usercluster.vcenter.network
中,您可以为您的用户集群节点指定 vCenter 网络。请注意,这会替换您在 vcenter
中提供的全局设置。例如:
usercluster: vcenter: network: MY-USER-CLUSTER-NETWORK
usercluster.ipblockfilepath
由于您使用的是静态 IP 地址,因此必须有一个主机配置文件,如配置静态 IP 地址中所述。在 usercluster.ipblockfilepath
字段中提供主机配置文件的路径。例如:
usercluster: ipblockfilepath: "/my-config-folder/my-user-hostconfig.yaml"
usercluster.manuallbspec
(手动负载平衡模式)
用户集群中的 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
usercluster.bigip.credentials
(集成负载平衡模式)
如果您使用的是集成负载平衡模式,GKE On-Prem 需要知道要用于用户集群的 F5 BIG-IP 负载平衡器的 IP 地址或主机名、用户名和密码。设置 usercluster.bigip
下的值以提供此信息。例如:
usercluster: bigip: credentials: address: "203.0.113.5" username: "my-user-f5-name" password: "8%jfQATKO$#z"
usercluster.bigip.partition
(集成负载平衡模式)
如果您使用的是集成负载平衡模式,则必须为用户集群创建 BIG-IP 分区。将 usercluster.bigip.partition
设置为分区的名称。例如:
usercluster: bigip: partition: "my-user-f5-partition"
usercluster.vips
无论您是为用户集群使用集成负载平衡还是手动负载平衡,都需要填写 usercluster.vips
字段。
将 usercluster.vips.controlplanevip
的值设置为您已选择在负载平衡器上为用户集群的 Kubernetes API 服务器配置的 IP 地址。将 ingressvip
的值设置为您已选择在负载平衡器上为用户集群的 Ingress 控制器配置的 IP 地址。例如:
usercluster: vips: controlplanevip: 203.0.113.6 ingressvip: 203.0.113.7
usercluster.serviceiprange
和 usercluster.podiprange
用户集群必须拥有用于 Service 的 IP 地址范围以及用于 pod 的 IP 地址范围。这些范围由 usercluster.serviceiprange
和 usercluster.podiprange
字段指定。当您运行 gkectl create-config
时,系统会填充这些字段。您也可以将填充值更改为您选择的值。
Service 和 pod 范围不得重叠。此外,Service 和 pod 范围不得与任何集群中节点的 IP 地址重叠。
例如:
usercluster: serviceiprange: 10.96.233.0/24 podiprange: 172.16.0.0/12
usercluster.clustername
将 usercluster.clustername
的值设置为您选择的名称。请选择长度不超过 40 个字符的名称。例如:
usercluster: clustername: "my-user-cluster-1"
usercluster.masternode.replicas
usercluster.masternode.replicas
字段指定您希望用户集群具有的控制层面节点数。用户集群的控制层面节点运行用户控制层面,即 Kubernetes 控制层面组件。此值必须为 1
或 3
:
- 将此字段设置为
1
以运行一个用户控制层面。 - 如果您想拥有由三个控制层面节点(均运行用户控制层面)组成的高可用性 (HA) 用户控制层面,请将此字段设置为
3
。
usercluster.masternode.cpus
和 usercluster.masternode.memorymb
usercluster.masternode.cpus
和 usercluster.masternode.memorymb
字段指定为用户集群的每个控制层面节点分配的 CPU 数量和内存大小(以兆字节为单位)。例如:
usercluster: masternode: cpus: 4 memorymb: 8192
usercluster.workernode.replicas
usercluster.workernode.replicas
字段指定您希望用户集群拥有的工作器节点数。工作器节点运行集群工作负载。
usercluster.workernode.cpus
和 usercluster.workernode.memorymb
usercluster.masternode.cpus
和 usercluster.masternode.memorymb
字段指定为用户集群的每个工作器节点分配的 CPU 数量和内存大小(以兆字节为单位)。例如:
usercluster: workernode: cpus: 4 memorymb: 8192 replicas: 3
usercluster.oidc
如果您希望用户集群的客户端使用 OIDC 身份验证,请为 usercluster.oidc
下的字段设置值。配置 OIDC 是可选操作。
如需了解如何配置 OIDC,请参阅使用 OIDC 进行身份验证。
- 关于安装 1.0.2-gke.3 版
1.0.2-gke.3 版本引入了以下 OIDC 字段 (
usercluster.oidc
)。这些字段允许从 Google Cloud 控制台登录集群:- usercluster.oidc.kubectlredirecturl
- usercluster.oidc.clientsecret
- usercluster.oidc.usehttpproxy
在 1.0.2-gke.3 版中,如果要使用 OIDC,即使您不想从 Google Cloud 控制台登录集群,也必须填写
clientsecret
字段。在这种情况下,您可以为clientsecret
提供一个占位值:oidc: clientsecret: "secret"
usercluster.sni
服务器名称指示 (SNI) 是传输层安全协议 (TLS) 的扩展,可让服务器在单个 IP 地址和 TCP 端口上提供多个证书,具体取决于客户端指定的主机名。
如果您的 CA 已作为受信任的 CA 分发到用户集群外部的客户端,并且您希望依赖此链来识别可信集群,则可以使用向负载平衡器的外部客户端提供的额外证书来配置 Kubernetes API 服务器 IP 地址。
如需将 SNI 用于您的用户集群,您需要拥有自己的 CA 和公钥基础架构 (PKI)。您可以为每个用户集群预配单独的服务证书,GKE On-Prem 会将每个额外的服务证书添加到其各自的用户集群。
如需为用户集群的 Kubernetes API 服务器配置 SNI,请提供 usercluster.sni.certpath
(外部证书的路径)和 usercluster.sni.keypath
(外部证书私钥文件的路径)的值。例如:
usercluster: sni: certpath: "/my-cert-folder/example.com.crt" keypath: "/my-cert-folder/example.com.key"
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 密钥文件路径。
例如:
gkeconnect: projectid: "my-project" registerserviceaccountkeypath: "/my-key-folder/register-key.json" agentserviceaccountkeypath: "/my-key-folder/connect-key.json"
stackdriver
stackdriver
规范包含 GKE On-Prem 在存储由本地集群生成的日志条目时所需的信息。
将 stackdriver.projectid
设置为 Google Cloud 项目的 ID,您可以在其中查看与本地集群有关的 Stackdriver 日志。
将 stackdriver.clusterlocation
设置为您要在其中存储 Stackdriver 日志的 Google Cloud 地区。建议选择一个靠近您的本地数据中心的区域。
如果集群的网络由 VPC 控制,请将 stackdriver.enablevpc
设置为 true
。这样可以确保所有遥测流都通过 Google 的受限 IP 地址。
将 stackdriver.serviceaccountkeypath
设置为 Stackdriver Logging 服务帐号的 JSON 密钥文件路径。
例如:
stackdriver: projectid: "my-project" clusterlocation: "us-west1" enablevpc: false serviceaccountkeypath: "/my-key-folder/stackdriver-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 注册表的用户名和密码。您为 address
设置的值会自动添加到 proxy.noproxy
中。
当 Docker 从您的私有注册表中拉取映像时,该注册表必须通过提供证书来证明其身份。注册表的证书由证书授权机构 (CA) 签名。Docker 使用 CA 的证书来验证该注册表的证书。
将 privateregistryconfig.cacertpath
设置为 CA 的证书路径。例如:
privateregistryconfig: cacertpath: /my-cert-folder/registry-ca.crt
gcrkeypath
将 gcrkeypath
的值设置为您已列入许可名单的服务帐号的 JSON 密钥文件的路径。
例如:
gcrkeypath: "/my-key-folder/whitelisted-key.json"
cloudauditlogging
如果要将 Kubernetes 审核日志发送到您的 Google Cloud 项目,请填充 cloudauditlogging
规范。例如:
cloudauditlogging: projectid: "my-project" # A GCP region where you would like to store audit logs for this cluster. clusterlocation: "us-west1" # The absolute or relative path to the key file for a GCP service account used to # send audit logs from the cluster serviceaccountkeypath: "/my-key-folder/audit-logging-key.json"