Red Hat Container Registry 身份验证
目录
红帽通过两个位置分发容器镜像:registry.access.redhat.com (不需要身份验证)和 registry.redhat.io (需要身份验证)。由第三方供应商提供的容器镜像可从通过 registry.connect.redhat.com 获取。本文描述了:
- 使用 registry.access.redhat.com(不需要身份验证)。
- 使用 registry.redhat.io 时如何进行身份验证。
- 创建一个 registry 服务帐户,以便在共享系统上使用。
Red Hat Registry
红帽通过三个不同的容器 registry 分发容器镜像:
| Registry | 内容 | 支持 未经身份验证的访问 |
支持 红帽登录 |
支持 registry 令牌 |
|---|---|---|---|---|
| registry.access.redhat.com | 红帽产品 | 是 | 否 | 否 |
| registry.redhat.io | 红帽产品 | 否 | 是 | 是 |
| registry.connect.redhat.com | 第三方产品 | 否 | 是 | 是 |
虽然 registry.access.redhat.com 和 registry.redhat.io 基本上包含了相同的容器镜像,但有一些镜像需要有效的红帽帐户,且只能从 registry.redhat.io 获得。
获取一个红帽登录
要使用 registry.redhat.io egistry,您需要有一个红帽登录(Red Hat login)。如果您是具有红帽产品权利的客户,您已有一个帐户。这与您用来登录到红帽客户门户网站(access.redhat.com) 以及管理您的红帽订阅的账户类型相同的账户。
如果您还没有红帽帐户,可以通过以下方法之一来获得一个免费帐户:
- 红帽开发人员计划(Red Hat Developer Program):注册一个免费的开发人员帐户后,您可以访问开发人员工具和程序。
- 30 天试用订阅 : 注册 30 天试用订阅后,您可以访问选定的红帽软件产品。
在您同意了相关条款并获得红帽帐户后,您可以使用该帐户登录到新的 Red Hat registry 并获取镜像。请记住,在使用 yum 构建或更新镜像时,您仍需要来自红帽的权利才能添加或更新 RPM 软件包。
身份验证
要从经过身份验证的 registry 中检索内容,您需要使用客户门户网站账户、Red Hat Developer 身份或 Registry 服务账户登录到 registry。
备注: 要从 Red Hat OpenShift Container Platform 集群中拉取镜像,需要检查当前的 pull secret 是否有效。请参阅 在 OCP 4 节点中手动 podman pull 失败,检查拉取 secret 中的凭证是否有效,如果需要,更改全局 pull secret。
要登录到 registry.redhat.io registry,您可以使用 podman login, skopeo login, 和 buildah login。 在本文档中使用的任何 docker 命令示例都可以替换为 podman 命令。从 OpenShift、Satellite 或其他共享环境中,您需要使用服务帐户进行身份验证。
要使用 Podman 针对 registry.redhat.io 进行身份验证:
# podman login registry.redhat.io
Username: myrhusername
Password: ***********
要使用 Skopeo 针对 registry.redhat.io 进行身份验证:
# skopeo login registry.redhat.io
Username: myrhusername
Password: ***********
要使用 docker login 命令针对 registry.redhat.io 进行身份验证:
# docker login https://registry.redhat.io
Username: myrhusername
Password: ***********
您可以通过以下方法从 registry.redhat.io registry 中心拉取镜像:
使用 Skopeo 命令:
skopeo copy docker://registry.redhat.io/rhel8/pcp containers-storage:registry.redhat.io/rhel8/pcp
使用 Podman 命令:
# podman pull registry.redhat.io/rhel8/rsyslog
Username: myrhusername
Password: xxxxxxxxxxx
在登录到 registry 后,您的身份凭证保持在您的 ${XDG_RUNTIME_DIR}/containers/auth.json 文件中。当您下次从该 registry 中拉取镜像时会自动使用保持的凭证。以下是该文件的示例:
{
"auths": {
"https://registry.redhat.io": {
"auth": "c2xmams6c2RmbGtq"
}
}
}
有关保存这些凭证的其他方法,请参阅 docker login 页中有关 config.json 的描述。
对于 OpenShift 3.x 节点,还需要一个额外的步骤。登录后,您需要将 ~/.docker/config.json 复制到 /var/lib/origin/.docker/config.json 并重新启动节点。
# cp ~/.docker/config.json /var/lib/origin/.docker/config.json; systemctl restart atomic-openshift-node
用于共享环境的 registry 服务帐户
要在 OpenShift 等共享环境中使用来自 registry.redhat.io 的容器镜像,建议管理员使用 Registry 服务账户(也称为身份验证令牌)代替个人的客户门户网站凭证。
服务帐户是为一个客户门户机构提供的机制,专门用于从 registry.redhat.io 进行身份验证和检索内容。在共享的系统中,建议使用服务帐户来避免使用客户门户网站凭证。与客户门户网站帐户相比,Registry 服务账户可以避免应用到客户门户网站帐户的一些安全控制的影响(如强制进行密码重置)。创建后,Registry 服务账户不会过期,并在删除之前一直处于活跃状态。
可以通过 Registry 服务账户管理应用程序来管理服务账户。 您可以自行决定要创建的服务帐户的数量,以及如何在您的系统上使用服务帐户。作为一个指导方针,您可以选择在每个共享系统(如 OpenShift Container Platform 集群)中使用一个服务帐户。
管理 Registry 服务账户
在服务帐户管理应用程序中,有一种简单的方法来分割令牌管理的授权。创建、修改或删除服务帐户的权限是由客户门户网站登录是否分配了 机构管理员(Organization Administrato)角色来定义的。
客户门户网站机构管理员可以:
- 查看为一个机构创建的所有 Registry 服务帐户。
- 创建 Registry 服务帐户。
- 修改或删除任何 Registry 服务帐户。
客户门户网站用户(非机构管理员)可以:
- 查看一个机构的所有 Registry 服务帐户。
- 创建 Registry 服务帐户。
- 仅能修改或删除自己创建的 Registry 服务帐户。
无论一个服务帐户是由哪个用户创建的,同一机构中的其他客户门户网站用户都可以查看这个帐户。无法防止一个服务账户以及其关联的凭证信息被机构内的其它用户查看。
创建 Registry 服务账户
进入到 Registry Service Account Management Application,并根据需要登录。
- 在 Registry Service Accounts 页中,单 New Service Account 按钮。
- 为服务帐户提供一个名称。它会自动添加一个随机字符串作为前缀。
- 输入描述信息。
- 点create.
- 返回到您的服务帐户。
- 点您创建的服务帐户。
- 记录下用户名,包括前缀字符串 (例如,
XXXXXXX|username)。这是用于登录到 registry.redhat.io 的用户名。 - 记录下密码。这是用于登录到 registry.redhat.io 的密码。
- 记录下用户名,包括前缀字符串 (例如,
令牌信息页中包括了几个选项卡,提供了有关如何将身份验证令牌用于各种场景的指导。例如,Docker Login 选项卡演示了如何在 docker CLI 中使用令牌。
修改身份验证令牌
与创建服务帐户一样,管理应用还提供了修改或删除帐户的功能。可以使用每个身份验证令牌右面的弹出菜单,通过Registry Service Accounts 页实现这些功能。每个功能的描述信息如下:
- 重新生成令牌:允许授权用户重置与服务帐户关联的密码,服务帐户的用户名不能被改变。
- 更新描述:允许授权用户更新服务帐户的描述信息。
- 删除帐户:允许授权用户删除服务帐户。
警告:重新生成或删除服务帐户将会影响到任何使用相关令牌进行验证并从 registry.redhat.io 检索内容的系统。
允许 pod 引用来自其它安全 registry 中的镜像
.dockercfg 文件(对于较新的 Docker 客户端,$HOME/.docker/config.json)是一个 Docker 凭据文件,如果您之前已登录到一个安全或不安全的 registry,则会存储您的信息。
要拉取一个不是来自 OpenShift Container Platform 内部 registry的安全容器镜像,您必须通过 Docker 凭据创建一个 pull secret,并将其添加到您的服务帐户。
如果您已有一个安全 registry 的 .dockercfg 文件,可以运行以下命令来从该文件创建一个 secret:
$ oc create secret generic <pull_secret_name> \
--from-file=.dockercfg=<path/to/.dockercfg> \
--type=kubernetes.io/dockercfg
或者,如果您有一个 $HOME/.docker/config.json 文件:
$ oc create secret generic <pull_secret_name> \
--from-file=.dockerconfigjson=<path/to/.docker/config.json> \
--type=kubernetes.io/dockerconfigjson
如果您还没有安全的 registry 的 Docker 凭据文件,可以运行以下命令创建一个 secret:
$ oc create secret docker-registry <pull_secret_name> \
--docker-server=<registry_server> \
--docker-username=<user_name> \
--docker-password=<password> \
--docker-email=<email>
要使用一个 secret 来为 pod 拉取镜像,您需要将 secret 添加到您的服务帐户。本例中的服务帐户的名称与 pod 中使用的服务帐户的名称匹配; default 是默认的服务帐户:
$ oc secrets link default <pull_secret_name> --for=pull
要使用 secret 推送和拉取构建镜像,secret 在 pod 中需要是可以挂载的。您可以运行以下命令:
$ oc secrets link builder <pull_secret_name>
对于构建,您需要在您的构建配置内引用 secret 作为 pull secret。
了解更多有关 Red Hat Registry 的信息
以下是一些其他资源,可帮助您开始使用 registry.redhat.io:
- 故障排除:如果您在一个高安全性的环境中,可能需要对代理进行内部更改以将 registry.redhat.io 加入到白名单。您可以参阅 Troubleshooting Authentication Issues with registry.redhat.io 中的信息来验证与 registry.redhat.io 的连接。
- 如何获得进一步的帮助:如果您需要进一步的帮助,请在红帽客户门户网站中为您的产品创建一个支持问题单。
Comments