¿Cómo usar los secretos de Docker sin un grupo de enjambres?

29

Actualmente, somos una aplicación en ejecución en un único contenedor acoplable, la aplicación necesita que se pasen todo tipo de datos confidenciales como variables de entorno,

Estoy poniendo esos en el comando de ejecución para que no terminen en la imagen y luego en un repositorio, sin embargo, termino con un comando de ejecución muy no seguro,

Ahora, entiendo que existen secretos de Docker, sin embargo, ¿cómo puedo usarlos sin implementar un clúster? ¿O hay alguna otra forma de asegurar estos datos?

Atentamente,

Juan sebastian
fuente
66
Hay varias formas de usar secretos sin enjambre blog.mikesir87.io/2017/05/…
Aleksandr Aksarin

Respuestas:

6

No puedes ... No admite secretos sin Swarm. A menos que '' pueda ser '' usted '' Enjambre '' usando solo un nodo.

La otra solución sería, creo, usar un software de bóveda de terceros como este:

https://www.vaultproject.io/

Pero luego, para usar los secretos en tus contenedores de Vault, necesitarías leer el documento.

Espero que esto te lleve al camino correcto para comenzar.

rendimiento
fuente
En realidad, solo necesito inyectar estos secretos al crear los contenedores, realmente no necesitan permanecer "secretos" dentro de los contenedores en ejecución, así que supongo que tendría sentido que el host pueda acceder y usar los secretos al invocar el docker run command, supongo que puedo escribir un script con un montón de reemplazos y llamadas a bóveda.
Juan Sebastián
@JuanSebastian deberías revisar los 'build-args' de Docker para ese caso de uso.
user23390
@JuanSebastian Podría estar equivocado, pero obtener el ENV local le daría lo que hay dentro de estos argumentos de construcción ... No estoy seguro .....
ceda el
build-argsno se incluyen en la imagen final, pero solo se puede acceder durante el tiempo de creación de la imagen. Una solución adecuada es escribir los secretos en los archivos en el host (con los permisos apropiados, por supuesto) y luego montarlos en su contenedor docker. Su aplicación dentro del contenedor puede leer los secretos de esos archivos
Brandon
22

, puedes usar secretos si usas un archivo de composición . (No necesita ejecutar un enjambre).

Utiliza un archivo componer con docker-compose : hay documentación para "secretos" en un archivo docker-compose.yml .

Cambié a Docker-compose porque quería usar secretos. Estoy feliz de haberlo hecho, parece mucho más limpio. Cada servicio se asigna a un contenedor. Y si alguna vez quieres cambiar a ejecutar un enjambre, básicamente ya estás allí.

Nota: Los secretos no se cargan en el entorno del contenedor, se montan en / run / secrets /

Aquí hay un ejemplo:

1) Estructura del proyecto:

|
|---    docker-compose.yml
|---    super_duper_secret.txt

2) contenido de docker-compose.yml:

version: "3.6"

services:

  my_service:
    image: centos:7
    entrypoint: "cat /run/secrets/my_secret"
    secrets:
      - my_secret

secrets:
  my_secret:
    file: ./super_duper_secret.txt

3) contenido super_duper_secret.txt:

Whatever you want to write for a secret really.

4) Ejecute este comando desde la raíz del proyecto para ver que el contenedor tiene acceso a su secreto (Docker debe estar ejecutándose y docker-compose instalado):

docker-compose up --build my_service

Debería ver que su contenedor genera su secreto.

Lindsay-necesita-dormir
fuente
¿Puedes mostrar un ejemplo de docker-composeuso de un secreto? La documentación y mi comprensión de la implementación indican que el secreto no se configurará en el contenedor.
BMitch
2
Los secretos de Docker solo están disponibles para servicios de enjambre, no para contenedores independientes. Para usar esta función, considere adaptar su contenedor para que se ejecute como un servicio. Los contenedores con estado generalmente se pueden ejecutar con una escala de 1 sin cambiar el código del contenedor. acoplador
Alwin Kesler
@BMitch Agregó un ejemplo. Espero que te ayude! (Ha pasado un tiempo desde que trabajé con Docker y mi entorno tiene muchas más cosas ... pero creo que esto debería funcionar. ¡Avíseme si me perdí algo!)
Lindsay-Needs-Sleep
No puedo replicar esto en mis servicios sin un enjambre ( docker-compose.ymlen un solo nodo); cuando comienzo el contenedor /runsolo contiene un nginx.pidy no se Mountsmuestra por docker inspect $container.
giorgiosironi
2
Solo pensé en vincularme al RP que agregó esto a docker-compose (sin enjambre) github.com/docker/compose/pull/4368 Realmente está ahí y, según el código, parece que la versión mínima para componer archivo es 3.1 y API es 1.13.0. El código todavía está en el maestro actual ( github.com/dnephin/compose/blob/… ), por lo que no esperaría una versión máxima.
ssnobody