5.4. 使用镜像 pull secret
如果您在使用 OpenShift Container Platform 的内部 registry,且从位于同一项目中的镜像流拉取(pull),则您的 Pod 服务帐户应已具备正确权限,且无需额外操作。
然而,对于其他场景,例如在 OpenShift Container Platform 项目间或从安全 registry 引用镜像,则还需其他配置步骤。
5.4.1. 允许 Pod 在项目间引用镜像
使用内部 registry 时,为允许 project-a 中的 Pod 引用 project-b 中的镜像,project-a 中的服务帐户必须绑定到 project-b 中的 system:image-puller
角色。
流程
要允许 project-a 中的 Pod 引用 project-b 中的镜像,请将 project-a 中的服务帐户绑定到 project-b 中的
system:image-puller
角色。$ oc policy add-role-to-user \ system:image-puller system:serviceaccount:project-a:default \ --namespace=project-b
添加该角色后,project-a 中引用默认服务帐户的 pod 能够从 project-b 拉取(pull)镜像。
要允许访问 project-a 中的任意服务帐户,请使用组:
$ oc policy add-role-to-group \ system:image-puller system:serviceaccounts:project-a \ --namespace=project-b
5.4.2. 允许 Pod 引用其他安全 registry 中的镜像
Docker 客户端的 .dockercfg
$HOME/.docker/config.json
文件是一个 Docker 凭证文件,如果您之前已登录安全或不安全的 registry,则该文件会保存您的身份验证信息。
要拉取(pull)并非来自 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 拉取(pull)镜像,您必须将该 secret 添加到您的服务帐户。本例中服务帐户的名称应与 Pod 所用服务帐户的名称匹配。
default
是默认服务帐户:$ oc secrets link default <pull_secret_name> --for=pull
要使用 secret 来推送(push)和拉取(pull)构建镜像,该 secret 必须可挂载至 Pod 中。您可通过运行以下命令实现这一目的:
$ oc secrets link builder <pull_secret_name>
5.4.2.1. 通过委托身份验证从私有 registry 拉取(pull)
私有 registry 可将身份验证委托给单独服务。这种情况下,必须为身份验证和 registry 端点定义镜像 pull secret。
流程
为委托的身份验证服务器创建 secret:
$ oc create secret docker-registry \ --docker-server=sso.redhat.com \ --docker-username=developer@example.com \ --docker-password=******** \ --docker-email=unused \ redhat-connect-sso secret/redhat-connect-sso
为私有 registry 创建 secret:
$ oc create secret docker-registry \ --docker-server=privateregistry.example.com \ --docker-username=developer@example.com \ --docker-password=******** \ --docker-email=unused \ private-registry secret/private-registry
5.4.3. 更新全局集群 pull secret
您可为集群更新全局 pull secret。
集群资源必须调整为新的 pull secret,这样可暂时限制集群的可用性。
先决条件
- 您有新的或修改的 pull secret 文件可上传。
-
您可以使用具有
cluster-admin
角色的用户访问集群。
流程
运行以下命令为您的集群更新全局 pull secret:
$ oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=<pull-secret-location> 1
- 1
- 提供新 pull secret 文件的路径。
该更新将推广至所有节点,可能需要一些时间,具体取决于集群大小。在这段时间中,节点会排空,Pod 将在剩余节点上重新调度。