7.3.5. 经过身份验证的 registry


将经过身份验证的 registry 与 docker 搭配使用需要 docker 守护进程才能登录到 registry。在 OpenShift Container Platform 中,必须执行一组不同的步骤,因为用户无法在主机上运行 docker login 命令。经过身份验证的 registry 可用于限制用户能够拉取或能够访问外部 registry 的镜像。

如果外部 Docker registry 需要身份验证,请在使用该 registry 的项目中创建特殊 secret,然后使用该 secret 执行 docker 操作。

流程
  1. 在用户要登录到 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>
  2. 如果存在 .dockercfg 文件,请使用 oc 命令创建 secret:

    $ oc create secret generic <my_registry> --from-file=.dockercfg=<path/to/.dockercfg> --type=kubernetes.io/dockercfg
  3. 填充 $HOME/.docker/config.json 文件:

    $ oc create secret generic <my_registry> --from-file=.dockerconfigjson=<path/to/.dockercfg> --type=kubernetes.io/dockerconfigjson
  4. 通过将 secret 链接到执行 pull 操作的服务帐户,使用 dockercfg secret 从经过身份验证的 registry 拉取镜像。用于拉取镜像的默认服务帐户名为 default

    $ oc secrets link default <my_registry> --for=pull
  5. 要使用 S2I 功能推送镜像,dockercfg secret 被挂载到 S2I pod 中,因此需要链接到执行该构建的正确服务帐户。用于构建镜像的默认服务帐户名为 builder

    $ oc secrets link builder <my_registry>
  6. 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]...
  7. 如果外部 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>
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.