Citrix Application Delivery Management

Instalar el agente Citrix ADM en la nube de Microsoft Azure

El agente funciona como intermediario entre Citrix Application Delivery Management (Citrix ADM) y las instancias administradas en el centro de datos empresarial o en la nube.

Para instalar el agente de Citrix ADM en la nube de Microsoft Azure, debe crear una instancia del agente en la red virtual. Obtenga la imagen del agente de Citrix ADM de Azure Marketplace y, a continuación, use el portal de Azure Resource Manager para crear el agente.

Antes de comenzar a crear la instancia del agente de Citrix ADM, asegúrese de haber creado una red virtual con las subredes necesarias en las que residirá la instancia. Puede crear redes virtuales durante el Provisioning de VM, pero sin la flexibilidad necesaria para crear subredes diferentes. Para obtener información sobre la creación de redes virtuales, consulte http://azure.microsoft.com/en-us/documentation/articles/create-virtual-network.

Configure el servidor DNS y la conectividad VPN que permita que una máquina virtual acceda a los recursos de Internet.

Requisitos previos

Asegúrese de que tiene lo siguiente:

  • Una cuenta de usuario de Microsoft Azure
  • Acceso a Microsoft Azure Resource Manager

Nota

  • Citrix recomienda crear grupos de recursos, grupos de seguridad de red, redes virtuales y otras entidades antes de aprovisionar la máquina virtual del agente Citrix ADM, de modo que la información de red esté disponible durante el Provisioning.
  • Para que el agente de Citrix ADM se comunique con Citrix ADM y las instancias de Citrix ADC, asegúrese de que los puertos recomendados estén abiertos. Para obtener información detallada acerca de los requisitos de puerto para el agente Citrix ADM, consulte Puertos.

Para instalar el agente Citrix ADM en Microsoft Azure Cloud:

  1. Inicie sesión en el portal de Azure (https://portal.azure.com) con sus credenciales de Microsoft Azure.

  2. Haga clic en +Crear un recurso.

  3. Escriba Citrix ADM Agent en la barra de búsqueda y seleccione Citrix ADM Service Agent.

    Panel de redes de Azure

  4. Haga clic en Crear.

    Crear Administrador de Recursos

  5. En el panel Crear máquina virtual, especifique los valores necesarios en cada sección para crear una máquina virtual.

    Conceptos básicos:

    En esta ficha, especifique detalles del proyecto, detalles de instanciay cuenta de administrador.

    Crear máquina virtual

    • Grupo de recursos: Seleccione el grupo de recursos que ha creado en la lista desplegable.

      Nota

      Puede crear un grupo de recursos en este punto, pero Citrix recomienda que cree un grupo de recursos a partir de Grupos de recursos en el Azure Resource Manager y, a continuación, seleccione el grupo en la lista desplegable.

    • Nombre de máquina virtual : especifique un nombre para la instancia del agente de Citrix ADM.

    • Región : seleccione la región en la que desea desplegar un agente.

    • Opciones de disponibilidad : seleccione el conjunto de disponibilidad de la lista.

    • Imagen : este campo muestra la imagen del agente ya seleccionada. Si desea cambiar a una imagen de agente diferente, seleccione la imagen requerida en la lista.

    • Tamaño : especifique el tipo y el tamaño del disco virtual para implementar el agente Citrix ADM.

      Seleccione el tipo de disco virtual compatible (HDD o SSD) de la lista.

    • Tipo de autenticación: Seleccione Contraseña.

    • Nombre de usuario y contraseña: Especifique un nombre de usuario y una contraseña para tener acceso a los recursos del grupo de recursos que ha creado.

    Discos:

    En esta ficha, especifique las opciones de disco y Discos de datos.

    Especificar información de discos

    • Tipo de disco de SO : seleccione el tipo de disco virtual (HDD o SSD).

    Redes:

    Especifique los detalles de red requeridos:

    Especificar redes

    • Red virtual: Seleccione la red virtual.
    • Subred: Establezca la dirección de la subred.
    • Dirección IP pública: Seleccione la dirección IP.
    • Grupo de seguridad de red: Seleccione el grupo de seguridad que ha creado.
    • Seleccionar puertos entrantes : si permite puertos entrantes públicos, asegúrese de que las reglas entrantes y salientes estén configuradas en el grupo de seguridad. A continuación, seleccione los puertos entrantes de la lista. Para obtener más información, consulte Requisitos previos.

    Gestión:

    Especifique el Centro de seguridad de Azure, la supervisióny la identidad.

    Especificar administración

    Avanzado:

    Opcional, especifique el grupo de ubicaciónExtensiones,Datos personalizadosy Proximidad.

    Especificar avanzado

    En Datos personalizados, puede especificar un script de registro automático del agente para registrar el agente con el servicio ADM. A continuación se muestra una secuencia de comandos de ejemplo que ejecuta la secuencia de comandos deployment.py y registra el agente:

    ```python
    #!/var/python/bin/python2.7
    import os
    import requests
    import json
    import time
    import re
    import logging
    import logging.handlers
    import boto3
    
    '''
    Descripción general de la secuencia de comandos:
    El script ayuda a registrar un agente ADM con ADM. Pásalo en los datos de usuario para hacer que el agente ADM en AWS se registre automáticamente al iniciar. El flujo de trabajo es el siguiente
    1)  Obtener las credenciales de la API del servicio ADM (ID y secreto) del almacén secreto de AWS (NOTA: debe asignar el rol de IAM al agente de ADM que dará permiso para recuperar secretos del almacén secreto de AWS)
    2)  Inicie sesión en el servicio ADM con credenciales obtenidas en el paso 1
    3)  Llame al servicio ADM para obtener credenciales (ServiceURL y token) para el registro del agente
    4)  Llama al registro utilizando las credenciales obtenidas en el paso 3
    '''
    
    '''
    Estos son los marcadores de posición que debe reemplazar de acuerdo con las configuraciones de configuración
    aws_secret_id: Id. del secreto de AWS donde ha almacenado las credenciales de ADM
    El valor de los secretos debe estar en el siguiente formato json
    { "adm_user_id_key": "YOUR_ID", " adm_user_secret_key": "YOUR_SECRET"}
    '''
    
    aws_secret_id = "<AWS_secret_id>"
    adm_ip_or_hostname = "<YOUR_ADM_POP>.adm.cloud.com"
    
    '''
    Configurar un registrador específico con el nivel de salida deseado y el nombre del archivo de registro
    '''
    log_file_name_local = os.path.basename(__file__)
    LOG_FILENAME = '/var/log/' + 'bootstrap' + '.log'
    LOG_MAX_BYTE = 50*1024*1024
    LOG_BACKUP_COUNT = 20
    
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.DEBUG)
    logger_handler = logging.handlers.RotatingFileHandler(LOG_FILENAME, maxBytes=LOG_MAX_BYTE, backupCount=LOG_BACKUP_COUNT)
    logger_fortmater = logging.Formatter(fmt='%(asctime)-2s:%(funcName)30s:%(lineno)4d: [%(levelname)s] %(message)s', datefmt="%Y-%m-%d %H:%M:%S")
    logger_handler.setFormatter(logger_fortmater)
    logger.addHandler(logger_handler)
    
    class APIHandlerException(Exception):
        def __init__(self, error_code, message):
            self.error_code = error_code
            self.message = message
    
        def __str__(self):
            return self.message + ". Error code '" + str(self.error_code) + "'"
    
    def parse_response(response, url, print_response=True):
        if not response.ok:
            if "reboot" in url:
                logger.debug('No response for url: reboot')
                resp = {"errorcode": "500", "message": "Error while reading response."}
                return resp
    
            if print_response:
                logger.debug('Response text for %s is %s' % (url, response.text))
    
            response = json.loads(response.text)
            logger.debug("ErrorCode - " + str(response['errorcode']) + ". Message -" + str(response['message']))
            raise APIHandlerException(response['errorcode'], str(response['message']))
        elif response.text:
            if print_response:
                logger.debug('Response text for %s is %s' % (url, response.text))
    
            result = json.loads(response.text)
            if 'errorcode' in result and result['errorcode'] > 0:
                raise APIHandlerException(result['errorcode'], str(result['message']))
            return result
    
    def _request(method, url, data=None, headers=None, retry=3, print_response=True):
        try:
            response = requests.request(method, url, data=data, headers=headers)
            result = parse_response(response, url, print_response=print_response)
            return result
        except [requests.exceptions.ConnectionError, requests.exceptions.ConnectTimeout]:
            if retry > 0:
                return _request(method, url, data, headers, retry-1, print_response=print_response)
            else:
                raise APIHandlerException(503, 'ConnectionError')
        except requests.exceptions.RequestException as e:
            logger.debug(str(e))
            raise APIHandlerException(500, str(e))
        except APIHandlerException as e:
            logger.debug("URL: %s, Error: %s, Message: %s" % (url, e.error_code, e.message))
            raise e
        except Exception as e:
            raise APIHandlerException(500, str(e))
    
    try:
        '''Get the AWS Region'''
        client = boto3.client('s3')
        my_region = client.meta.region_name
        logger.debug("The rgion is %s" % (my_region))
    
        '''Creating a Boto cleint session'''
        session = boto3.session.Session()
        client = session.client(
            service_name='secretsmanager',
            region_name=my_region
        )
    
        '''Getting the values stored in the secret with id: <aws_secret_id>'''
        get_id_value_response = client.get_secret_value(
            SecretId = aws_secret_id
        )
        adm_user_id = json.loads(get_id_value_response["SecretString"])["adm_user_id_key"]
        adm_user_secret = json.loads(get_id_value_response["SecretString"])["adm_user_secret_key"]
    
    except Exception as e:
        logger.debug("Fetching of ADM credentials from AWS secret failed with error: %s" % (str(e)))
        raise e
    
    '''
    Inicialización de manejadores de API ADM comunes
    '''
    mas_common_headers = {
        'Content-Type': "application/json",
        'Accept-type': "application/json",
        'Connection': "keep-alive",
        'isCloud': "true"
    }
    
    '''
    API para iniciar sesión en el ADM y obtener el ID de sesión y el ID de inquilino
    '''
    url = "https://" + str(adm_ip_or_hostname) + "/nitro/v1/config/login"
    payload = 'object={"login":{"ID":"' + adm_user_id + '","Secret":"' + adm_user_secret + '"}}'
    try:
        response = _request("POST", url, data=payload, headers=mas_common_headers)
        sessionid = response["login"][0]["sessionid"]
        tenant_id = response["login"][0]["tenant_name"]
    except Exception as e:
        logger.debug("Login call to the ADM failed with error: %s" % (str(e)))
        raise e
    
    '''
    API para obtener la URL del servicio y el token que se utilizarán para registrar el agente con el ADM
    '''
    mas_common_headers['Cookie'] = 'SESSID=' + str(sessionid)
    url = "https://" + str(adm_ip_or_hostname) + "/nitro/v1/config/trust_preauthtoken/" + tenant_id +"?customer="+ tenant_id
    logger.debug("Fetching Service URL and Token.")
    try:
        response = _request("GET", url, data=None, headers=mas_common_headers)
        service_name  = response["trust_preauthtoken"][0]["service_name"]
        token = response["trust_preauthtoken"][0]["token"]
        api_gateway_url = response["trust_preauthtoken"][0]["api_gateway_url"]
    except Exception as e:
        logger.debug("Fetching of the Service URL Passed with error. %s" % (str(e)))
        raise e
    
    '''
    Ejecutar el comando register agent usando los valores que recuperamos anteriormente
    '''
    try:
        registeragent_command = "registeragent -serviceurl "+api_gateway_url+" -activationcode "+service_name+"\;"+token
        file_run_command = "/var/python/bin/python2.7 /mps/register_agent_cloud.py "+registeragent_command
        logger.debug("Executing registeragent command: %s" % (file_run_command))
        os.system(file_run_command)
    except Exception as e:
        logger.debug("Agent Registeration failed with error: %s" % (str(e)))
            raise e
    ```
    

    Si especifica este script de registro automático, omita los pasos 7 y 8.

    Etiquetas:

    Escriba el par clave-valor para las etiquetas del agente ADM. Una etiqueta consiste en un par clave-valor que distingue mayúsculas de minúsculas. Estas etiquetas le permiten organizar e identificar el agente fácilmente. Las etiquetas se aplican tanto a Azure como a Citrix ADM.

    Especificar etiquetas

    Los parámetros de configuración se validan y la ficha Revisar y crear muestra el resultado de la validación.

    • Si la validación falla, esta ficha muestra el motivo del error. Vuelva a la sección en particular y realice los cambios necesarios.
    • Si la validación pasa, haga clic en Crear. Comienza el proceso de despliegue del agente.

      Resumen de VM

      El proceso de implementación puede tardar entre 10 y 15 minutos aproximadamente. Una vez que la implementación se haya completado correctamente, puede ver la máquina virtual del agente Citrix ADM en su cuenta de Microsoft Azure.

    Implementar VM

  6. Una vez que el agente esté en funcionamiento, utilice un cliente SSH, inicie sesión en su agente Citrix ADM mediante la dirección IP pública.

    Nota

     -  Si especificó el nombre de usuario como `nsrecover`, utilice las credenciales predeterminadas del agente de Citrix ADM (**nsrecover/nsroot**) para iniciar sesión en la máquina virtual.
    
    • Citrix recomienda cambiar la contraseña predeterminada después del primer inicio de sesión. Para cambiar la contraseña, escriba shell: passwd nsroot.
  7. Introduzca el siguiente comando para invocar la pantalla de despliegue: deployment_type.py

  8. Introduzca la URL de servicio y el código de activación que ha copiado y guardado desde la página Configurar agentes en Citrix ADM, como se indica en Introducción. El agente utiliza la URL del servicio para localizar el servicio y el código de activación para registrarse en el servicio.

    Registrar agente

Una vez que el registro del agente se realiza correctamente, el agente se reinicia para completar el proceso de instalación.

Después de reiniciar el agente, acceda a Citrix ADM y, en la página Configurar agente, en Agentes descubiertos, compruebe el estado del agente.

Instalar el agente Citrix ADM en la nube de Microsoft Azure