第 6 章 访问并配置 Red Hat Registry
6.1. 启用身份验证的 Red Hat Registry
Red Hat Container Catalog (registry.access.redhat.com
)是一个托管的镜像 registry,通过它可以获得所需的容器镜像。OpenShift Container Platform 3.11 Red Hat Container Catalog 从 registry.access.redhat.com
移到 registry.redhat.io
。
新的 registry(Registry.redhat.io
)需要进行身份验证才能访问OpenShift Container Platform上的镜像及内容。当迁移到新registry后,现有的registry仍将在一段时间内可用。
OpenShift Container Platform从Registry.redhat.io中
提取(pull)镜像,因此需要配置集群以使用它。
新registry使用标准的OAuth机制进行身份验证:
- 身份验证令牌。令牌(token)是服务帐户,由管理员生成。系统可以使用它们与容器镜像registry进行身份验证。服务帐户不受用户帐户更改的影响,因此使用令牌进行身份验证是一个可靠且具有弹性的方法。这是生产环境集群中唯一受支持的身份验证选项。
-
Web用户名和密码。这是用于登录到诸如
access.redhat.com
之类的资源的标准凭据集。虽然可以在OpenShift Container Platform上使用此身份验证方法,但在生产环境部署中不支持此方法。此身份验证方法应该只限于在OpenShift Container Platform之外的独立项目中使用。
您可以在 docker login
中使用您的凭证(用户名和密码,或身份验证令牌)来访问新 registry 中的内容。
所有镜像流均指向新的registry。由于新 registry 需要进行身份验证才能访问,因此 OpenShift 命名空间中有一个名为 imagestreamsecret
的新机密。
您需要将凭据放在两个位置:
- OpenShift 命名空间 。您的凭据必须存在于 OpenShift 命名空间中,以便 OpenShift 命名空间中的镜像流可以导入。
- 您的主机。您的凭据必须存在于主机上,因为在抓取(pull)镜像时,Kubernetes会使用主机中的凭据。
访问新 registry:
-
验证镜像导入 secret(
imagestreamsecret
)是否位于 OpenShift 命名空间中。该 secret 具有允许您访问新 registry 的凭证。 -
验证所有集群节点都有一个
/var/lib/origin/.docker/config.json
,可以从 master 中复制,供您访问红帽 registry。
6.1.1. 创建用户帐户
如果您是有权使用红帽产品的红帽客户,则拥有具有适用用户凭证的帐户。这些是您用于登录到红帽客户门户的用户名和密码。
如果您没有帐户,可以通过注册以下选项之一获取免费帐户:
6.1.2. 为 Red Hat Registry 创建服务帐户和身份验证令牌
如果您的组织管理共享帐户,则必须创建令牌。管理员可以创建、查看和删除与组织关联的所有令牌。
先决条件
- 用户凭证
流程
要创建令牌以完成 docker login
,请执行以下操作 :
-
导航到
registry.redhat.io
。 - 使用您的红帽网络(RHN)用户名和密码登录。
出现提示时接受条款.
- 如果未立即提示您接受条款,则在继续以下步骤时会提示您。
在 Registry Service Accounts 页面中点 Create Service Account
- 为服务帐户提供名称。它将带有一个随机字符串。
- 输入描述。
- 单击 create。
- 切回到您的服务帐户。
- 点您创建的服务帐户。
- 复制用户名,包括前缀字符串。
- 复制令牌。
6.1.3. 管理用于安装和升级的 registry 凭证
您还可以在安装过程中使用 Ansible 安装程序管理 registry 凭据。
这将设置以下内容:
-
OpenShift 命名空间中的
imagestreamsecret
。 - 所有节点上的凭据。
当您将 registry.redhat.io
的默认值用于 openshift_examples_registryurl
或 oreg_url
时,Ansible 安装程序将需要凭证。
先决条件
- 用户凭证
- 服务帐户
- 服务帐户令牌
流程
要在安装过程中使用 Ansible 安装程序管理 registry 凭证:
-
在安装或升级过程中,指定安装程序清单中的
oreg_auth_user
和oreg_auth_password
变量。
如果您已创建了令牌,请将 oreg_auth_password
设置为令牌的值。
需要访问其他经过身份验证的 registry 的集群可以通过设置 openshift_additional_registry_credentials
来配置 registry 列表。每个 registry 都需要主机和密码值,您可以通过设置用户来指定用户名。默认情况下,通过尝试检查指定 registry 上的镜像 openshift3/ose-pod
来验证指定的凭证。
要指定备用镜像,请执行以下操作:
-
设置
test_image
。 -
通过将
test_login
设置为 False 来禁用凭据验证。
如果 registry 不安全,则将 tls_verify
设置为 False。
此列表中的所有凭据都将在 OpenShift 命名空间中创建 imagestreamsecret
,并部署到所有节点的凭据。
例如:
openshift_additional_registry_credentials=[{'host':'registry.example.com','user':'name','password':'pass1','test_login':'False'},{'host':'registry2.example.com','password':'token12345','tls_verify':'False','test_image':'mongodb/mongodb'}]
6.1.4. 在 Red Hat Registry 中使用服务帐户
在为 Red Hat Registry 创建服务帐户和生成的令牌后,您可以执行其他任务。
本节提供了手动步骤,可以通过提供 管理 registry Credentials for Installation 和 Upgrade 部分中概述的清单变量来自动执行这些步骤。
先决条件
- 用户凭证
- 服务帐户
- 服务帐户令牌
流程
在 Registry Service Accounts 页面中点击您的帐户名称。在这里,您可以执行以下任务:
- 在 Token Information 选项卡中,您可以查看您的用户名(您提供的带有随机字符串的名称)和密码(令牌)。在此选项卡中,您可以重新生成令牌。
在 OpenShift Secret 选项卡中,您可以:
- 单击选项卡中的链接,以下载该机密。
将 secret 提交到集群:
# oc create -f <account-name>-secret.yml --namespace=openshift
使用
imagePullSecrets
字段在 Kubernetes pod 配置中添加对 secret 的引用来更新 Kubernetes 配置,例如:apiVersion: v1 kind: Pod metadata: name: somepod namespace: all spec: containers: - name: web image: registry.redhat.io/REPONAME imagePullSecrets: - name: <numerical-string-account-name>-pull-secret
在 Docker Login 选项卡中,您可以运行
docker login
。例如:# docker login -u='<numerical-string|account-name>' -p=<token>
成功登录后,将
~/.docker/config.json
复制到/var/lib/origin/.docker/config.json
,然后重新启动节点。# cp -r ~/.docker /var/lib/origin/ systemctl restart atomic-openshift-node
在 Docker Configuration 选项卡中,您可以:
- 单击选项卡中的链接,下载凭据配置。
通过将文件放入 Docker 配置目录中,将配置写入到磁盘。这将覆盖现有的凭据。例如:
# mv <account-name>-auth.json ~/.docker/config.json