Cambio de credenciales en Docker Swarm Services

Esta publicación le brindará una descripción general de cómo Docker realiza la autenticación en los registros de imágenes.
y cómo los cambios en las credenciales alteran el flujo de trabajo cuando hay varios nodos involucrados.

La primera parte de esta publicación brinda una descripción general de qué es Docker, dónde se almacenan las imágenes de Docker y qué docker login

lo hace.
Si ya conoce algunos conceptos básicos sobre cómo funcionan Docker y Docker Swarm, puede omitir directamente
aquí.

Conceptos básicos de la ventana acoplable

Docker tiene una arquitectura cliente-servidor y la mayoría de los docker los comandos se comunican con el demonio docker a través de alguna API REST-ish.

Correr docker -H tcp://1.2.4.5:2375 run --rm nginx se pondrá en contacto con el demonio docker en el 1.2.4.5 anfitrión y
le indicará que descargue y ejecute el nginx imagen.

enjambre estibador

Docker Swarm es un orquestador de contenedores que le permite ejecutar contenedores acoplables en varios nodos.
También le permite abstraerse de los nodos que ejecutan el Swarm, usted decide el estado deseado
y Docker Swarm distribuirá la carga entre los nodos que forman el clúster.

Registro de imágenes de Docker

Las imágenes de Docker se almacenan en un “registro” y el daemon de Docker puede cargar y descargar imágenes desde y hacia él.
La mayoría de los registros requieren autenticación.

inicio de sesión acoplable

Para autenticar un cliente de Docker en un registro de imágenes de Docker, puede ejecutar:

docker login

Este comando intentará autenticarnos en hub.docker.com (el registro docker comercial),
pidiéndonos usuario y contraseña.
también puede iniciar sesión en otros registros (ofrecidos por otras empresas o alojando nuestros propios registros)
especificando el nombre de host del registro como tercer parámetro.

Como ejemplo docker login registry.gitlab.com intentará autenticarnos en el registro de Gitlab.

Por defecto, las credenciales se guardan en $HOME/.docker/config.json en la computadora que ejecuta el docker login dominio
(también hay otro almacenamientos).

para notar que docker login es un comando de “cliente” y no se comunica con el demonio docker.

Descarga de imágenes privadas

¿Qué sucede cuando crea/actualiza un servicio Docker Swarm usando el --with-registry-auth opción
(o implementar un Docker Stack con la misma opción)?

El cliente docker:

  1. Recopile una lista de imágenes acoplables para descargar
  2. Lea la información de autenticación del almacén de credenciales para que las imágenes se descarguen (por ejemplo, leyendo el $HOME/.docker/config.json desde el ordenador donde está instalado el cliente)
  3. Crear (o actualizar) el servicio en el Swarm BALSA estado.
    la informacion del estado incluya también la información de autenticación sobre cómo descargar la imagen.

De esta manera, cuando el contenedor se programe en algún nodo,
el demonio de la ventana acoplable leerá el estado RAFT y enviará las credenciales almacenadas a ese nodo, lo que le permitirá descargar de forma autónoma la imagen de la ventana acoplable.

Cambio de credenciales

Si actualiza sus credenciales (por ejemplo, cambie su contraseña),
las credenciales almacenadas en el estado Swarm RAFT ya no son correctas y los nuevos nodos no podrán descargar imágenes.

Como solución, debe volver a autenticarse en el registro de imágenes utilizando el docker login dominio
y actualice las credenciales almacenadas en el estado Swarm RAFT ejecutando:

docker login

docker service update SERVICE_NAME --with-registry-auth

Este comando dejará el servicio como está, solo actualizará las credenciales.

La misma estrategia se puede utilizar para Docker Stack,
pero es más arriesgado ya que podría desencadenar actualizaciones de contenedores no deseadas, ya que Docker en algunos casos podría intentar descargar una versión más nueva.
image (si actualiza una etiqueta de imagen docker) o vuelva a ejecutar los servicios que están configurados como restart: never.

Otras cosas a considerar

¿Qué servicios debo actualizar?

Si tiene muchos servicios (quizás usando diferentes registros), puede ser difícil hacer un seguimiento de qué credenciales
debe ser actualizado.

Los servicios se pueden etiquetar (usando el --label o --label-add opciones), y luego puede actualizar solo los servicios que tienen una etiqueta específica.

docker login -u "me" -p "xxxxxx" registry.gitlab.com

for i in $(docker service ls --filter=label=gitlab-registry); do docker service update "$i" --with-registry-auth -d; done

Este script actualizará las credenciales para todos los servicios que tengan el gitlab-registry etiqueta.

Nota: No es seguro proporcionar la contraseña como argumento de la línea de comandos,
encontrar aquí algunas alternativas

Credenciales que caducan

Algunos registros de Docker (AWS o Azure) tienen credenciales que caducan automáticamente después de un período de tiempo específico.
Además, en este caso, las credenciales almacenadas en el estado Swarm RAFT ya no serán correctas y se crearán nuevos nodos.
no podrá descargar imágenes.

Como solución, es posible configurar un cronjob para realizar periódicamente la actualización.

¡Hay una trampa!

Si tienes un DockerHub cuenta (el registro comercial de la ventana acoplable), e inició sesión en ella usando
la docker login comando, y creó/actualizó un servicio o pila usando el --with-registry-auth opción,
esas credenciales se utilizarán para recuperar las imágenes públicas (que podría haberse descargado de forma anónima de otra manera).
Esto significa que si cambia las credenciales en DockerHub, sus nodos no podrán descargar imágenes públicas.

Para mitigar este problema, asegúrese de no utilizar el --with-registry-auth opción
al crear o actualizar un servicio que utiliza imágenes públicas.
Desafortunadamente, si está implementando un Docker Stack que contiene servicios mixtos (con imágenes privadas y públicas),
la --with-registry-auth es global y no se puede especificar por servicio único.
Como alternativa, puede utilizar la misma estrategia de etiquetado descrita anteriormente y actualizar también las credenciales para los servicios públicos.

Esta publicación se publicó por primera vez en https://www.goetas.com/blog/cambio-de-credenciales-en-docker-swarm-services/.

Similar Posts

Leave a Reply

Your email address will not be published.