IBM Cloud Docs
访问 Container Registry

访问 Container Registry

要访问 IBM Cloud® Container Registry 命名空间以便推拉图像,请使用 IBM Cloud® Identity and Access Management (IAM)。

所有账户都需要 IAM 访问策略。 要设置和管理 IAM 访问策略,请参阅 定义 IAM 访问策略

对 IBM Cloud Container Registry 的访问要么是 自动化的 (通常使用 API 密钥),要么是 交互式的 (通常使用承载令牌)。

如果您有 IAM 访问策略,但却收到 Access denied 错误,请参阅“为什么我收到 Access denied 错误?”获取帮助。

如果您想在 Kubernetes 部署中使用容器映像,请参阅 使用映像拉取密钥从非默认 Kubernetes 命名空间访问其他 IBM Cloud 账户或外部私有注册表中的映像

在自动化中访问命名空间

您可以使用服务标识 API 密钥,将容器映像自动推送到名称空间,以及将其从名称空间自动拉出。

API 密钥用于验证和授权API请求的唯一代码。 代码被传递给应用程序接口(API),用于识别调用应用程序或用户,并跟踪和控制API的使用情况。与您账户中的用户 ID 或服务 ID 相关联,您可以在 IBM Cloud® 上使用它们。 您可以在 CLI 中或者在自动化过程中使用 API 密钥,以使用您的用户或服务身份认证。 用户 API 密钥与用户及其访问策略相关联。 服务 ID API 密钥 有自己的访问策略。 您可以拥有多个具有不同细粒度策略的服务 ID,这样就能为您的自动化授予特定和有限的功能。

创建 IBM Cloud Kubernetes Service 或 Red Hat® OpenShift® on IBM Cloud® 群集时,群集将使用 IBM Cloud IAM 服务 ID 创建,该 ID 将被赋予 IAM 阅读器服务访问策略,访问 IBM Cloud Container Registry。 服务 ID 凭据在一个不过期的服务 ID API 密钥中进行验证,该密钥存储在群集中的图像拉取机密中。 映像拉取私钥将添加到 default Kubernetes 名称空间和此 Kubernetes 名称空间的 default 服务帐户中的私钥列表。 如果需要更多服务标识 API 密钥或缺少服务标识 API 密钥,可以手动创建服务标识 API 密钥

您可以在以下位置使用服务标识 API 密钥:

  • IBM Cloud Kubernetes Service 或 Red Hat OpenShift on IBM Cloud 集群。 创建 IBM Cloud Kubernetes Service 和 Red Hat OpenShift on IBM Cloud 集群时,将自动为每个集群创建一个服务标识。 如果需要多个服务标识,可以手动进行创建。
  • Kubernetes 和 集群,这些集群不在 上。Red Hat® OpenShift® IBM Cloud 您必须创建自己的服务标识、API 密钥和拉取私钥。
  • Docker CLI 和其他客户机。 您必须创建自己的服务标识和 API 密钥。

手动创建服务标识 API 密钥

创建服务 ID API 密钥,用于登录注册表。

要创建服务标识 API 密钥,请完成以下步骤:

  1. 创建服务标识,请参阅 ibmcloud iam service-id-create

  2. 为服务 ID 分配服务策略,以控制使用服务 ID 验证 IBM Cloud Container Registry 时允许的访问级别,请参阅 管理对资源的访问

  3. 创建服务标识 API 密钥,请参阅管理服务标识 API 密钥ibmcloud iam service-api-key-create

手动创建用户 API 密钥

创建一个用户 API 密钥,用于登录注册表。

如果创建了用户 API 密钥,则会使用该用户的访问策略。

要创建用户 API 密钥,请参阅管理用户 API 密钥ibmcloud iam api-key-create

使用客户端软件在自动化中进行身份验证

使用普通客户端使用 API 密钥登录注册表。

客户端需要一个 API 密钥和域,请将 API_KEY 替换为您的 API 密钥,将 REGISTRY_DOMAIN 替换为设置命名空间的注册表域。

注册域名
区域 前身为 REGISTRY_DOMAIN
global 不适用 icr.io
au-syd ap-south au.icr.io
br-sao 不适用 br.icr.io
ca-tor 不适用 ca.icr.io
eu-de eu-central de.icr.io
eu-es 不适用 es.icr.io
eu-gb uk-south uk.icr.io
jp-osa 不适用 jp2.icr.io
jp-tok ap-north jp.icr.io
us-south 不适用 us.icr.io

有关如何在 Continuous Delivery 管道中使用 IBM Cloud Container Registry 的更多信息,请参阅 使用专用图像注册表

以下客户端提供了如何自动通过注册表进行身份验证的示例:

使用 Buildah 对注册表进行身份验证

您可以使用 Buildah 与注册表进行身份验证,这样就可以向注册表推送和从注册表拉取映像。

运行以下 Buildah 命令,使用 API 密钥 和域 登录注册表,将 API_KEY 替换为 API 密钥,将 REGISTRY_DOMAIN 替换为域:

buildah login -u iamapikey -p API_KEY REGISTRY_DOMAIN

使用 Docker 对注册表进行身份验证

可以使用 Docker 通过注册表进行认证,以便可以向注册表推送映像,以及从注册表拉出映像。

运行以下 Docker 命令,使用 API 密钥 和域 登录注册表,将 API_KEY 替换为 API 密钥,将 REGISTRY_DOMAIN 替换为域:

docker login -u iamapikey -p API_KEY REGISTRY_DOMAIN

使用 Podman 对注册表进行身份验证

您可以使用 Podman 与注册表进行身份验证,这样就可以向注册表推送和从注册表拉取映像。

运行以下 Podman 命令,使用 API 密钥 和域 登录注册表,将 API_KEY 替换为 API 密钥,将 REGISTRY_DOMAIN 替换为域:

podman login -u iamapikey -p API_KEY REGISTRY_DOMAIN

使用 Skopeo 对注册表进行身份验证

您可以使用 Skopeo 与注册表进行身份验证,这样就可以向注册表推送和从注册表拉取映像。

例如,您可以使用以下 Skopeo 命令从 Docker Hub 提取图像并将其推送到您的命名空间。 将 REGISTRY_DOMAIN 替换为您的 域名,将 NAMESPACE 替换为您的命名空间,将 API_KEY 替换为您的 API 密钥:

skopeo --insecure-policy --override-os linux copy docker://busybox:latest docker://REGISTRY_DOMAIN/NAMESPACE/busybox:latest --dest-creds iamapikey:API_KEY

交互式访问命名空间

您可以使用承载令牌和刷新令牌,以交互方式向命名空间推送或从命名空间拉取图像。

以下客户端提供了交互式访问命名空间的示例:

使用 Buildah 访问命名空间

使用 Buildah CLI 登录注册表。

您可以使用 Buildah CLI,使用承载令牌登录注册表,请将 REGISTRY_DOMAIN 替换 为域

ibmcloud iam oauth-tokens | sed -ne '/IAM token/s/.* //p' | buildah login -u iambearer --password-stdin REGISTRY_DOMAIN

使用 Docker 访问命名空间

使用 Docker CLI 登录注册表。

Docker 您可以在 IBM Cloud CLI 中使用刷新令牌来登录注册表:

ibmcloud cr login --client docker

您可以使用 Docker CLI 使用不记名令牌登录注册表:

  1. 使用 ibmcloud iam oauth-tokens.

  2. 使用 docker login 命令登录注册表。 将 BEARER_TOKEN 替换为承载令牌,将 REGISTRY_DOMAIN 替换为 域名

    docker login -u iambearer --password BEARER_TOKEN REGISTRY_DOMAIN
    

使用 Podman 访问命名空间

登录注册表,使用 CLI 提取映像,其中 IMAGE_NAME 是映像的名称。

ibmcloud cr login --client podman
podman pull IMAGE_NAME

使用 Skopeo 访问命名空间

使用 Skopeo CLI 登录注册表。

您可以使用 Skopeo CLI,使用承载令牌登录注册表,请将 REGISTRY_DOMAIN 替换 为域

ibmcloud iam oauth-tokens | sed -ne '/IAM token/s/.* //p' | skopeo login -u iambearer --password-stdin REGISTRY_DOMAIN

以编程方式访问命名空间

在 IBM Cloud Container Registry 中使用您自己的代码访问您的命名空间。

大多数用户可以使用 ibmcloud cr login 命令来简化 docker login,但如果正在实施自动化或使用不同的客户端,则可能需要手动进行身份验证。 您必须提供用户名和密码。 在 IBM Cloud Container Registry 中,用户名表示密码中的秘密类型。

以下用户名有效:

  • iambearer 密码包含 IAM 访问令牌。 此类型认证的有效时间较短,但可从所有类型的 IAM 身份派生。 例如,从 ibmcloud iam oauth-tokens
  • iamrefresh 密码包含 IAM 刷新令牌,注册表内部使用该令牌生成 IAM 访问令牌。 此类型认证的有效时间较长。 此认证类型由 ibmcloud cr login 命令使用。
  • iamapikey 密码是 IAM API 密钥,注册表内部使用它来生成 IAM 访问令牌。 此类型认证是实施自动化情况的首选类型。 您可以使用用户 API 密钥或服务 ID API 密钥。 有关更多信息,请参阅 在自动化中访问命名空间