Configurar Glacier2

networking

En esta receta se explica como configurar Glacier2 para permitir el acceso a IceGrid (ubicado en una red privada) desde una red pública.

Configurar IceGrid

En primer lugar es necesario permitir el acceso de Glacier2 a las sesiones de administración de IceGrid. Para ello hay que definir un endpoint a través de la propiedad:

IceGrid.Registry.AdminSessionManager.Endpoints=tcp -h host -p port

Por medio de la definición de estos endpoints IceGrid crea dos objetos bien conocidos que utilizará Glacier2 para la comunicación con IceGrid.

  • IceGrid/AdminSessionManager
  • IceGrid/SSLAdminSessionManager

No es necesario configurar nada mas en el registry.

Configurar Glacier2

Ahora desde el ordenador que está conectado a ambas redes (pública y privada) se debe instanciar un glacier2router. Esta instancia
debe tener unos endpoints para la parte pública y otros para la parte privada. Esto se consigue con las propiedades:

  • Glacier2.Client.Endpoints Endpoints parte pública
  • Glacier2.Server.Endpoints Endpoints parte privada. Solo hay que indicar protocolo y host

También es necesario establecer los permisos que se desean para acceder a una sesión glacier. Como primera aproximación lo podemos dejar a Null, sin embargo soporta SSL o archivos de password tipo UNIX.

Glacier2.PermissionsVerifier=Glacier2/NullPermissionsVerifier

Además es imprescindible establecer el default locator del registry que queremos hacer accesible, así como permitir acceder a la sesión de
administración.

Ice.Default.Locator=IceGrid/Locator:tcp -h host -p port
Glacier2.SessionManager=IceGrid/AdminSessionManager

También se pueden añadir diversas propiedades para distintos propósitos, por ejemplo podemos establecer timeouts para solventar problemas con conexiones "zombies".

Glacier2.SessionTimeout=60
Glacier2.SessionManager.LocatorCacheTimeout=60

Finalmente queda lanzar el servicio.

glacier2router --Ice.Config=miConfiguracion

Detalles de implementación en las aplicaciones

A la hora de adaptar las implementaciones para utilizar IceGrid vía Glacier2 en lugar de utilizar directamente IceGrid hay que establecer el router por defecto. Por lo que hay que eliminar la propiedad Ice.Default.Locator y añadir la propiedad Ice.Default.Router con el proxy hacia la parte pública de Glacier2.

También es necesario declarar las propiedades Ice.ACM.Client e Ice.RetryIntervals.

Ice.Default.Router=Glacier2/router:tcp -h host -p port
Ice.ACM.Client=0
Ice.RetryIntervals=-1

Con respecto al código es necesario establecer una sesión con el router; una vez establecida todo lo demas funciona de forma transparente (al menos si se utiliza direcionamiento indirecto, con direccionamiento directo no lo he probado).

En python esto tendría la siguiente pinta:

defaultRouter = self.communicator().getDefaultRouter()
router = Glacier2.RouterPrx.checkedCast(defaultRouter)
router.createSession('usuario', 'password')

Referencias