访问 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 密钥,请完成以下步骤:
-
创建服务标识,请参阅
ibmcloud iam service-id-create
。 -
为服务 ID 分配服务策略,以控制使用服务 ID 验证 IBM Cloud Container Registry 时允许的访问级别,请参阅 管理对资源的访问。
-
创建服务标识 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 使用不记名令牌登录注册表:
-
使用
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 密钥。 有关更多信息,请参阅 在自动化中访问命名空间。