GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo configurar el registro privado de Docker en Kubernetes (k8s)

Siempre se recomienda tener un registro o repositorio de docker privado en su clúster de Kubernetes. El registro privado de Docker permite a los desarrolladores enviar y recibir imágenes de contenedores privados. Una vez que los contenedores de la aplicación se envían al registro privado, los desarrolladores pueden usar la ruta de su registro privado mientras crean e implementan sus archivos yaml.

En este artículo, aprenderemos cómo podemos implementar el registro privado de Docker como una implementación sobre el clúster de Kubernetes. Supongo que el clúster de Kubernetes ya está en funcionamiento.

Detalles del laboratorio de Kubernetes para configurar el registro privado de docker

  • k8s-master – 192.168.1.40 – CentOS 7
  • k8s-worker-1 – 192.168.1.41 – CentOS 7
  • k8s-worker-2 – 192.168.1.42  – CentOS 7
  • usuario de kadmin con derechos sudo
  • Compartir NFS '/opt/certs' &'/opt/registry'

Nota:  En mi caso, configuré el servidor nfs en el nodo maestro y exporté /opt/certs y /opt/registry como recurso compartido nfs.

Antes de comenzar la implementación del registro privado, asegúrese de que estos recursos compartidos nfs estén montados en cada nodo trabajador. Ejecute los siguientes comandos en cada nodo trabajador.

$ sudo mkdir /opt/certs /opt/registry$ sudo mount 192.168.1.40:/opt/certs /opt/certs$ sudo mount 192.168.1.40:/opt/registry /opt/registry

Para montaje permanente, agregue entradas nfs en el archivo /etc/fstab.

En lugar de montar estos recursos compartidos nfs, también podemos crear volúmenes persistentes basados ​​en nfs y luego podemos usar estos volúmenes persistentes en el archivo yaml.

Profundicemos en los pasos de instalación y configuración del registro docker privado en Kubernetes.

Paso 1) Generar certificados autofirmados para registro privado

Inicie sesión en su plano de control o nodo maestro y use el comando openssl para generar certificados autofirmados para el repositorio privado de Docker.

$ cd /opt $ sudo openssl req -newkey rsa:4096 -nodes -sha256 -keyout \ ./certs/registry.key -x509 -days 365 -out ./certs/registry.crt

Una vez que se generan la clave y el archivo de certificado, use el comando ls para verificarlos,

[[email protected] opt]$ ls -l certs/total 8-rw-r--r--. 1 raíz raíz 2114 26 de septiembre 03:26 registration.crt-rw-r--r--. 1 root root 3272 26 de septiembre 03:26 registration.key[[email protected] opt]$

Paso 2) Implementar un registro privado como implementación a través de un archivo yaml

En su nodo maestro, cree un archivo private-registry.yaml con el siguiente contenido

[[correo electrónico protegido] ~]$ mkdir docker-repo[[correo electrónico protegido] ~]$ cd docker-repo/[[correo electrónico protegido] docker-repo]$ vi private-registry.yamlapiVersion:apps/v1kind:Deploymentmetadata :  nombre:repositorio privado-k8s  etiquetas:    aplicación:repositorio privado-k8sspec:  réplicas:1  selector:    etiquetas de coincidencia:      aplicación:repositorio privado-k8s  plantilla:    metadatos:      etiquetas:        aplicación:repositorio privado-k8s    especificación:      volúmenes:      - Nombre:certs-vol hostpath:ruta:/opt /certs Tipo:Directorio-Nombre:Registry-Vol HostPath:ruta:/opt /Registry Tipo:Contenedores de directorio:-Imagen:Registro:2 Nombre:Repository privado-k8s ImagePullPolicy:IfNotPresent Env:- Nombre:Registry_http_tls_certificate Value:"/certs/registry.crt" - Nombre:Registry_http_tls_key Value:"/certs/registry.key" Puertos:- Contenedor:5000 Volumemounts:- - - - - - nombre:certs-vol            ruta de montaje:/certs          - nombre:registro-vol            ruta de montaje:/var/lib/registry

guarde y cierre el archivo yaml

Ejecute el siguiente comando kubectl, implemente el registro privado utilizando el archivo yaml creado anteriormente,

[[email protected] docker-repo]$ kubectl create -f private-registry.yamldeployment.apps/private-repository-k8s created[[email protected] docker-repo]$

Ejecute los siguientes comandos de kubectl para verificar el estado de la implementación del registro y su módulo.

[[email protected] ~]$ kubectl get deployments private-repository-k8sNAME                     LISTO   ACTUALIZADO   DISPONIBLE   AGEprivate-repository-k8s   1/1     1            1        [   3m3 protegido] ~]$ kubectl obtener pods | grep -i private-repoprivate-repository-k8s-85cf76b9d7-qsjxq   1/1     En ejecución   0          5m14s[[email protected] ~]$

Perfecto, la salida anterior confirma que el registro se implementó correctamente. Ahora copie el archivo del certificado de registro en los nodos trabajadores y el nodo maestro en la carpeta "/etc/pki/ca-trust/source/anchors". Ejecute los siguientes comandos en el nodo maestro y en cada nodo trabajador

$ sudo cp /opt/certs/registry.crt /etc/pki/ca-trust/source/anchors/$ sudo update-ca-trust$ sudo systemctl reiniciar ventana acoplable

Paso 3) Exponer la implementación del registro como un tipo de servicio de puerto de nodo

Para exponer la implementación del registro como un tipo de servicio de puerto de nodo, cree el siguiente archivo yaml con el contenido a continuación,

[[email protected] ~]$ cd docker-repo/[[email protected] docker-repo]$ vi private-registry-svc.yamlapiVersion:v1kind:Servicemetadata:  label:    app:private-repository-k8s  nombre:private-repository-k8sspec:  puertos:  - puerto:5000    nodePort:31320    protocolo:TCP    targetPort:5000  selector:    aplicación:private-repository-k8s  tipo:NodePort

guarde y cierre el archivo.

Ahora implemente el servicio ejecutando el siguiente comando kubectl,

$ kubectl create -f private-registry-svc.yamlservice/private-repository-k8s created$

Ejecute debajo del comando kubectl para verificar el estado del servicio,

[[email protected] ~]$ kubectl get svc private-repository-k8sNAME                   TYPE     CLUSTER-IP    EXTERNAL-IP PORT(S)        AGEprivate-repository-k8s NodePort 10.100.113.39        2000TC/320mP correo electrónico protegido] ~]$

Paso 4) Probar y usar el registro docker privado en k8s

Para probar el registro privado, descargaremos la imagen nginx localmente y luego cargaremos esa imagen en el registro privado, desde el nodo maestro ejecute el siguiente conjunto de comandos,

$ sudo docker pull nginx$ sudo docker tag nginx:latest k8s-master:31320/nginx:1.17$ sudo docker push k8s-master:31320/nginx:1.17

La salida del comando anterior se vería a continuación:

Ejecute el siguiente comando docker para verificar si nginx se carga en un repositorio privado o no.

[[email protected] ~]$ sudo docker image ls | grep -i nginxnginx                     último   7e4d58f0e5f3        Hace 2 semanas      133MBk8s-master:31320/nginx    1.17     7e4d58f0e5f3        2 [email] ~3 MB protec[$preted] ~3 MB protec[$preted] 

Ahora, implementemos una implementación basada en nginx y, en el archivo yaml, especifique la ruta de la imagen como nuestro registro docker privado. A continuación se muestra un ejemplo:

[[email protected] ~]$ vi nginx-test-deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:  name:nginx-test-deployment  label:    app:nginxspec:  replicas:3  selector:    matchLabels:      app:nginx  template :    metadatos:      etiquetas:        aplicación:nginx    especificación:      contenedores:      - nombre:nginx-1-17        imagen:k8s-master:31320/nginx:1.17        puertos:        - containerPort:80

Guardar y cerrar el archivo

Ejecute los siguientes comandos de kubectl,

[[email protected] ~]$ kubectl create -f nginx-test-deployment.yamldeployment.apps/nginx-test-deployment created[[email protected] ~]$ kubectl get deployments  nginx-test-deploymentNAME                    LISTO   ARRIBA- HASTA LA FECHA   DISPONIBLE   AGenginx-test-deployment   3/3     3            3           13s[[email protected] ~]$[[email protected] ~]$ kubectl get  pods | GREP NGINX-TEST-DEPLOYMENTNNGINX-TEST-Deployment-F488694B5-2RVMV 1/1 Running 0 80snginx-test-DEPLOYMent-F488694B5-8KB6C 1/1 Running 0 80Snginx-Test-Deployment-F488694B5-DGCXL 1/1 Running 0 80s [[[[ correo electrónico protegido] ~]$

Intente describir cualquier pod usando el comando 'kubectl describe' y verifique la ruta de la imagen

$ kubectl describe pod nginx-test-deployment-f488694b5-2rvmv

La salida del comando anterior sería,

El resultado anterior confirma que la ruta de la imagen del contenedor es nuestro registro docker privado, por lo que significa que la imagen nginx se descargó del registro privado. Eso es todo de este artículo, espero que estos pasos lo ayuden a configurar el registro privado de docker en su clúster de Kubernetes. Comparta sus opiniones y comentarios en la sección de comentarios a continuación.

Leer tambiénCómo configurar el clúster de Kubernetes en Google Cloud Platform (GCP)

Leer tambiénCómo configurar el controlador de entrada NGINX en Kubernetes


Docker
  1. Cómo configurar y usar el registro privado de Docker

  2. Cómo instalar Kubernetes en Ubuntu 18.04

  3. Cómo configurar un registro privado de Docker en Rocky Linux 8

  4. ¿Qué es containerd y cómo se relaciona con Docker y Kubernetes?

  5. Cómo configurar un servidor web Apache simple en un contenedor Docker

Cómo configurar MySQL con Docker en Linux

Docker:cómo configurar Jupyter detrás del proxy Nginx

Cómo configurar Home Assistant en una Raspberry Pi usando Docker

Cómo implementar pilas de Docker Compose en Kubernetes con Kompose

Cómo escalar contenedores Docker en servidores usando Kubernetes

Cómo crear un registro Docker privado en Ubuntu Linux