繁体   English   中英

使用 Sonatype nexus 控制对 docker 注册表的访问

[英]Controlling access to docker registry with Sonatype nexus

在我们当前的设置中,我们会代理整个 docker hub 来拉取镜像,但我们想要的是将此代理限制为仅限官方索引,如 ubuntu、apache 等。在配置存储库期间,有此选项可以为存储库设置custom index ,所以我的两个问题是:

  • 使用这个custom index选项,我是否能够实现我上面解释的内容?
  • 如果是,那么我应该从哪里获取自定义索引的 URL。 到目前为止,我尝试将https://hub.docker.com/_/centos/用于 centos,但没有奏效。

请建议如何解决这个问题。

是的,您可以使用自定义索引来限制您的存储库中的可用内容。 为此,您必须部署和维护自己的 docker 注册表索引服务,并在配置 docker 代理存储库时使用它。

但是,一个更简单的解决方案是使用内容选择器来限制允许通过 docker 代理存储库访问的内容,同时仍然使用 Docker Hub 及其原始索引。

使用简化的内容选择器解决方案有点麻烦,但可能对您有用。 本质上,您必须以正则表达式的形式提供白名单(或黑名单)。 此解决方案的含义是,您的注册表用户仍然可以搜索任何可用的映像,因为为了简单起见,您可以继续使用 Docker Hub 的索引。

  1. 创建一个指向 Docker Hub 的 docker 代理存储库。
  2. 创建一个带有白/黑图像列表的内容选择器,例如。 path =~ '^/v2/library/(alpine|ubuntu).*$'将只允许下载alpineubuntu
  3. 创建类型为Repository Content Selector的新权限。
  4. 创建一个包含上述权限的角色。
  5. 创建具有上述角色的用户。

现在,您创建的用户将登录到您的注册表,例如。 $ docker login nexus.local:8085 该用户将被授权同时拉取alpineubuntu (基于第 2 步中的内容选择器),但无法下载其他任何内容。

一个成功的拉取示例: $ docker pull nexus.local:8085/alpine Using default tag: latest latest: Pulling from alpine Digest: sha256:0873c923e00e0fd2ba78041bfb64a105e1ecb7678916d1f7776311e45bf5634b Status: Image is up to date for nexus.local:8085/alpine:latest

拉取失败示例: $ docker pull nexus.local:8085/postgres Using default tag: latest Error response from daemon: unauthorized: access to the requested resource is not authorized

我们正在代理整个 docker hub 以拉取图像,但我们想要的是将此代理限制为仅限官方索引,如 ubuntu、apache

我所做的是:

  • 创建路由规则
    • Mode: ALLOW
    • 我只想要alpinecentos所以我创建了两个匹配项:
      • ^/v2/library/centos.*$
      • ^/v2/library/alpine.*$
  • 转到 docker 代理存储库的配置
    • 转到Routing Rule
    • 并选择您创建的路由规则。

这样,除了 centos 和 alpine 之外的所有内容都可以从该 docker 代理存储库中获得。 拉取其他任何东西都会导致 docker 出现“manigest unknown”错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM