Contenido
- Login al Harbor local
- Configurar un cliente Docker con el certificado de registro Harbor
- Descarga de Imágenes
- Tagear Imágenes
- Subir imagen al Container Registry Privado (Harbor)
- Referencias Image desde Registry Local
¿Tu clúster de Kubernetes no tiene salida a internet y te está bloqueando los despliegues?
Es más común de lo que parece… y lo peor: muchas veces ya tienes la solución dentro de tu propia plataforma.
En entornos empresariales es habitual encontrar restricciones de red que impiden el acceso a repositorios públicos, lo que complica la descarga de imágenes necesarias para desplegar aplicaciones contenedorizadas en Kubernetes (K8s).
Aquí es donde entra una solución simple, segura y muchas veces subutilizada: un Container Registry local como Harbor, integrado a través de los Supervisor Services de vSphere Supervisor.
En este contenido te voy a mostrar cómo descargar imágenes desde fuentes externas, cargarlas en tu registry local y dejarlas listas para ser consumidas por tus despliegues en Kubernetes.
Login al Harbor local
Asumiendo que ya tienes un Harbor habilitado en la infraestructura, vamos a seguir los siguientes pasos para poder descargar las imágenes de repositorios publicos y subirlas a nuestro repositorio privado o Container Registry basado en Harbor.
Para esto debemos hacer Login al Harbor desde el navegador web https://fqdn-harbor-local

Para almacenar nuestra imágenes es necesario crear un Proyecto, para esto vamos a crearlo haciendo clic en New Project, este puede ser definido como Public o Private. El nombre de este proyecto será opencart
En Harbor existen dos tipos de proyectos:
- Público : Cualquier usuario puede descargar imágenes de este proyecto. Esta es una forma práctica de compartir repositorios con otros.
- Privado : Solo los usuarios que son miembros del proyecto pueden descargar imágenes.

Dentro de este proyecto alojarémos las imágenes a tráves del comando push desde un cliente Docker.

Configurar un cliente Docker con el certificado de registro Harbor
Para trabajar con imágenes de contenedor en un registro con Docker, es necesario agregar el certificado de Registry al cliente de Docker. Este certificado se utiliza para autenticar Docker durante el inicio de sesión en el Registry.
Nota: Para esto vamos usar la siguiente documentacion oficial Configurar un cliente Docker con el certificado de registro Harbor que por supuesto explicaremos paso a paso.
Nota: Los siguientes pasos asumen que estas usando una VM Linux (Ubuntu) con el Docker daemon instalado. Sino ha instalado el Docker Engine (daemon) sobre una VM Ubuntu, vaya un momento a Install Docker Engine on Ubuntu y siga los pasos.
Una vez instalado el Docker Engine (Deamon) debemos verificar que esté instalado y que puedas extraer imágenes del concentrador Docker, ejecuta el siguiente comando:docker run hello-world
Resultado esperado:
Hello from Docker!This message shows that your installation appears to be working correctly.
Nota: Estos comandos se verificaron utilizando Ubuntu 20.04 y Docker 19.03.
Configure su cliente Docker para interactuar con un container regsitry, como Harbor Registry o Docker Hub. Este ejemplo asume que está usando Harbor del Servicio de Supervisor.
Inicie sesión en Harbor Registry.
Seleccionar > Administration > Configuration > Registry Root Certificate.
Hacer clic Download para descargar el certificado de Harbor Registry llamado
ca.crt.
Nota: Si es necesario, cambie el nombre del certificado aca.crt.Copiar de forma segura el archivo
ca.crta su cliente host Docker.En el host Docker, cree una ruta de directorio para el registro privado utilizando la dirección IP de Harbor.
/etc/docker/certs.d/IP-address-or-FQDN-of-harbor/
Por ejemplo:
mkdir /etc/docker/certs.d/10.179.145.77Mueva el ca.crt a este directorio.
Por ejemplo:mv ca.crt /etc/docker/certs.d/10.179.145.77/ca.crtReinicie el Docker deamon.
sudo systemctl restart docker.serviceInicie sesión en el Harbor Registry integrado usando su cliente Docker.
docker login ip-fqdn-harborEjemplo:docker harbor-01a.site-a.vcf.labDeberías ver el siguiente mensaje:
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded

Descarga de Imágenes
El siguiente paso es descargar las imágenes desde el repositorio publico a la VM, preferiblemente basada en Linux, donde instalamos el docket client, para ejecutar los siguientes comando:
Para ver las imagenes que estan descargadas en la libreria del Docker Client local podemos usar los siguientes comando:
docker image ls
docker images

El signidicado de algunas de las columnas que puede devolver el comando anterior es el siguiente:
- IMAGE: El tag completo de la imagen (lo que acabamos de explicar: registry/proyecto/nombre:versión)
- ID: El identificador único de la imagen en tu máquina local, Docker lo genera automáticamente. Es un hash, pero aquí solo muestra los primeros 12 caracteres (el hash completo es mucho más largo)
- DISK USAGE: Cuánto espacio está ocupando esa imagen en tu disco duro local
- CONTENT SIZE: El tamaño real del contenido de la imagen sin contar metadatos ni capas compartidas. Nota que ambas tienen 0B, lo cual puede indicar que el comando fue ejecutado con una versión de Docker que no calcula ese campo, o que están siendo referenciadas de otra forma
- REPOSITORY: El nombre del repositorio de la imagen (por ejemplo,
gitea/giteay una imagen de Broadcom) - TAG: La etiqueta o versión de la imagen (
latest,4.0.1-1-debian-11-r66) - IMAGE ID: Identificador único de la imagen
- CREATED: Cuándo fue creada la imagen (
3 weeks ago,2 years ago) - SIZE: El tamaño que ocupa la imagen en disco (
180MB,487MB)
Para descargar la imagen desde los respositorios de Docker Hub podemos usar el siguiente comando
docker pull [image:version]
Ejemplo: docker pull busybox:latest

o podemos seguir los ejemplos que estan en la siguiente nota para bajar la imagenes de otros respositorios.
Nota: Imagenes de algunos repostorios podrian requerir un usuario y contraseña para poderse descargar
Nota: Algunas imágenes podrían no estar disponible en Docker Hub por lo que se hace necesario descargarlas desde otros repositorio como bitnami, registry.k8s, gcr.io, public.ecr.aws, etc
Probar imágenes 100% públicasdocker pull bitnami/wordpress:latestdocker pull bitnami/mysql:8.0# O usar el registry oficial de Kubernetesdocker pull registry.k8s.io/pause:3.2
Podemos probar diferentes Registries Publicos que funcionan bastante bien
# Estos deberían funcionar SIN usuario:docker pull gcr.io/google-containers/pause:3.2docker pull ghcr.io/bitnami/wordpress:latest # GitHub Container Registrydocker pull public.ecr.aws/bitnami/wordpress:latest # AWS Public Registry
NOTA: Importante tener presente que NO NECESITAS CREDENCIALES para la mayoria de registries públicos.
Tagear Imágenes
Ahora debemos colocarle un tag siguiendo el formato que nos indica el mismo Harbor dentro del proyecto en el enlace PUSH COMMAND. Esto es necesario porque Docker no sabe a dónde subir una imagen a menos que el nombre de la imagen comience con la dirección del servidor (harbor-01a.site-a.vcf.lab).
Tag una Imagen para el proyecto Opencart
Para tagear una imagen antes de subirla debemos ajustar el siguiente comando:
docker tag SOURCE_IMAGE[:TAG] fqdn-habor/project/REPOSITORY[:TAG]
A continuacion, la explicacion de que hace este comando.
Lado izquierdo → la imagen que ya tienes local, o incluso puede ser que este en el repositorio publico:
SOURCE_IMAGE= el nombre de tu imagen local o en el repositorio publico[:TAG]= la versión de esa imagen local. Aunque se llama TAG no es el tag que le vamos a colocar es solo la version de la imagen, podríamos decir que es el tag de la version.
Lado derecho → el destino completo en Harbor, y esto todo junto es lo que Docker llama «el tag»:
fqdn-harbor= dominio de tu Harborproject= proyecto dentro de HarborREPOSITORY= nombre que tendrá en Harbor[:TAG]= la versión. De nuevo es el tag pero solo de la version.
Entonces, el tag que le estás poniendo es todo el lado derecho completo: fqdn-harbor/project/REPOSITORY[:TAG]. Eso es lo que Docker entiende por tag — no solo el :TAG del final.
Ejemplo:
docker tag busybox:latest harbor-01a.site-a.vcf.lab/busybox/busybox:latest


Nota: Este comando no duplica la imagen, solo le crea un alias o apodo. Le dice a Docker que la imagen que descargaste originalmente (como busybox:latest) ahora también debe ser reconocida con el nombre largo de tu servidor Harbor.
Subir imagen al Container Registry Privado (Harbor)
Ahora lo que hacemos es tomar las imágenes que ya etiquetaste y las transferimos por la red desde tu computadora o desde el repositorio publico hasta el servidor Harbor. Para esto se hace necesario hacer el push para publicar la imagen en harbor
Push una imagen en este proyecto
docker push fqdn-habor/project/REPOSITORY[:TAG]
Este es el comando que hace el trabajo pesado: la carga (upload). Una vez que termine, cualquier otra persona (o tu clúster de Tanzu) podrá descargar la imagen directamente desde Harbor sin necesidad de internet.
Ejemplo: docker push harbor-01a.site-a.vcf.lab/busybox/busybox:latest

Esta acción sube la imagen a Harbor, específicamente a nuestro proyecto y la deja disponible para que podamos usarla después en nuestros archivos YAML.



Nota (Opcional): Otra forma es crear un puntero o Alias local para que desde el repositorio original se haga push directamente al Harbor. De esta forma evitamos bajar la imagen con el pull. Creamos unicamente el apuntador y hacemos el push directamente desde el repositorio publico hacia el harbor.
docker tag SOURCE_IMAGE_ONLINE_REPO[:TAG] fqdn-habor/project/REPOSITORY[:TAG]
Ejemplo:docker tag vcf-automation-docker-dev-local.usw5.packages.broadcom.com/bitnami/opencart:4.0.1-1-debian-11-r66 harbor-01a.site-a.vcf.lab/opencart/opencart:4.0.1-1-debian-11-r66

docker push fqdn-habor/project/REPOSITORY[:TAG]
Ejemplo:docker push harbor-01a.site-a.vcf.lab/opencart/opencart:4.0.1-1-debian-11-r66

Referencias Image desde Registry Local
Y eso es todo, lo que haríamos despues cuando estemos instalando la aplicación en nuetro cluster de Kubernetes, es simplemente referenciar el path de la imagen que subimos, que ahora vive en nuestro Image Registry local (Harbor), en el archivo YAML que instala la aplicaion.

¡IMPORTANTE! He migrado blog del dominio nachoaprendevirtualizacion.com a nachoaprendeit.com. Si te ha servido este artículo deja tu buen Like y compártelo con tus colegas, estas aciones me ayudarán a optimizar los motores de búsqueda para llegar a más personas, y a motivarme a seguir compartiendo este tipo de artículos.

TODOS LOS NOMBRES DE VMS USADOS EN ESTE BLOG SON INVENTADOS Y OBEDECEN A UN AMBIENTE DE LABORATORIO PROPIO, UTILIZADO PARA FINES DE ESTUDIO.