7.3.5. 经过身份验证的 registry
将经过身份验证的 registry 与 docker
搭配使用需要 docker
守护进程才能登录到 registry。在 OpenShift Container Platform 中,必须执行一组不同的步骤,因为用户无法在主机上运行 docker login
命令。经过身份验证的 registry 可用于限制用户能够拉取或能够访问外部 registry 的镜像。
如果外部 Docker
registry 需要身份验证,请在使用该 registry 的项目中创建特殊 secret,然后使用该 secret 执行 docker
操作。
流程
在用户要登录到
docker
registry 的项目中创建dockercfg
secret:$ oc project <my_project> $ oc create secret docker-registry <my_registry> --docker-server=<my.registry.example.com> --docker-username=<username> --docker-password=<my_password> --docker-email=<me@example.com>
如果存在
.dockercfg
文件,请使用oc
命令创建 secret:$ oc create secret generic <my_registry> --from-file=.dockercfg=<path/to/.dockercfg> --type=kubernetes.io/dockercfg
填充
$HOME/.docker/config.json
文件:$ oc create secret generic <my_registry> --from-file=.dockerconfigjson=<path/to/.dockercfg> --type=kubernetes.io/dockerconfigjson
通过将 secret 链接到执行 pull 操作的服务帐户,使用
dockercfg
secret 从经过身份验证的 registry 拉取镜像。用于拉取镜像的默认服务帐户名为default
:$ oc secrets link default <my_registry> --for=pull
要使用 S2I 功能推送镜像,
dockercfg
secret 被挂载到 S2I pod 中,因此需要链接到执行该构建的正确服务帐户。用于构建镜像的默认服务帐户名为builder
。$ oc secrets link builder <my_registry>
在
buildconfig
中,应指定 secret 进行 push 或 pull 操作:"type": "Source", "sourceStrategy": { "from": { "kind": "DockerImage", "name": "*my.registry.example.com*/myproject/myimage:stable" }, "pullSecret": { "name": "*mydockerregistry*" }, ...[OUTPUT ABBREVIATED]... "output": { "to": { "kind": "DockerImage", "name": "*my.registry.example.com*/myproject/myimage:latest" }, "pushSecret": { "name": "*mydockerregistry*" }, ...[OUTPUT ABBREVIATED]...
如果外部 Registry 将身份验证委派给外部服务,则创建
dockercfg
secret:registry 使用 registry URL 和外部身份验证系统,并使用自己的 URL。这两个 secret 都应添加到服务帐户。$ oc project <my_project> $ oc create secret docker-registry <my_registry> --docker-server=*<my_registry_example.com> --docker-username=<username> --docker-password=<my_password> --docker-email=<me@example.com> $ oc create secret docker-registry <my_docker_registry_ext_auth> --docker-server=<my.authsystem.example.com> --docker-username=<username> --docker-password=<my_password> --docker-email=<me@example.com> $ oc secrets link default <my_registry> --for=pull $ oc secrets link default <my_docker_registry_ext_auth> --for=pull $ oc secrets link builder <my_registry> $ oc secrets link builder <my_docker_registry_ext_auth>