Desplegar un servidor SFTP con IBM Object Storage en Openshift

Introducción

SFTP es uno de los protocolos de transferencia de archivos más utilizados en los procesos comerciales. La mayoría de los profesionales de TI confía en SFTP, este protocolo es fácil de usar, funciona bien con CLI, es gratuito, se ejecuta en cualquier lugar y se puede configurar con automatización. Por otro lado, los tiempos están cambiando y el almacenamiento en la nube pública brinda nuevas oportunidades e innovación. Tener acceso a un depósito de almacenamiento de IBM CLoud Object Storage (ICOS), un repositorio globalmente compartido, escalable y confiable que es muy rentable, puede ser todo lo que necesita.

Entonces, ¿cómo puedes usar lo mejor de ambos mundos? En este tutorial vamos a aprender a desplegar SFTP como un contenedor dentro de un cluster de Openshift a partir de una imagen que usa s3fs, un sistema de archivos FUSE que le permite montar un bucket de Object Storage como un sistema de archivos.

Requisitos

Tiempo estimado

El tiempo estimado que puede llevar este tutorial es menos de 30 minutos.

Pasos

1. Crear credenciales HMAC de la instancia COS

Las credenciales de HMAC consisten en un Access Key y Secret Key para su uso con herramientas y bibliotecas compatibles con S3 que requieren autenticación. Para obtener las credenciales HMAC mediante la consola, ir a la pestaña Credenciales de Servicio dentro de los detalles de tu instancia de Object Storage, hacer click en Nueva Credencial.

Screenshot del panel de credenciales del servicio

Ingresar el nombre de la credencial y luego hacer click en Opciones Avanzadas lo cual mostrará la opción de incluir credenciales HMAC, finalmente desliza a la derecha para activar y haz clik en Añadir.

Screenshot del panel de creación de nuevas credenciales

El access_key_id y secret_access_key serán utilizados más adelante como parte de la configuración de los secrets.

2. Crear imagen en IBM Container Registry

La imagen contiene un conjunto de instrucciones necesarias para desplegar un servidor sftp y montar un bucket como filesystem, está disponible en DockerHub. En está ocasión, se usará el registro privado de IBM Cloud para almacenar la imagen.

Descargue la imagen a su computadora local.

docker pull mishelc/s3fs-cos

Listar las imágenes con el siguiente comando para ver esta imagen en el entorno local.

docker images

Etiquetar la imagen con el siguiente formato. Reemplazar los valores correspondientes y ejecutar en el terminal:

docker tag mishelc/s3fs-cos <region>.icr.io/<my_namespace>/<new_image_repo>:<new_tag>

Antes de enviar la imagen a su namespace de IBM Cloud Container Registry debe registrar su daemon Docker local en IBM Cloud Container Registry, utilizando el siguiente comando:

ibmcloud cr login

Para subir la imagen al namespace de IBM Container Registry:

docker push <region>.icr.io/<my_namespace>/<image_repo>:<tag>

Puede verificar que la imagen se haya enviado correctamente ejecutando el siguiente comando:

ibmcloud cr image-list

3. Configurar Secret

Los objetos de tipo Secret en Kubernetes te permiten almacenar y administrar información confidencial de manera segura y flexible, como contraseñas y llaves ssh.

Se proporciona el archivo de configuración yaml para crear el secret en el siguiente repositorio, editar con los valores correspondientes. Puede crear un secret mediante la línea de comandos o de manera gráfica con la consola web de Openshift. Mediante línea de comandos, ejecutar lo siguiente:

oc create -f s3fs-secret.yaml

Mediante la consola web de Openshift, en el perfil de Administrator dentro del menú Workloads hacer click en Secrets, asegúrese de estar en el Project correcto, en este caso default. Para crear un secret con un archivo Yaml le damos click en Create From Yaml.

Screenshot del panel de creación de Secrets

NOTA:

Para generar una clave SSH en su sistema Linux o Mac, ejecutar el comando:

ssh-keygen -t rsa -b 4096

Para sistemas Windows, puede usar PuTTYgen.

4. Añadir privilegios al service account

Se debe añadir privilegios al service account de su proyecto, para así darle al contenedor que se creará los suficientes privilegios para permitir que s3fs-fuse administre el filesystem. Recuerde que cada proyecto de OpenShift tiene un service account de Kubernetes que se llama default.

Para acceder al clúster de Openshift mediante línea de comandos se usará el comando de login con el token generado, para ello hacer click en la parte superior derecha Copy Login Command como muestra la siguiente imagen.

Screenshot del panel de comandos de inicio de sesión

Puede ejecutar los comandos desde IBM Cloud Shell sino tiene instalado Openshift CLI. Copiar y editar el siguiente comando con el nombre del proyecto, en este caso default.

oc adm policy add-scc-to-user privileged -z default -n <project>

Resultado después de ejecutar los comando en IBM Shell:

Screenshot de la consola de IBM Cloud Shell

5. Crear Deployment

Se proporciona el archivo de configuración yaml para crear el deployemnt en el repositorio proporcionado anteriormente, solo debe editar el valor de la nombre de la imagen que uso en el paso dos. Al que igual que los demás objetos, un deployment se puede crear un mediante la línea de comandos o de manera gráfica con la consola web de Openshift.

Mediante línea de comandos, ejecutar lo siguiente:

oc create -f s3fs-deployment.yaml

Mediante la consola web de Openshift, en el perfil de Administrator dentro del menú Workloads hacer click en Deployments, y luego en Create Deployment, finalmente copiar el contenido del archivo yaml y crear.

Screenshot del panel desde el cual crear un nuevo despliegue

Mediante la consola web puede ver que los pods que se están ejecutando, o ejecutar el siguiente comando para listar los pods:

oc get pods

6. Crear Service

Para acceder al contenedor SFTP mediante el puerto 22 se debe crear un service tipo Load Balancer.

Se proporciona el archivo de configuración yaml para crear el service en el repositorio proporcionado anteriormente.

NOTA: Si modifica el label del deployment, asegúrese de modificarlo también en el selector del service.

Al que igual que los demás objetos, un service se puede crear un mediante la línea de comandos o de manera gráfica con la consola web de Openshift. Mediante línea de comandos, ejecutar lo siguiente:

oc create -f s3fs-service.yaml

Mediante la consola web de Openshift, en el perfil de Administrator dentro del menú Networking hacer click en Services, y luego en Create Service, finalmente copiar el contenido del archivo yaml y crear.

Screenshot del panel desde el cual crear un nuevo servicio

Una vez creado podrá visualizar el hostname del servidor SFTP.

NOTA: Puede demorar un poco hasta que este disponible el balanceador de carga aprovisionado en la nube de IBM.

7. Acceder al servidor SFTP

Para abrir una conexión SFTP a un sistema remoto, use el comando sftp seguido del nombre de usuario del servidor remoto y la dirección IP o el nombre de dominio, junto a su llave privada:

sftp -i <ssh-key> -P 22 <username>@<hostname>

Una vez que se contectó al servidor SFTP puede ver que existe una carpeta s3 que es donde se montó el bucket de COS.

Screenshot de la consola con el primer ejemplo corriendo

Para la prueba se hará la transferencia de un archivo local llamado pull-secret.txt y lo podrá visualizar en su bucket COS.

Screenshot de la consola con el segundo ejemplo corriendo

El archivo ya se encuentra almacenado en el bucket como se puede ver en la siguiente imagen:

Screenshot del panel de objetos

Resumen

En este tutorial aprendimos a hacer un despliegue de un servidor SFTP usando IBM Cloud Object Storage en un cluster de Openshift, configurar los datos sensibles usando Secrets, crear los permisos correspondientes para acceder al filesystem del contenedor, luego los objetos de Deployment y Service para acceder al servidor SFTP.