您可以将 Google Distributed Cloud 集群配置为使其工作器节点能够使用私有注册表。节点级私有注册表用于工作负载,可让您更好地控制映像拉取及其相关安全性。按照本文档中的说明使用私有注册表配置集群时,Google Distributed Cloud 会相应地更新 containerd 配置。配置集群后,合格节点上的所有 Pod 都可以使用注册表,而无需在 Pod 规范中指定 imagePullSecrets
。
在集群生命周期中,您可以随时启用或停用此功能。
前提条件
如需使用此预览版功能,您的集群必须满足以下要求:
- 集群版本必须为 1.29。
- 节点池版本必须为 1.29(并非所有节点池都需要为 1.29 版,但该功能仅适用于 1.29 版中的节点池)。
- 集群必须具有
preview.baremetal.cluster.gke.io/private-registry: "enable"
预览版功能注解。 此功能适用于具有工作器节点池的用户集群和自行管理(混合和独立)集群,如下表所示:
部署模型 支持的集群类型 管理员集群和用户集群部署 管理员集群
用户集群 1
用户集群 2
混合集群部署 混合集群
用户集群 1
用户集群 2
独立集群部署 独立集群
为私有注册表配置自行管理的集群
如需将独立集群或混合集群配置为使用节点级层私有注册表,请执行以下操作:
修改集群配置文件,在凭据部分添加
privateRegistries
代码块:--- gcrKeyPath: baremetal/gcr.json sshPrivateKeyPath: .ssh/id_rsa ... privateRegistries: - host: REGISTRY_HOST caCertPath: CA_CERT_PATH pullCredentialConfigPath: CREDENTIALS_FILE_PATH ... --- apiVersion: v1 kind: Namespace metadata: name: cluster-hybrid-basic --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: hybrid-basic namespace: cluster-hybrid-basic annotations: preview.baremetal.cluster.gke.io/private-registry: "enable" ... spec: type: hybrid ...
请替换以下内容:
REGISTRY_HOST
:私有注册表的域名或 IP 地址以及端口。例如:10.200.0.2:5007
。CA_CERT_PATH
:CA 证书文件的路径(服务器根 CA)。例如:/root/cert.pem
。如果您的专用注册表不需要使用专用 TLS 证书,则可以省略此字段。CREDENTIALS_FILE_PATH
:包含访问您的专用注册表的凭据的文件的路径。例如:/root/.docker/config.json
。如果您的私有注册表服务器不需要使用凭据进行身份验证,则可以省略此字段。
将更改应用于您的集群:
bmctl update cluster -c CLUSTER_NAME --kubeconfig=CLUSTER_KUBECONFIG
请替换以下内容:
CLUSTER_NAME
:您要更新的集群的名称。CLUSTER_KUBECONFIG
:自管(混合或独立)集群 kubeconfig 文件的路径。
为专用注册表配置用户集群
对于用户集群,私有注册表配置是在集群资源规范中指定的。此外,对于用户集群,您需要将私有注册表凭据存储在 Secret 中:
为注册表凭据创建
kubernetes.io/dockerconfigjson
类型的 Kubernetes Secret:如果您想将 Secret 的作用域限定为特定命名空间,请将
--namespace
标志添加到以下命令中,以指定命名空间的名称。kubectl create secret docker-registry CREDS_SECRET_NAME \ --from-file=.dockerconfigjson=CREDENTIALS_FILE_PATH \ --kubeconfig=ADMIN_KUBECONFIG
请替换以下内容:
CREDS_SECRET_NAME
:Secret 的名称。CREDENTIALS_FILE_PATH
:Docker 配置文件的路径。例如/root/.docker/config.json
。
您的 Secret 应类似于以下示例:
apiVersion: v1 data: .dockerconfigjson: ewoJImF1dGhzIjogewoJ...clpYSXdNak14IgoJCX0KCX0KfQ== kind: Secret metadata: creationTimestamp: "2024-04-28T22:06:06Z" name: private-registry-secret namespace: default resourceVersion: "5055821" ... annotations: ... baremetal.cluster.gke.io/mark-source: "true" type: kubernetes.io/dockerconfigjson
如果 Secret 与集群不在同一个命名空间中,请添加注释
baremetal.cluster.gke.io/mark-source: "true"
,如上述示例所示。如果适用,请将该注册表的 CA 证书存储在 Secret 中。
Secret 类似于以下内容:
apiVersion: v1 kind: Secret metadata: annotations: baremetal.cluster.gke.io/mark-source: "true" name: ca-9dd74fd308bac6df562c7a7b220590b5 namespace: some-namespace type: Opaque data: ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2RENDQXFTZ0F3SUJBZ0lVQi 3UGxjUzVFVk8vS0xuYjZiMHRhRFVleXJvd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2ZqRUxNQWtHQ ... QnpPTkxTRFZJVk5LMm9YV1JvNEpJY0ZoNFZ4MWRMRHpqMldEaHhrUEljWEhLdGR3dk5iS2tocU LUVORCBDRVJUSUZJQ0FURS0tLS0tCg== ```
修改用户集群配置文件以启用和配置私有注册表:
添加注解
preview.baremetal.cluster.gke.io/private-registry: "enable"
以启用预览版中的私有注册表。apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-basic namespace: cluster-user-basic resourceVersion: "766027" annotations: ... preview.baremetal.cluster.gke.io/private-registry: "enable" ...
在用户集群配置文件的
nodeConfig
部分中,添加privateRegistries
块:apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-basic ... spec: bypassPreflightCheck: false ... nodeConfig: containerRuntime: containerd podDensity: maxPodsPerNode: 250 privateRegistries: - caCertSecretRef: name: CA_CERT_SECRET_NAME namespace: CA_CERT_SECRET_NAMESPACE host: REGISTRY_HOST pullCredentialSecretRef: name: CREDS_SECRET_NAME namespace: CREDS_SECRET_NAMESPACE
请替换以下内容:
CA_CERT_SECRET_NAME
:您创建的用于存储 CA 证书的 Secret 的名称。如果您没有创建此 Secret,请移除caCertSecretRef
代码块。CA_CERT_SECRET_NAMESPACE
:CA 证书 Secret 的命名空间的名称(如果您创建了该命名空间)。REGISTRY_HOST
:私有注册表和端口的域名或 IP 地址。例如:10.200.0.2:5007
。CREDS_SECRET_NAME
:注册表凭据的kubernetes.io/dockerconfigjson
类型 Secret 的名称。CREDS_SECRET_NAMESPACE
:包含注册表凭据的 Secret 的命名空间名称。
将更改应用到集群:
bmctl update cluster -c USER_CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
请替换以下内容:
USER_CLUSTER_NAME
:您要更新的集群的名称。ADMIN_KUBECONFIG
:管理员集群 kubeconfig 文件的路径。