Servicio NetScaler Console

Instale un agente de NetScaler en Amazon Web Services (AWS)

El agente NetScaler funciona como intermediario entre la consola de NetScaler y las instancias descubiertas en el centro de datos o en la nube.

Requisitos previos

Para lanzar una AMI del agente de NetScaler en una nube privada virtual (VPC) de Amazon Web Services (AWS) mediante la GUI de Amazon, necesita:

  • Una cuenta de AWS

  • Una nube privada virtual (VPC) de AWS

  • Una cuenta de IAM

Nota

  • Antes de aprovisionar una máquina virtual del agente de NetScaler, Citrix recomienda crear un grupo de seguridad, una red privada virtual, un par de claves, una subred y otras entidades. Por lo tanto, la información de red está disponible durante el aprovisionamiento.

  • Para que un agente de NetScaler se comunique con la consola de NetScaler y las instancias de NetScaler, asegúrese de que los puertos recomendados estén abiertos. Para obtener información completa sobre los requisitos de puerto para un agente de NetScaler, consulte Puertos.

Para instalar el agente de NetScaler en AWS:

  1. Inicie sesión en el mercado de AWS mediante sus credenciales de AWS.

  2. En el campo de búsqueda, escriba NetScaler Agent para buscar la AMI del agente NetScaler y haga clic en Ir.

  3. En la página de resultados de la búsqueda, haga clic en la AMI del agente externo de NetScaler Console en la lista disponible.

  4. En la página AMI del agente externo de NetScaler Console , haga clic en Continuar con la suscripción.

    Agente externo de NetScaler Console

  5. Cuando la suscripción se haya realizado correctamente, haga clic en Continuar con la configuración.

    Continuar con la configuración

  6. En la página Configurar este software :

    1. Seleccione la AMI de la lista de opciones de cumplimiento.

    2. Seleccione la versión más reciente del agente de NetScaler en la lista de versiones de software.

    3. Seleccione su región en la lista de regiones.

    4. Haga clic en Continuar para iniciar

      Continuar con el lanzamiento

  7. En la página Iniciar este software , tiene dos opciones para registrar el agente de NetScaler:

    1. Iniciar desde el sitio web

    2. Lanzamiento con EC2

      Lanzamiento con EC2

Lanzamiento desde un sitio web

Para iniciar desde un sitio web, selecciona:

  1. Un tipo de instancia EC2 de la lista de tipos de instancias EC2

  2. Una VPC de la lista de ajustes de VPC. Haga clic en Crear una VPC en EC2 para crear una VPC para su software.

  3. Una subred de la lista de ajustes de subred. Haga clic en Crear una subred en EC2 para crear una subred después de seleccionar la VPC.

  4. Un grupo de seguridad para el firewall de la lista de configuración del grupo de seguridad. Haga clic en Crear nuevo según la configuración del vendedor para crear un grupo de seguridad.

  5. Un par de claves para garantizar la seguridad del acceso desde la lista de ajustes de pares de claves. Haga clic en Crear un par de claves en EC2 para crear un par de claves para el software.

  6. Haga clic en Iniciar

    Lanzar un sitio web

  7. El lanzamiento desde un sitio web es un éxito.

    El lanzamiento desde un sitio web es correcto

    Nota

    El proceso de implementación puede tardar entre 10 y 15 minutos aproximadamente. Una vez completada correctamente la implementación, puede ver la máquina virtual del agente de NetScaler en su cuenta de AWS.

  8. Una vez desplegado el agente, asigne un nombre al agente de NetScaler.

  9. Una vez que el agente esté en funcionamiento, asigne una dirección IP elástica para su agente de NetScaler.

    Nota

    La dirección IP elástica permite al agente de NetScaler comunicarse con NetScaler Console. Sin embargo, es posible que no se necesite una dirección IP elástica si ha configurado NAT Gateway para dirigir el tráfico a Internet.

  10. Con un cliente SSH, inicie sesión en su agente de NetScaler.

    Nota

    Puede iniciar sesión en el agente de NetScaler de una de las siguientes maneras:

    • Use nsrecover como nombre de usuario e ID de instancia de AWS como contraseña.

    • Use nsroot como nombre de usuario y un par de claves válido como contraseña.

  11. Introduzca el siguiente comando para invocar la pantalla de implementación: deployment_type.py

  12. Introduzca la URL del servicio y el código de activación que copió y guardó en la página Configurar agentes de NetScaler Console, tal y como se indica en Primeros pasos. El agente utiliza la URL del servicio para localizar el servicio y el código de activación para registrarse en el servicio.

    Implementación de NetScaler Console

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

Una vez reiniciado el agente, acceda a NetScaler Console y, en la página Configurar agente , en Agentes descubiertos , compruebe el estado del agente.

Lanzamiento con EC2

Para iniciar con EC2, seleccione Iniciar a través de EC2 en la lista Elegir acción y, a continuación, haga clic en Iniciar.

  1. En la página Elegir un Tipo de Instancia, seleccione la instancia y haga clic en Siguiente: Configurar Detalles de Instancia.

    Configurar los detalles de la instancia

  2. En la página Configurar Detalles de Instancia, especifique los parámetros necesarios.

    En la sección Detalles avanzados, puede habilitar un agente de contacto cero especificando detalles de autenticación o un script en el campo Datos del usuario.

    • Detallesde autenticación : especifique la URL del servicio y el código de activación que copió de la página Configurar agentes de NetScaler Console, tal y como se indica en Primeros pasos. Introduzca los detalles en el siguiente formato.

       registeragent -serviceurl <apigatewayurl> -activationcode <activationcodevalue>
       <!--NeedCopy-->
      

      El agente usa esta información para registrarse automáticamente en la consola de NetScaler durante el arranque.

    • Script: especifique un script de registro automático del agente como datos de usuario. A continuación se muestra un script de ejemplo:

       #!/var/python/bin/python2.7
       import os
       import requests
       import json
       import time
       import re
       import logging
       import logging.handlers
       import boto3
      
       '''
       Overview of the Script:
       The script helps to register a NetScaler agent with NetScaler Console. Pass it in userdata to make NetScaler agent in AWS to autoregister on bootup. The workflow is as follows
       1)  Fetch the NetScaler Console API credentials (ID and secret) from AWS secret store (NOTE: you have to assign IAM role to the NetScaler agent that will give permission to fetch secrets from AWS secret store)
       2)  Login to NetScaler Console with credentials fetched in step 1
       3)  Call NetScaler Console to fetch credentials (serviceURL and token) for agent registration
       4)  Calls registration by using the credentials fetched in step 3
       '''
      
       '''
       These are the placeholders which you need to replace according to your setup configurations
       aws_secret_id: Id of the AWS secret where you have stored NetScaler Console Credentials
       The secrets value should be in the following json format
       { "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"
      
       '''
       Set up a specific logger with your desired output level and log file name
       '''
       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 NetScaler Console credentials from AWS secret failed with error: %s" % (str(e)))
           raise e
      
       '''
       Initializing common NetScaler Console API handlers
       '''
       mas_common_headers = {
           'Content-Type': "application/json",
           'Accept-type': "application/json",
           'Connection': "keep-alive",
           'isCloud': "true"
       }
      
       '''
       API to login to the NetScaler Console and fetch the Session ID and Tenant ID
       '''
       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 NetScaler Console failed with error: %s" % (str(e)))
           raise e
      
       '''
       API to fetch the service URL and Token to be used for registering the agent with the NetScaler Console
       '''
       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
      
       '''
       Running the register agent command using the values we retrieved earlier
       '''
       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
       <!--NeedCopy-->
      

      Este script obtiene los detalles de autenticación del administrador de secretos de AWS y lo ejecuta para deployment.pyregistrar el agente en la consola de NetScaler.

    Configurar los detalles de la instancia

    Nota

    Si bien puede asignar automáticamente una dirección IP pública, también puede asignar una dirección IP elástica. La asignación de una dirección IP elástica es necesaria cuando la puerta de enlace NAT no está configurada.

    Si la dirección IP elástica no está configurada en este paso, aún puede hacerlo en la consola EC2. Puede crear una nueva dirección IP elástica y asociarla con el agente de NetScaler mediante el ID de instancia o el ENI-ID.

    Haga clic en Agregar almacenamiento.

  3. En la página Agregar almacenamiento, configure la configuración del dispositivo de almacenamiento para la instancia y haga clic en Siguiente: Agregar etiquetas.

    Agregar etiquetas

  4. En la página Agregar etiquetas, defina la etiqueta de la instancia y haga clic en Siguiente: Configurar grupo de seguridad.

    Configurar grupo de seguridad

  5. En la página Configurar grupo de seguridad, agregue reglas para permitir tráfico específico a la instancia y haga clic en Revisar y lanzar.

    Revisar y lanzar

  6. En la página Revisar Inicio de Instancia, revise la configuración de la instancia y haga clic en Iniciar.

  7. En el cuadro de diálogo Seleccionar un par de claves existente o crear un par de claves nuevo, cree un par de claves. También puede seleccionar entre los pares de claves existentes.

    Acepte el acuse de recibo y haga clic en Iniciar instancias.

    Instancias de lanzamiento

El proceso de implementación puede tardar entre 10 y 15 minutos aproximadamente. Una vez completada correctamente la implementación, puede ver la máquina virtual del agente de NetScaler en su cuenta de AWS.

Instale un agente de NetScaler en Amazon Web Services (AWS)