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



blog comments powered by Disqus