• Skip to main content
  • Skip to secondary menu
  • Skip to primary sidebar
El Blog de Jorge de la Cruz

El Blog de Jorge de la Cruz

El Blog de Jorge de la Cruz - Todas las novedades sobre VMware, Veeam, InfluxData, Grafana, Zimbra, etc.

  • Home
  • VMware
    • VMworld
    • VMware vSphere 6.7
    • VMware vSphere 6.5
  • Veeam
    • Resumen Contenido 2021
    • Veeam v11
      • Continuous Data Protection (CDP
      • Ransomware Protection
      • Archive Tier
      • Mejoras en Instant Recovery
      • Veeam Agent for Mac
      • Veeam Backup for AHV v2.1
    • Veeam Backup for Microsoft Office 365
      • 1 – Razones para proteger nuestra información en Microsoft Office 365
      • 2 – Componentes lógicos de Veeam Backup for Microsoft Office 365 2.0
      • 3 – Instalación paso a paso de Veeam Backup for Microsoft Office 365 v2.0
      • 4 – Configuración inicial de Veeam Backup for Microsoft Office 365 v2.0
      • 5 – Creando trabajos de copia en Veeam Backup for Microsoft Office 365 v2.0
      • 6 – Restaurando elementos en Veeam Backup for Microsoft Office 365 v2.0
    • Veeam Backup for AWS
      • Veeam: Veeam anuncia Veeam Backup for AWS Free Edition
      • Veeam: Cómo Desplegar Veeam Backup for AWS – paso a paso
      • Veeam: Vistazo en profundidad al nuevo Veeam Backup for AWS – Creación de Políticas de Backup y Restauración
      • Veeam: Cómo conectar nuestro Veeam Backup & Replication a Veeam Backup for AWS
    • Veaam ONE
      • En busca del Dashboard perfecto: Veeam ONE – Parte I – Introducción a Veeam ONE
      • En busca del Dashboard perfecto: Veeam ONE – Parte II – Descarga e Instalación de Veeam ONE
      • En busca del Dashboard perfecto: Veeam ONE – Parte III – Añadir una Infraestructura de VMware vSphere a Veeam ONE
      • En busca del Dashboard perfecto: Veeam ONE – Parte IV – Añadir una Infraestructura de Veeam Backup and Replication a Veeam ONE
      • En busca del Dashboard perfecto: Veeam ONE – Parte V – Realizando troubleshooting de vSphere usando Veeam ONE Monitor
      • En busca del Dashboard perfecto: Veeam ONE – Parte VI – Realizando troubleshooting de Veeam Backup and Replication usando Veeam ONE Monitor
      • En busca del Dashboard perfecto: Veeam ONE – Parte VII – Vistazo profundo a los Dashboards en Veeam ONE Reporter
      • En busca del Dashboard perfecto: Veeam ONE – Parte VIII – Vistazo profundo a Reportes en Veeam ONE Reporter
      • En busca del Dashboard perfecto: Veeam ONE – Parte IX – Chargeback para crear reportes de coste de nuestra Infraestructura
    • Veeam Availability Console
      • 1 – Teoría e información útil sobre el producto
      • 2 – Instalación de Veeam Availability Console
      • 3 – Configuración y conexión con VBR Server
      • 4 – Administración centralizada de Veeam Backup Agents
      • 5 – Backup de Agentes a diferentes destinos, SMB, Repositorio Veeam o Cloud Connect
      • 6 – Reportes de Backup de Veeam Agent y Veeam Backup and Replication
      • 7 – Manejando la Facturación de Veeam Agents, Backup and Replication y Cloud Connect
    • Backup y restore de cargas de trabajo a Microsoft Azure
      • 1 – Introducción
      • 2 – Conectividad entre nuestro Datacenter y Microsoft Azure
      • 3 – Desplegar Veeam Backup and Replication en Microsoft Azure
      • 4 – Configuración en nuestro Datacenter para backup a Microsoft Azure
      • 5 – Restaurando a Microsoft Azure, desde Microsoft Azure
      • 6 – Migrar cargas de trabajo desde Microsoft Azure hacía nuestro Datacenter
    • Veeam v9.5 Update 4
      • Veeam Cloud Tier
        • Cómo controlar el ancho de banda en Veeam Cloud Tier
      • Secure Restore y Staged Restore
      • Mejoras en Veeam Agent Management
      • Veeam Community Edition
      • Actualizar Veeam Enterprise Manager y Veeam Backup and Replication a la última versión
      • VeeamONE con Intelligent Diagnostics, Remediation actions, Business View 2.0 y Application Monitoring
    • VeeamON 2022
      • Novedades en Veeam ONE v12
    • VeeamON 2021
      • VBO v6 – Self-Service y Backup Copy Glacier-Azure Archive
    • VeeamON 2020
      • Veeam Backup for AWS v2.0
    • VeeamON 2019
      • Veeam Availability Orchestrator v2.0 – ¡novedades!
    • VeeamON 2017
      • Sesiones recomendadas
      • Día I – Veeam Availability Suite v10 – ¡novedades!
      • Día II – Veeam Azure PN (Powered Network), Scale-out Archive Tier y mucho más
    • VeeamON 2015
      • VeeamON 2015 volverá a Las Vegas en el único Evento sobre Disponibilidad en el Data Center
      • Completo resumen, keynotes e imágenes
      • vBrownBag – Jorge de la Cruz – Stop sending postcards to your customers
  • Zextras
  • PRTG
  • Office 365
    • Microsoft – Añadiendo nuestro dominio a Office 365, configuración de DNS y migración de actual Mailbox
    • Veeam: Usando Microsoft Office 365 para nuestras notificaciones por correo electrónico
    • PRTG: Usando Microsoft Office 365 para nuestras notificaciones por correo electrónico
  • Zimbra
    • Instalación
      • Instalando Zimbra 8.7.6 sobre Ubuntu 14.04 LTS – ¡con Chat y Drive!
      • Amazon Lightsail para instalar Zimbra Collaboration 8.7.1, Parte II
      • Amazon Lightsail para instalar Zimbra Collaboration 8.7.1, Parte I
      • Instalando Zimbra 8.7.x con un solo comando, incluye Chat y Drive
  • Linux
    • InfluxDB, Grafana y Telegraf
      • 1 – Instalación y configuración de los components
      • 2 – Instalar agente en Linux
      • 3 – Integración con PRTG
      • 4 – Instalar agente Telegraf en Nodos remotos Windows
      • 5 – Activar inputs específicos, Red, MySQL/MariaDB, Nginx
      • 6 – Monitorizando Veeam
    • Ansible y Zabbix
      • 1 – Inicio
      • 2 – Instalación de Ansible e integración con Active Directory
      • 3 – Configuración de AutoDiscovery en Zabbix
      • 4 – Instalación del agente de Zabbix en Windows
      • 5 – Instalación del agente de Zabbix en Linux y Auto Remove en Zabbix
    • Jenkins
      • 1 – Inicio
      • 2 – Instalación de Jenkins en Ubuntu
      • 3 – Instalando nuestro primer plugin
      • 4 – Sincronización NTP de Linux
      • 5 – Añadir un Slave Windows a Jenkins
      • 6 – Ejecutar tareas en Linux
      • 7 – Ejecutar tareas en Windows
    • Kubernetes
      • 1 – Introducción a Kubernetes
      • 2 – Instalación paso a paso
      • 3 – RollingUpdate con Kubernetes
      • 4 – Dashboard
      • 5 – Volúmenes NFS
      • 6 – Registry
      • 7 – Traefik
      • 8 – Systemd con Traefik y Proxy de Kubernetes
      • 9 – Heapster Influx Grafana
      • 10 – Labels de Kubernetes
      • 11 – API: Swagger
      • 12 – API: Creando nuestro primer POD
  • Contribuidores
    • Acerca de Jorge
    • Acerca de Oscar Mas
      • Clúster SQL
        • 1 – Introducción
        • 2 – Preparación de los equipos virtuales
        • 3 – Instalación del Clúster de Microsoft
        • 4 – Instalación de SQL Server para Clúster de Microsoft
        • 5 – Configuración de nuestro Clúster de SQL
        • 6 – Monitorización de Clúster de SQL con Zabbix
        • 7 – Actualizando clúster de SQL

Kubernetes: Registry

3 January, 2018 - Escrito en: kubernetes

Soy Oscar Mas y hoy me gustaría enseñaros que es Registry y como integrarlo con nuestra plataforma de Kubernetes.

Un Registry es un almacén que imágenes docker, las cuales podremos  distribuir en nuestros servidores de Kubernetes. Esto es útil, ya que muchas veces podemos encontrarnos que no existe el contenedor que nosotros queremos o simplemente queremos hacernos un contenedor a medida con nuestro propio software y posteriormente usar esa imagen que hemos creado en nuestro sistema de Kubernetes.

El esquema lógico sería el siguiente:

La gran complejidad de este montaje son los certificados. Para este tipo de montaje he usado un certificado autogenerado en el servidor de Registry (ub-registry-sbd) y una vez generado, se lo entregaremos a los servidores de Kubernetes para que confíen en dicho certificado, de esta forma cuando despleguemos un contenedor desde nuestro servidor de Registry, el tráfico estará encriptado. También se le añade un usuario y contraseña para poder acceder al Registry, el cual lo almacenaremos en el Secret de Kubernetes.

Para empezar instalaremos las herramientas de apache, que posteriormente nos permitirán crear el usuario y el password para nuestro Registry:

root@ub-registry-sbd:~# apt-get update && apt-get -y install apache2-utils

Crearemos el contenedor del Registry y el nginx de la siguiente manera:

root@ub-registry-sbd:~# cd /etc/docker-registry/
root@ub-registry-sbd:/etc/docker-registry# cat docker-compose.yml
nginx:
  image: "nginx:1.9"
  ports:
    - 443:443
  links:
    - registry:registry
  volumes:
    - ./nginx/:/etc/nginx/conf.d
registry:
  image: registry:2
  ports:
    - 127.0.0.1:5000:5000
  environment:
    REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
  volumes:
    - ./data:/data

Ir con cuidado con server_name ub-registry-sbd.ilba.cat;, ya que este FQDN ha de coincidir con el nombre del certificado que crearemos más adelante.

root@ub-registry-sbd:/etc/docker-registry# cat nginx/registry.conf
upstream docker-registry {
  server registry:5000;
}

server {
  listen 443;
  server_name ub-registry-sbd.ilba.cat;
 
  # SSL
  ssl on;
  ssl_certificate /etc/nginx/conf.d/domain.crt;
  ssl_certificate_key /etc/nginx/conf.d/domain.key;

  # disable any limits to avoid HTTP 413 for large image uploads
  client_max_body_size 0;

  # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
  chunked_transfer_encoding on;

  location /v2/ {
    # Do not allow connections from docker 1.5 and earlier
    # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
    if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
      return 404;
    }

    # To add basic authentication to v2 use auth_basic setting plus add_header
    auth_basic "registry.localhost";
    auth_basic_user_file /etc/nginx/conf.d/registry.password;
    add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;

    proxy_pass                          http://docker-registry;
    proxy_set_header  Host              $http_host;   # required for docker client's sake
    proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
    proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;
    proxy_read_timeout                  900;
  }
}

Crearemos el usuario que tendrá acceso al Registry mediante las herramientas de apache que hemos instalado al principio del post:

root@ub-registry-sbd:/etc/docker-registry# cd nginx/
root@ub-registry-sbd:/etc/docker-registry/nginx# htpasswd -c registry.password oscarmas

Ahora crearemos el certificado, ir con cuidado con la parte:

Common Name (e.g. server FQDN or YOUR name) []:ub-registry-sbd.ilba.cat, ya que el FQDN que indiquemos, ha de coincidir con nuestro fichero de apache que hemos puesto anteriormente y será el que usemos para acceder al sistema de Registry.

root@ub-registry-sbd:/etc/docker-registry/nginx# openssl genrsa -out devdockerCA.key 2048
root@ub-registry-sbd:/etc/docker-registry/nginx# openssl req -x509 -new -nodes -key devdockerCA.key -days 20000 -out devdockerCA.crt
root@ub-registry-sbd:/etc/docker-registry/nginx# openssl genrsa -out domain.key 2048
root@ub-registry-sbd:/etc/docker-registry/nginx# openssl req -new -key domain.key -out dev-docker-registry.com.csr
root@ub-registry-sbd:/etc/docker-registry/nginx# openssl x509 -req -in dev-docker-registry.com.csr -CA devdockerCA.crt -CAkey devdockerCA.key -CAcreateserial -out domain.crt -days 20000

Ahora que lo tenemos todo preparado para poder empezar a desplegar los contenedores, necesitamos instalar docker. En este caso, la versión de docker que instalemos es irrelevante. El paquete de docker, en Ubuntu se llama docker-engine, a consecuencia de que anteriormente a docker, ya existía un software llamado docker en los repositorios de Ubuntu:

root@ub-registry-sbd:~# apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
root@ub-registry-sbd:~# echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" > /etc/apt/sources.list.d/docker.list
root@ub-registry-sbd:~# apt-get update && apt-get install -y docker-engine
root@ub-registry-sbd:/etc/docker-registry/nginx# mkdir /usr/local/share/ca-certificates/docker-dev-cert
root@ub-registry-sbd:/etc/docker-registry/nginx# cp devdockerCA.crt /usr/local/share/ca-certificates/docker-dev-cert
root@ub-registry-sbd:/etc/docker-registry/nginx# update-ca-certificates && systemctl restart docker

Instalaremos docker-compose, para posteriormente poder desplegar los dos contenedores. Recordar que el contenedor de apache nos permitirá el acceso al Registry mediante el certificado que hemos creado y nos validará nuestras credencias al acceso al Registry:

root@ub-registry-sbd:/etc/docker-registry/nginx# apt-get install -y docker-compose

Arrancaremos el Registry mediante el compose, el cual se descargará las correspondientes imágenes del Registry y del Nginx y posteriormente verificaremos que no nos salga ningún error:

root@ub-registry-sbd:/etc/docker-registry/nginx# cd ..
root@ub-registry-sbd:/etc/docker-registry# docker-compose up

Una vez verificado que no hayan errores, crearemos el servicio del Registry para que en futuros reinicios del equipo nuestro sistema de Registry siga funcionando:

root@ub-registry-sbd:/etc/docker-registry# cat /etc/systemd/system/docker-registry.service
[Unit]
Description=DockerRegistry
After=docker.service
Requires=docker.service

[Service]
WorkingDirectory=/etc/docker-registry
ExecStart=/usr/bin/docker-compose up

[Install]
WantedBy=multi-user.target

root@ub-registry-sbd:/etc/docker-registry# systemctl daemon-reload
root@ub-registry-sbd:/etc/docker-registry# systemctl start docker-registry
root@ub-registry-sbd:/etc/docker-registry# systemctl enable docker-registry

Verificaremos que el acceso al Regisrtry sea correcto:

root@ub-registry-sbd:/etc/docker-registry# docker login https://ub-registry-sbd.ilba.cat

Copiaremos los certificado a los equipos que han de recibir la imagen que hemos creado en nuestro Registry:

root@ub-nodo2-sbd:~# mkdir /usr/local/share/ca-certificates/docker-dev-cert
root@ub-nodo2-sbd:~# scp ub-registry-sbd:/usr/local/share/ca-certificates/docker-dev-cert/devdockerCA.crt /usr/local/share/ca-certificates/docker-dev-cert/
root@ub-nodo2-sbd:~# update-ca-certificates && systemctl restart docker

Volveremos a  verificar que podemos acceder desde los diferentes servidores:

root@ub-nodo2-sbd:~# docker login https://ub-registry-sbd.ilba.cat

Ahora que ya tenemos nuestro sistema de registry desplegado, verificaremos las imágenes de Dcoker que tenemos en nuestro sistema actualmente:

root@ub-registry-sbd:~# docker images

Crearemos un contenedor con un nginx ( ahora si que es un contenedor, ya que lo desplegaremos desde Dockerfile):

root@ub-registry-sbd:/etc/docker/nginx# cat Dockerfile
FROM docker.io/ubuntu
MAINTAINER OscarMas <[email protected]>
RUN apt-get update && apt-get install -y \
    nginx apt-utils
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
ENTRYPOINT service nginx start
root@ub-registry-sbd:/etc/docker/nginx# docker build -t ub_nginx:0.0.1 .

Subiremos nuestra imagen al registry:

root@ub-registry-sbd:/etc/docker/nginx# docker tag ub_nginx:0.0.1 ub-registry-sbd.ilba.cat/ub_nginx:0.0.1
root@ub-registry-sbd:/etc/docker/nginx# docker push ub-registry-sbd.ilba.cat/ub_nginx:0.0.1

Ahora desde nuestro master de Kubernetes (ub-nodo0-sbd) crearemos el Secret, que no es nada más que el usuario y el password para poder acceder a nuestro Registry. Lo haremos de la siguiente manera:

rootdevel@ub-nodo0-sbd:~$ kubectl create secret docker-registry regsecret --docker-server=ub-registry-sbd.ilba.cat --docker-username=oscarmas --docker-password=xxx [email protected]

Una vez todo preparado, crearemos nuestro nuevo pod desde la imagen de nginx que tenemos en nuestro Registry y posteriormente verificaremos que se ha desplegado correctamente:

rootdevel@ub-nodo0-sbd:~$ cat private-registry-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
    - name: private-registry-pod
      image: ub-registry-sbd.ilba.cat/ub_nginx:0.0.1
  imagePullSecrets:
    - name: regsecret
rootdevel@ub-nodo0-sbd:~$ kubectl create -f private-registry-pod.yaml
rootdevel@ub-nodo0-sbd:~$ kubectl get pods

No te pierdas la serie completa sobre Kubernetes de Oscar Mas:

  • Kubernetes – Introducción a Kubernetes
  • Kubernetes – Instalación
  • Kubernetes – RollingUpdate con Kubernetes
  • Kubernetes – Dashboard
  • Kubernetes – Volúmenes NFS
  • Kubernetes – Registry
  • Kubernetes – Traefik
  • Kubernetes – Systemd con Traefik y Proxy de Kubernetes
  • Kubernetes – Heapster Influx Grafana
  • Kubernetes – Labels de Kubernetes
  • Kubernetes – API: Swagger
  • Kubernetes – API: Creando nuestro primer POD
  • Kubernetes – API: Seguridad con Token

Filed Under: kubernetes Tagged With: kubernetes, kubernetes introduccion, kubernetes oscar, kubernetes oscar mas

Reader Interactions

Comments

  1. rmga says

    21 March, 2024 at 8:44

    es un post muy informativo y súper bien explicado. Muchas gracias.

    Reply

Trackbacks

  1. Kubernetes: Introducción a Kubernetes - El Blog de Jorge de la Cruz says:
    3 January, 2018 at 9:27

    […] Kubernetes – Registry […]

    Reply
  2. Kubernetes - Traefik - El Blog de Jorge de la Cruz says:
    9 January, 2018 at 8:16

    […] Kubernetes – Registry […]

    Reply
  3. Kubernetes: Dashboard - El Blog de Jorge de la Cruz says:
    13 January, 2018 at 12:37

    […] Kubernetes – Registry […]

    Reply
  4. Kubernetes: Systemd con Traefik y Proxy de Kubernetes - El Blog de Jorge de la Cruz says:
    16 January, 2018 at 8:16

    […] Kubernetes – Registry […]

    Reply
  5. Kubernetes: Volúmenes NFS - El Blog de Jorge de la Cruz says:
    20 January, 2018 at 21:51

    […] Kubernetes – Registry […]

    Reply
  6. Kubernetes: Instalación - El Blog de Jorge de la Cruz says:
    20 January, 2018 at 21:52

    […] Kubernetes – Registry […]

    Reply
  7. Kubernetes: Heapster Influx Grafana - El Blog de Jorge de la Cruz says:
    23 January, 2018 at 8:15

    […] Kubernetes – Registry […]

    Reply
  8. Kubernetes: Labels de Kubernetes - El Blog de Jorge de la Cruz says:
    30 January, 2018 at 8:15

    […] Kubernetes – Registry […]

    Reply
  9. Kubernetes: RollingUpdate con Kubernetes - El Blog de Jorge de la Cruz says:
    3 February, 2018 at 13:08

    […] Kubernetes – Registry […]

    Reply
  10. Kubernetes: API: Creando nuestro primer POD - El Blog de Jorge de la Cruz says:
    13 February, 2018 at 8:15

    […] Kubernetes – Registry […]

    Reply
  11. Kubernetes: API: Seguridad con Token - El Blog de Jorge de la Cruz says:
    20 February, 2018 at 8:16

    […] 6 – Registry […]

    Reply
  12. Chaos Engineering: Pumba - El Blog de Jorge de la Cruz says:
    27 February, 2018 at 8:16

    […] 6 – Registry […]

    Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Primary Sidebar

  • Email
  • GitHub
  • LinkedIn
  • RSS
  • Twitter
  • YouTube

Gold Partners

Silver Partners

Libros Gratuitos

Cloud por vExperts
VMware por vExperts

VMware vExpert

Puesto 16 en Top vBlog

Calendario de Posts

January 2018
M T W T F S S
1234567
891011121314
15161718192021
22232425262728
293031  
« Dec   Feb »

Disclaimer

Todas las opiniones expresadas en este sitio son las mías propias y no representan las opiniones de ninguna compañía con la que haya trabajado, esté trabajando o vaya a estar trabajando.

Copyright © 2026 · El Blog de Jorge de la Cruz