2017-08-01 4 views
0

TL; DR - comment exécuter un miroir de registre docker (potentiellement non sécurisé) et faire confiance au contenu?Confiance dans le contenu du docker miroir

J'ai une série de périphériques exécutant des conteneurs docker sur un réseau fermé sans accès à Internet. Je suis en mesure d'attacher temporairement un ordinateur portable qui a déjà eu accès à Internet sur le réseau. L'objectif final est de mettre à jour les images de conteneur de chacun de ces périphériques sont en cours d'exécution.

je peux obtenir ce travail, en principe, par:

  1. Tirer à partir d'un registre Internet (hub Docker ou privé) à l'ordinateur portable.
  2. Exécution d'un registre sur l'ordinateur portable.
  3. Poussant à ce registre avec

    docker tag myorgname/trusttest:latest 
    laptophostname:80/myorgname/trusttest:latest 
    docker push laptophostname:80/myorgname/trusttest:latest 
    
  4. Débranchement l'ordinateur portable de l'Internet et la connexion au réseau fermé.
  5. Raconter les appareils à faire un

    docker pull laptophostname:80/myorgname/trusttest:latest 
    docker tag laptophostname:80/myorgname/trusttest:latest 
    myorgname/trusttest:latest 
    

et redémarrer leurs conteneurs avec la nouvelle image (comment je fais cela n'est pas particulièrement pertinent, disons simplement que je peux communiquer laptophostname pour eux et ils fais le reste).

Ce qui est vraiment important, c'est que je l'utilise avec Docker Content Trust (notaire). Sinon, n'importe qui pourrait simplement se connecter au réseau et dire aux périphériques de commencer à exécuter du code arbitraire. Je peux également utiliser un serveur Notary sur l'ordinateur portable, et cela fonctionne bien, sauf que lorsque j'appuie l'image la plus récente de mon docker local sur mon ordinateur portable (étape 3 ci-dessus), il me demande de nouvelles clés de signature, c'est-à-dire qu'il donne au conteneur de nouvelles informations de confiance au lieu de simplement copier l'approbation créée par le développeur d'origine.

Pour le moment, j'ai le contrôle sur la machine utilisée pour faire la mise à jour (par exemple l'ordinateur portable) mais dans le futur cela peut ne pas être le cas, donc je ne veux pas de clé développeur. Notaire annonce que les miroirs non sécurisés sont un cas d'utilisation, alors comment puis-je le faire fonctionner avec docker?

EDIT

Cela peut ou peut ne pas être pertinent, mais l'idée est qu'un client achète un ou plusieurs de ces dispositifs à la fois et les ajoute au réseau en plusieurs étapes. J'ai besoin d'un moyen de fournir des mises à jour logicielles signées, d'où le plan original d'écrire une application pour agir comme un miroir de registre. Sans confiance dans le contenu, il serait facile de tromper les appareils pour exécuter des images.

+0

BTW - notre Markdown n'est pas GitHub-aromatisé, donc triple-backticks ne formateront pas le contenu différemment que les simples (ils seulement la différence est que l'on peut utiliser des backticks simples littéraux en leur sein). –

Répondre

0

Je vous suggère de regarder l'essaim Docker car beaucoup de choses que vous avez mentionnées sont traitées par l'essaim Docker. En particulier, vous pouvez définir votre ordinateur portable en tant que nœud de gestionnaire d'essaim, qui est le seul nœud disposant d'autorisations pour mettre à jour des conteneurs sur des nœuds de travail.

+0

C'est une idée intéressante, mais elle ne cadre pas bien avec le reste du plan de déploiement: les clients achètent ces appareils et les ajoutent au réseau de façon fragmentaire. Le directeur ne serait presque jamais connecté. Un arrêt de spectacle cependant, c'est que je n'ai pas nécessairement le contrôle sur la machine utilisée pour faire la mise à jour. Si j'autorise un gestionnaire à se mettre à jour, j'ai le même problème de permettre l'exécution de code arbitraire sur les périphériques. C'est la partie du contenu signé par le développeur dont j'ai besoin. – Johnny5