本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

Kubernetes 注册表和容器镜像注册表

注册表是包含凭据的 Kubernetes 秘密,用于与 私有容器注册表 进行身份验证。

“注册表”一词可以有两种含义,具体取决于它是用于指容器注册表还是 Kubernetes 注册表:

  • 容器镜像注册表(以前称为“Docker 注册表”)包含您可以拉取和部署的容器镜像。注册表是一个无状态、可扩展的服务器端应用程序,存储并允许您分发容器镜像。

  • Kubernetes 注册表 是一个镜像拉取秘密,您的部署使用它与镜像注册表进行身份验证。

部署使用 Kubernetes 注册表秘密与私有镜像注册表进行身份验证,然后拉取托管在其上的容器镜像。

目前,只有在 Rancher UI 中创建工作负载时,部署才会自动拉取私有注册表凭据,而在通过 kubectl 创建时则不会。

在名称空间中创建注册表

前提条件:

您必须已经部署一个可用的私有注册表。

如果您需要创建一个私有注册表,请参考您各自运行时的文档页面:

  1. 在左上角,单击*☰ > 集群管理*。

  2. 前往您想要添加注册表的集群,然后点击 探索

  3. 在左侧导航中,点击 存储  秘密更多资源  核心  秘密

  4. 单击*创建*。

  5. 点击 注册表

  6. 输入注册表的 名称

    Kubernetes 将秘密、证书和注册表都归类为 秘密,并且在一个项目或命名空间中不能有两个秘密具有相同的名称。因此,为了防止冲突,您的注册表在工作区内必须具有唯一名称。

  7. 为注册表选择一个名称空间。

  8. 选择托管您私有注册表的网站。然后输入与注册表进行身份验证的凭据。例如,如果您使用 Docker Hub,请提供您的 Docker Hub 用户名和密码。

  9. 单击 保存

结果:

  • 您的秘密已添加到您选择的命名空间中。

  • 您可以通过点击 存储  秘密更多资源  核心  秘密 在 Rancher UI 中查看秘密。

  • 在 Rancher UI 中创建的任何工作负载,如果工作负载在注册表的范围内,将具有访问注册表的凭据。

在项目中创建注册表

先决条件:

您必须已经部署一个可用的私有注册表。

如果您需要创建一个私有注册表,请参考您各自运行时的文档页面:

在 v2.6 之前,秘密必须在项目范围内。项目不再是必需的,您可以改为使用命名空间范围。因此,Rancher UI 已更新以反映此新功能。但是,如果需要,您仍然可以创建一个项目范围的镜像仓库。请按照以下步骤进行操作:

  1. 在左上角的下拉菜单中,单击 ☰ > 全局设置

  2. 单击 功能标志

  3. 转到 legacy 功能标志并单击 激活

  4. 在左上角,单击*☰ > 集群管理*。

  5. 前往您想要添加镜像仓库的集群,然后点击 探索

  6. 在左侧导航中,点击 存储  秘密更多资源  核心  秘密

  7. 单击*创建*。

  8. 点击 注册表

  9. 在顶部导航栏中,筛选以仅查看一个项目。

  10. 输入注册表的 名称

    Kubernetes 将秘密、证书和注册表都归类为 秘密,并且在一个项目或命名空间中不能有两个秘密具有相同的名称。因此,为了防止冲突,您的注册表在工作区内必须具有唯一名称。

  11. 为注册表选择一个命名空间。

  12. 选择托管您私有注册表的网站。然后输入与镜像仓库进行身份验证的凭据。例如,如果您使用 Docker Hub,请提供您的 Docker Hub 用户名和密码。

  13. 单击 保存

结果:

  • 您的秘密已添加到您选择的单个项目中。

  • 您可以通过点击 存储  秘密更多资源  核心  秘密 在 Rancher UI 中查看秘密。

  • 在 Rancher UI 中创建的任何工作负载,如果工作负载在注册表的范围内,将具有访问注册表的凭据。

在本地群集(local cluster)中,项目范围的注册表仅在选择单个项目时可见。

使用私有镜像仓库

您可以通过 Rancher UI 或使用 kubectl,部署使用私有镜像仓库中镜像的工作负载。

在 Rancher UI 中使用私有镜像仓库

要使用您私有镜像仓库中的镜像部署工作负载,

  1. 在左上角,单击*☰ > 集群管理*。

  2. 前往您想要部署工作负载的集群,并点击*探索*。

  3. 单击*工作负载*。

  4. 单击*创建*。

  5. 选择要创建的工作负载类型。

  6. 输入工作负载的唯一名称并选择一个命名空间。

  7. 在*容器镜像*字段中,输入您私有注册表中镜像路径的URL。例如,如果您的私有注册表在Quay.io上,您可以使用`quay.io/<Quay profile name>/<Image name>`。

  8. 单击*创建*。

*结果:*您的部署应该启动,使用您在Rancher UI中添加的私有注册表凭据进行身份验证,并拉取您指定的容器镜像。

在kubectl中使用私有注册表

当您使用`kubectl`创建工作负载时,您需要配置pod,使其YAML中包含私有注册表中镜像的路径。您还必须创建并引用注册表密文,因为pod只有在Rancher UI中创建时才能自动获取对私有注册表凭据的访问权限。

密文必须在工作负载部署的同一命名空间中创建。

以下是一个使用私有注册表中镜像的工作负载示例`pod.yml`。在此示例中,pod使用来自Quay.io的镜像,.yml文件指定了镜像的路径。pod使用存储在名为`testquay`的Kubernetes密文中的凭据与注册表进行身份验证,该密文在`spec.imagePullSecrets`的`name`字段中指定:

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: quay.io/<Quay profile name>/<image name>
  imagePullSecrets:
  - name: testquay

在此示例中,名为`testquay`的密文位于默认命名空间中。

您可以使用`kubectl`创建包含私有注册表凭据的密文。此命令创建名为`testquay`的密文:

kubectl create secret docker-registry testquay \
    --docker-server=quay.io \
    --docker-username=<Profile name> \
    --docker-password=<password>

要查看密文在 Kubernetes 中是如何存储的,您可以使用以下命令:

kubectl get secret testquay --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode

结果如下所示:

{"auths":{"quay.io":{"username":"<Profile name>","password":"<password>","auth":"c291bXlhbGo6dGVzdGFiYzEyMw=="}}}

工作负载部署后,您可以检查镜像是否成功拉取:

kubectl get events

结果应如下所示:

14s         Normal    Scheduled          Pod    Successfully assigned default/private-reg2 to minikube
11s         Normal    Pulling            Pod    pulling image "quay.io/<Profile name>/<image name>"
10s         Normal    Pulled             Pod    Successfully pulled image "quay.io/<Profile name>/<image name>"

有关更多信息,请参阅 Kubernetes 文档中关于 创建使用您密文的 Pod 的内容。