代码之家  ›  专栏  ›  技术社区  ›  Ijaz Ahmad

允许有docker的一个私有注册表

  •  1
  • Ijaz Ahmad  · 技术社区  · 7 年前

    我需要阻止所有的注册表,只允许一个私有注册表为docker从中提取图像,这怎么能在docker本地完成呢。

    2 回复  |  直到 7 年前
        1
  •  2
  •   BMitch    7 年前

    官方Docker引擎开箱即用目前不支持对注册表服务器的硬限制。您可以在出站连接上使用防火墙规则来实现这一点,但这很容易失败,除非您只允许出站连接到已知的白名单。即使您设法在网络级别实现这一点,它也不会阻止某人从tar文件导入映像,甚至不会阻止构建与其他注册表服务器上的映像相同的映像。

    相反,Docker的方法是使用公证人/内容信任对图像标记/清单进行加密签名,以验证它是否来自已知来源。这将处理图像,而不管它们是如何在docker主机上拉取、加载或构建的。在Docker CE中,这是从客户端选项强制执行的,因此可以很容易地将其禁用(尽管Docker CE中直接访问Docker socket的客户端可以做的不仅仅是运行公共映像,它们实际上是根用户在您的主机上)。有一些工具可以插件到docker引擎的authz接口,包括Twistlock和openpolicy Agent,但我不知道它们是否允许您强制实施内容信任。

    使用Docker EE,在服务器端很容易启用该选项。UCP中有一个开关,可以强制只运行具有可信签名的映像。最大的缺点是,我所做的每一个docker安装都需要使用外部来源的图像,比如DockerHub。要使用这些映像,您现在需要将它们从这个环境外部提取出来,并将它们推送到您自己的注册表中,用您自己的凭据对它们进行签名。保养就成了一件头疼的事。

    除了维护一个令人头疼的问题外,我看到很少有人用这个选项锁定Docker EE,原因是:它违背了DevOps的所有目标,即允许开发人员在不需要ops批准的情况下管理他们的工具集。如果他们想从java8切换到java9,开发人员应该很容易实现,ops应该关心的是生成的映像中是否存在漏洞,而不是用于创建它的基础映像。

        2
  •  0
  •   Ijaz Ahmad    7 年前

    刚在redhat文档中找到:

    这可以在docker daemon config上完成:

    BLOCK_REGISTRY='--block-registry=all'
    ADD_REGISTRY='--add-registry=registry.access.redhat.com'
    

    然后做:

    systemctl restart docker
    
    推荐文章