您可以将 Google Distributed Cloud 集群配置为使其工作器节点能够使用私有注册表。节点级私有仓库旨在与您的工作负载搭配使用,以便您更好地控制映像拉取以及相关的安全性。按照本文档中的说明使用私有注册表配置集群时,Google Distributed Cloud 会相应地更新 containerd 配置。集群配置完成后,符合条件的节点上的所有 Pod 都可以使用仓库,而无需在 Pod 规范中指定 imagePullSecrets
。
您可以在集群生命周期中随时启用或停用此功能。
以下列表展示了此功能的各个版本的发布阶段:
- 1.30 及更高版本:正式版
- 1.29:预览版
前提条件
1.30 及更高版本
如需使用此正式版功能,您的集群必须满足以下要求:
- 集群版本必须为 1.30 或更高版本。
- 节点池版本必须为 1.29 或更高版本(1.30 版集群可以有 1.28 版节点池,但此功能仅适用于 1.29 版或更高版本的节点池)。
此功能适用于用户集群和具有工作器节点池的自行管理(混合和独立)集群,如下表所示:
部署模型 支持的集群类型 管理员集群和用户集群部署 管理员集群
用户集群 1
用户集群 2
混合集群部署 混合集群
用户集群 1
用户集群 2
独立集群部署 独立集群
1.29
如需使用此预览版功能,您的集群必须满足以下要求:
- 集群版本必须为 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" # Version 1.29 clusters only ... spec: type: hybrid ...
请替换以下内容:
REGISTRY_HOST
:私有仓库的域名或 IP 地址以及端口。例如:10.200.0.2:5007
。CA_CERT_PATH
:CA 证书文件(服务器根 CA)的路径。例如:/root/cert.pem
。如果您的私有仓库不需要使用专用 TLS 证书,则可以省略此字段。CREDENTIALS_FILE_PATH
:Docker 配置文件config.json
的路径(例如$HOME/.docker/config.json
)。如需对 Docker 进行身份验证以访问您的私有仓库,config.json
必须在文件的auths
部分包含以 base64 编码的凭据版本。您可以按照 Artifact Registry 文档中的服务账号密钥中的说明正确填充auths
部分。为了保护敏感数据,您可以使用chown
和chmod
来限制对 Docker 配置文件的访问权限(如果该文件包含凭据)。如果您的私有仓库服务器不需要凭据来进行身份验证,则可以省略
pullCredentialConfigPath
字段。
将更改应用于集群:
bmctl update cluster -c CLUSTER_NAME --kubeconfig=CLUSTER_KUBECONFIG
请替换以下内容:
CLUSTER_NAME
:您要更新的集群的名称。CLUSTER_KUBECONFIG
:自行管理(混合或独立)集群 kubeconfig 文件的路径。
将用户集群配置为使用私有仓库
对于用户集群,私有仓库配置是在用户集群资源规范(位于管理员集群中)中指定的。此外,您还需要将私有仓库凭据存储在 Secret 中,该 Secret 也位于管理员集群中:
为仓库凭据创建
kubernetes.io/dockerconfigjson
类型的 Kubernetes Secret:如果您想将 Secret 的范围限定为特定命名空间,请将
--namespace
标志添加到以下命令中,以指定命名空间的名称。如果 Secret 与集群位于不同的命名空间中,请添加注解baremetal.cluster.gke.io/mark-source: "true"
,如本步骤末尾的示例所示。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 配置文件config.json
的路径(例如$HOME/.docker/config.json
)。如需对 Docker 进行身份验证以访问您的私有仓库,config.json
必须在文件的auths
部分包含以 base64 编码的凭据版本。您可以按照 Artifact Registry 文档中的服务账号密钥中的说明正确填充auths
部分。为了保护敏感数据,您可以使用chown
和chmod
来限制对 Docker 配置文件的访问权限(如果该文件包含凭据)。如果您的私有仓库服务器不需要凭据来进行身份验证,则可以省略
pullCredentialConfigPath
字段。
您的 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
如果适用,请将仓库的 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== ```
修改用户集群配置文件以启用和配置私有仓库:
仅对于 1.29 版集群,请添加预览版功能注解
preview.baremetal.cluster.gke.io/private-registry: "enable"
以启用此功能。对于 1.30 版及更高版本的集群,默认启用私有仓库功能。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 的命名空间的名称(如果您创建了该 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 文件的路径。