Harbor como repositorio privado en Kubernetes

Soy Roxs 👩💻| Software Developer | DevOps | DevSecOps | en @295DevOps 🖼 Content Creator. No se puede crecer si no estas dispuesto a saltar a la zona de peligro 🔥
Search for a command to run...

Soy Roxs 👩💻| Software Developer | DevOps | DevSecOps | en @295DevOps 🖼 Content Creator. No se puede crecer si no estas dispuesto a saltar a la zona de peligro 🔥
No comments yet. Be the first to comment.
Cada minuto que un dev espera un pipeline es un minuto de foco perdido. Multiplicalo por cada commit, cada MR, cada persona del equipo... y de repente ese pipeline de 25 minutos es el impuesto más car

Si venís siguiendo mi contenido hace rato, sabés que hay una frase que repito hasta el cansancio: la mejor forma de aprender cloud es rompiendo cosas en la cloud. El problema siempre fue el mismo: par

Si me seguís hace un tiempo ya sabés que estoy metida hasta con todo el power con Kiro IDE: demos, integraciones con GitLab CI, bootcamp y todo lo que se te ocurra. Así que cuando me crucé con este po

Build with fire, deploy with power 🔥

Por @roxsross · roxs.dev Introducción ¿Cuántas veces mergeaste un cambio de infraestructura y te enteraste del problema en producción? ¿Cuántos security groups abiertos al mundo, cuántos IAM con * en

Kubernetes es un orquestador de contenedores y por lo tanto necesitarás algún lugar para almacenar tus imágenes docker de forma que Kubernetes pueda descargarlas y usarlas. Hay una gran variedad de soluciones para elegir: cloud registry, dockerhub, un registry privado en una vm… o un registry privado en Kubernetes.
Hoy vamos a hablar sobre esta última opción; una solución para desplegar un registry dentro del propio Kubernetes: Harbor.
Harbor es open-source y es parte de la Cloud Native Computing Foundation. Implementa funcionalidades básicas como por ejemplo autenticación basada en roles (con soporte para LDAP) y también ofrece otras características más avanzadas como la habilidad para subir y gestionar charts de helm, realizar escaneo de vulnerabilidades sobre las imágenes subidas, y mucho más.
Vamos a ver cómo poner en marcha Harbor en nuestro clúster. Asumiremos que cuentas con los siguientes requisitos:
Vamos a usar el chart de helm oficial para esta parte. Para hacerlo, primero necesitarás añadir el repo de harbor:
helm repo add harbor https://helm.goharbor.io
Con el repositorio agregado, puede instalar el gráfico de Helm ejecutando lo siguiente:
helm install harbor harbor/harbor
otra opción clonar el repositorio de Harbor
git clone https://github.com/goharbor/harbor-helm.git
Para personalizar tu despliegue puedes crear un nuevo fichero values.yaml, reemplaza el contenido con los valores más adecuados para ti:
expose:
type: ingress
tls:
commonName: "TU_CN"
ingress:
hosts:
core: "harbor.TU_DOMINIO"
persistence:
enabled: true
externalURL: "https://harbor.TU_DOMINIO"
harborAdminPassword: admin
Ahora crearemos un nuevo namespace y desplegaremos el chart. Los valores a usar dependerán de tus necesidades:
kubectl create ns harbor
helm install --wait harbor --namespace harbor harbor/harbor -f values.yaml
Tomará un tiempo para que todos los pods de componentes estén en funcionamiento.

El valor predeterminado del Harbor Helm Chart del puerto utiliza la configuración del ingress

Ahora necesita usar esta IP para cambiar su /etc/host . La URL predeterminada para Harbor es https://core.harbor.domain, pero debe asegurarse de que cuando se escriba en la barra de direcciones de su navegador, se resuelva en su clúster. Hágalo ingresando las siguientes dos nuevas líneas en su /etc/hosts
<ip-of-minikube-or-k3s> core.harbor.domain
<ip-of-minikube-or-ke3> notary.harbor.domain

En cuanto termine la instalación (puede tomar hasta 5 minutes)
Ahora debería poder ir a :
https://core.harbor.domain
e iniciar sesión con el nombre de usuario y la contraseña predeterminados:
username: admin
password: Harbor12345

ya puedes ir al dominio usando tu navegador web y hacer login con el usuario admin y el password default o los que definiste en el values.yaml. Tras el login deberías ver algo muy parecido a ésto:

En este punto, tiene una instalación de Harbor activa que puede comenzar a usar. Sin embargo, eso no significa que esté listo para usarlo como registro. Todavía necesita instalar los certificados Harbor para asegurarse de que la comunicación entre su PC y el registro no se bloquee.
A continuación, debe obtener los certificados de Kubernetes Secrets:
kubectl -n harbor get secrets harbor-ingress -o jsonpath="{.data['ca\.crt']}" | base64 -D > harbor-ca.crt
Tenga en cuenta que esto usa base64 -D, mientras que, en Linux, usaría base64 -d
una vez que se tenga el certificado realizar los siguientes paso:
$ sudo mkdir -p /etc/docker/certs.d/core.harbor.domain
$ sudo cp harbor-ca.crt /etc/docker/certs.d/core.harbor.domain
Finalmente, corre exit para volver a tu terminal. En este punto, los certificados están instalados y ahora puede probar que todo funciona como se espera iniciando sesión y presionando una imagen:
Primero, debes hacer login desde el terminal usando el comando docker login y proporcionando tus credenciales:
# Log into the registry
$ docker login core.harbor.domain --username=admin --password Harbor12345
# Pull an image from Docker Hub
$ docker pull nginx
# Tag the image, so it's ready to be pushed
$ docker tag nginx core.harbor.domain/library/nginx:latest
# Push the image to the registry
$ docker push core.harbor.domain/library/nginx:latest
*Ten en cuenta de que para poder acceder a harbor a través de este dominio deberás crear una entrada de DNS en tu gestor de DNS y es imprescindible contar con un certificado HTTPS válido
Haz click sobre «NEW PROJECT» y rellena los inputs:

Ahora, vamos a probar a subir una nueva imagen a este proyecto. Haremos pull de la imagen oficial de nginx, pondremos un tag con la dirección de tu harbor/proyecto y haremos el push:
docker pull nginx
docker tag nginx harbor.YOUR_DOMAIN/myproject/nginx:latest
docker push harbor.YOUR_DOMAIN/myproject/nginx:latest
Si todo ha ido bien, deberías poder ver la imagen de nginx dentro del proyecto que creaste en harbor:

Has desplegado un nuevo Harbor registry privado y ya has subido tu primera imagen.
y además Incorpora un escaner con el motor de trivy y nos da los resultados


Si ha llegado a este punto con éxito, ahora tiene una instalación activa para Harbor y puede comenzar a usarlo como su propio registro privado. Esto le permite tener un control completo sobre su registro y la forma en que se implementa. Además de eso, obtiene todas las funciones disponibles en esta herramienta de código abierto, como el escaneo de vulnerabilidades y la replicación de imágenes. En lugar de leer listas de todas las funciones, puede probar la herramienta usted mismo y tener una idea de cómo puede usarla exactamente.
Espero que hayas disfrutado de este post y te animo a que revises nuestro blog para leer otros posts que puedan ser de tu interés. No dudes en contactarme si deseas que te ayudemos. roxs
¡Nos vemos en la próxima entrada!