镜像泊坞内容信任

时间:2017-08-01 14:57:40

标签: docker notary

TL; DR - 如何运行(可能不安全的)docker注册表镜像并信任该内容?

我有一系列设备在一个没有互联网访问权限的封闭网络上运行docker容器。我可以暂时连接以前可以访问网络的笔记本电脑。最终目的是更新每个设备正在运行的容器映像。

我原则上可以通过以下方式实现:

  1. 从互联网注册表(Docker hub或私有)拉到笔记本电脑。
  2. 在笔记本电脑上运行注册表。
  3. 使用

    推送到此注册表
    docker tag myorgname/trusttest:latest 
    laptophostname:80/myorgname/trusttest:latest
    docker push laptophostname:80/myorgname/trusttest:latest
    
  4. 断开笔记本电脑与互联网的连接并连接到封闭的网络。
  5. 告诉设备做

    docker pull laptophostname:80/myorgname/trusttest:latest
    docker tag laptophostname:80/myorgname/trusttest:latest 
    myorgname/trusttest:latest
    
  6. 并使用新图像重新启动他们的容器(我怎么做这个并不是特别相关,我只想说我可以与他们沟通laptophostname,然后他们完成剩下的工作。)

    但真正重要的是我使用Docker Content Trust(aka Notary)。否则任何人都可以连接到网络并告诉设备开始运行任意代码。

    我也可以在笔记本电脑上运行一个Notary服务器,这个工作正常,但是当我将新映像从本地docker推到笔记本电脑上的注册表时(上面的步骤3),它会要求我提供新的签名密钥,即它为容器提供了新的信任信息,而不仅仅是复制原始开发人员创建的信任。

    目前我已经控制了用于进行更新的机器(即笔记本电脑),但将来情况可能并非如此,所以我不想在此处拥有任何开发人员密钥。公证人宣称不安全的镜像是一个用例,所以如何让它与docker一起工作?

    修改

    这可能相关或不相关,但其想法是客户一次购买一个或多个这些设备并分阶段将它们添加到网络中。我需要一种提供签名软件更新的方法,因此编写应用程序作为注册表镜像的原始计划。如果没有内容信任,那么很容易欺骗设备运行任何图像。

1 个答案:

答案 0 :(得分:0)

我建议您查看Docker swarm,因为您提到的许多内容都是由Docker swarm处理的。 https://docs.docker.com/engine/swarm/

特别是,您可以将笔记本电脑设置为swarm管理器节点,该节点是唯一有权更新工作节点上容器的节点。