Publicar un servicio con zrok

Ivan Jaimes
Publicado:
Tiempo: 6 min

¿Qué es zrok?

(/ziːɹɒk/ ZEE-rock) es una plataforma de intercambio segura, de código abierto y auto-hospedable (self-hostable, no se si se pueda traducir literalmente) que simplifica proteger y compartir archivos o servicios de red. Hay una oferta reforzada de zrok como servicio disponible en https://zrok.io con un generoso nivel gratuito.

Es de código abierto y tiene su repositorio en github.

¿Para qué es?

Se puede usar zrok para compartir un servicio en ejecución, como un servidor web o un socket de red, o para compartir un directorio de archivos estáticos. Si se comparte públicamente, se puede reservar un subdominio, habilitar opciones de autenticación o ambas cosas. Si se comparte de forma privada, solo los usuarios con el token compartido podrán acceder al recurso compartido. Además de lo que puede compartir públicamente, los recursos compartidos privados pueden incluir servicios TCP y UDP.

La información de configuración de zrok se puede encontrar en el sitio oficial, sin embargo se hace un pequeño resumen para facilitar su uso.

1. Invitación

Para poder registrarse en zrok, se debe descargar primero el software (disponible en windows, linux y mac) y después ejecutar el comando zrok invite

$ zrok invite enter and confirm your email address... > user@domain.com > user@domain.com [ Submit ] invitation sent to 'user@domain.com'!

2. Obtener el hash

Por seguridad, se requiere de un hash de autenticación con el servicio de zrok en la nube. Para conocer el hash que nos permite habilitar zrok, es necesario ingresar en el navegador web en la dirección: https://api.zrok.io/

Nos debe mostrar algo como: zrok enable klFEoIi0QAg7

3. Habilitar el entorno

La instrucción del paso anterior, se debe ejecutar en la terminal y debe mostrar una salida similar a:

$ zrok enable klFEoIi0QAg7 ⣻ the zrok environment was successfully enabled...

Si ejecutamos zrok status podemos ver el detalle:

$ zrok status Config: CONFIG VALUE SOURCE apiEndpoint [https://api.zrok.io](https://api.zrok.io/) env defaultFrontend public binary Environment: PROPERTY VALUE Secret Token <<SET>> Ziti Identity <<SET>>

4. Compartir entornos

Por defecto los entornos son efímeros, lo que significa que cuando se comparten se genera un identificador único para ese entorno y estará disponible mientras el servicio esté funcionando. En caso de falla o en caso de detener el servicio, se generará otro identificador para poder ingresar al enlace compartido. Para saber más se recomienda la lectura de la documentación oficial.

Hoy voy a documentar cómo compartir una dirección que sea relativamente estática, para que esto sea posible se deben seguir los siguientes pasos:

Crear un subdominio reservado

Esto permite utilizar el servicio de zrok para definir nuestro propio subdominio, por ejemplo, para poder reservar el nombre dominiobonito.share.zrok.io es necesario ejecutar el comando:

$ zrok reserve public --unique-name dominiobonito localhost:8080 [ 1.996] INFO main.(*reserveCommand).run: your reserved share token is 'dominiobonito' [ 1.996] INFO main.(*reserveCommand).run: reserved frontend endpoint: https://dominiobonito.share.zrok.io

Con lo anterior se reserva el nombre y se direcciona la petición a localhost:8080. Para poder habilitar el servicio, es necesario ejecutar otro comando más:

$ zrok share reserved dominiobonito [ 0.370] INFO main.(*shareReservedCommand).run: sharing target: 'http://localhost:8080' [ 0.370] INFO main.(*shareReservedCommand).run: using existing backend target: http://localhost:8080 [ 0.927] INFO sdk-golang/ziti.(*listenerManager).createSessionWithBackoff: {session token=[548c5da3-538d-4a21-9d42-66015fb5d534]} new service session

Con lo anterior, ahora podemos ingresar al sitio dominiobonito.share.zrok.io en nuestro navegador y visualizar el servicio publicado.