您可以配置 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"
预览功能注解。
为私有注册表配置自行管理集群
如需将独立集群或混合集群配置为使用节点级私有注册表,请执行以下操作:
修改集群配置文件,在凭据部分添加
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"
,以在 Preview 期间启用私有注册表。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 文件的路径。