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.392000TC/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:80Guardar 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-2rvmvLa 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én : Cómo configurar el clúster de Kubernetes en Google Cloud Platform (GCP)
Leer también : Cómo configurar el controlador de entrada NGINX en Kubernetes