Servicio NetScaler Console

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

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

Requisitos previos

Para iniciar una AMI de agente de NetScaler dentro de una Nube Privada Virtual (VPC) de Amazon Web Services (AWS) mediante la GUI de Amazon, necesitas:

  • Una cuenta de AWS

  • Una nube privada virtual (VPC) de AWS

  • Una cuenta de IAM

  • Una URL de servicio y un código de activación para que el agente se conecte al servicio NetScaler Console. En la GUI del servicio NetScaler Console, ve a Infrastructure > Instances > Agents y haz clic en Generate Activation Code para generar tu URL de servicio y tu código de activación.

Nota

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

  • Para que un agente de NetScaler se comunique con NetScaler Console y las instancias de NetScaler, asegúrate de que los puertos recomendados estén abiertos. Para obtener detalles completos sobre los requisitos de puertos para un agente de NetScaler, consulta Puertos.

Para instalar el agente de NetScaler en AWS:

  1. Inicia sesión en el AWS marketplace usando tus credenciales de AWS.

  2. En el campo de búsqueda, escribe NetScaler agent para buscar la AMI del agente de NetScaler y haz clic en Go.

  3. En la página de resultados de búsqueda, haz clic en la NetScaler Console External agent AMI de la lista disponible.

  4. En la página NetScaler Console External Agent AMI, haz clic en Continue to Subscribe.

    Agente externo de NetScaler Console

  5. Después de que la suscripción sea exitosa, haz clic en Continue to Configuration.

    Continuar configuración

  6. En la página Configure this software:

    1. Selecciona la AMI de la lista Fulfillment option.

    2. Selecciona la última versión del agente de NetScaler de la lista Software Version.

    3. Selecciona tu región de la lista Region.

    4. Haz clic en Continue to Launch

      Continuar para iniciar

  7. En la página Launch this software, tienes dos opciones para registrar el agente de NetScaler:

    1. Iniciar desde el sitio web

    2. Iniciar con EC2

      Iniciar con EC2

Iniciar desde un sitio web

Para iniciar desde un sitio web, selecciona:

  1. Un tipo de instancia EC2 de la lista EC2 Instance Type

  2. Una VPC de la lista VPC Settings. Haz clic en Create a VPC in EC2 para crear una VPC para tu software.

  3. Una subred de la lista Subnet Settings. Haz clic en Create a subnet in EC2 para crear una subred después de seleccionar la VPC.

  4. Un grupo de seguridad para el firewall de la lista Security Group Settings. Haz clic en Create New Based On Seller Settings para crear un grupo de seguridad.

  5. Un par de claves para garantizar la seguridad de acceso de la lista Key Pair Settings. Haz clic en Create a key pair in EC2 para crear un par de claves para tu software.

  6. Haz clic en Launch

    Iniciar un sitio web

  7. El inicio desde un sitio web es exitoso.

    El inicio desde un sitio web es exitoso

    Nota

    El proceso de implementación puede tardar aproximadamente entre 10 y 15 minutos. Una vez que la implementación se haya completado con éxito, podrás ver tu máquina virtual de agente de NetScaler en tu cuenta de AWS.

  8. Una vez que el agente esté implementado, asigna un nombre a tu agente de NetScaler.

  9. Una vez que el agente esté en funcionamiento, asigna una dirección IP elástica a tu agente de NetScaler.

    Nota

    La dirección IP elástica permite que el agente de NetScaler se comunique con NetScaler Console. Sin embargo, es posible que no se requiera una dirección IP elástica si has configurado NAT Gateway para enrutar el tráfico a Internet.

  10. Usando un cliente SSH, inicia sesión en tu agente de NetScaler.

    Nota

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

    • Usa nsrecover como nombre de usuario y el ID de instancia de AWS como contraseña.
    • Usa nsroot como nombre de usuario y un par de claves válido como contraseña.
  11. Introduce el siguiente comando para invocar la pantalla de implementación: deployment_type.py

  12. Introduce la URL de servicio y el código de activación que copiaste y guardaste de la página Set Up Agents en NetScaler Console, según las instrucciones de Introducción. El agente usa la URL de 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 sea exitoso, el agente se reiniciará para completar el proceso de instalación.

Después de que el agente se haya reiniciado, accede a NetScaler Console y, en la página Set Up Agent, en Discovered Agents, verifica el estado del agente.

Iniciar con EC2

Para iniciar con EC2, selecciona Launch through EC2 de la lista Choose Action y, a continuación, haz clic en Launch.

  1. En la página Choose an Instance Type, selecciona la instancia y haz clic en Next: Configure Instance Details.

    Configurar detalles de la instancia

  2. En la página Configure Instance Details, especifica los parámetros requeridos.

    En la sección Advanced Details, puedes habilitar un agente de cero contacto especificando los detalles de autenticación o un script en el campo User data.

    • Detalles de autenticación - Especifica la URL de servicio y el código de activación que copiaste de la página Set Up Agents en NetScaler Console, según las instrucciones de Introducción. Introduce los detalles en el siguiente formato.

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

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

    • Script - Especifica un script de registro automático del agente como datos de usuario. El siguiente es 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 ejecuta el script deployment.py para registrar el agente en NetScaler Console.

    Configurar detalles de la instancia

    Nota

    Si bien puedes asignar automáticamente una dirección IP pública, también puedes asignar una dirección IP elástica. La asignación de una dirección IP elástica es necesaria cuando NAT Gateway no está configurado.

    Si la dirección IP elástica no se establece en este paso, aún puedes hacerlo en la consola de EC2. Puedes crear una nueva dirección IP elástica y asociarla con el agente de NetScaler usando el ID de instancia o el ID de ENI.

    Haz clic en Add Storage.

  3. En la página Add Storage, configura los ajustes del dispositivo de almacenamiento para la instancia y haz clic en Next: Add Tags.

    Agregar etiquetas

  4. En la página Add Tags, define la etiqueta para la instancia y haz clic en Next: Configure Security Group.

    Configurar grupo de seguridad

  5. En la página Configure Security Group, agrega reglas para permitir tráfico específico a tu instancia y haz clic en Review and Launch.

    Revisar e iniciar

  6. En la página Review Instance Launch, revisa la configuración de la instancia y haz clic en Launch.

  7. En el cuadro de diálogo Select an existing key pair or create a new key pair, crea un par de claves. También puedes seleccionar entre los pares de claves existentes.

    Acepta el reconocimiento y haz clic en Launch Instances.

    Iniciar instancias

El proceso de implementación puede tardar aproximadamente entre 10 y 15 minutos. Una vez que la implementación se haya completado con éxito, podrás ver tu máquina virtual de agente de NetScaler en tu cuenta de AWS.

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