Puerta de enlace de componentes de Dataproc

Algunos de los componentes de código abierto predeterminados incluidos en los clústeres de Google Dataproc, como Apache Hadoop y Apache Spark, proporcionan interfaces web. Estas interfaces se pueden usar para administrar y supervisar los recursos y las instalaciones del clúster, como el administrador de recursos YARN, el sistema de archivos distribuidos de Hadoop (HDFS), MapReduce y Spark. La puerta de enlace de componentes proporciona acceso seguro a los extremos web para los componentes predeterminados y opcionales de Dataproc.

Los clústeres creados con versiones de imagen de Dataproc compatibles pueden habilitar el acceso a las interfaces web de componentes sin depender de túneles SSH ni modificar reglas de firewall para permitir el tráfico entrante.

Consideraciones

  • Los usuarios que tienen el permiso de IAM dataproc.clusters.use pueden acceder a las interfaces web de los componentes. Consulta Funciones de Dataproc.
  • La puerta de enlace de componentes se puede usar para acceder a las API de REST, como Apache Hadoop YARN, Apache Livy y los servidores de historial.
  • Cuando la puerta de enlace de componentes está habilitada, Dataproc agrega los siguientes servicios al primer nodo principal del clúster:
  • La puerta de enlace de componentes no habilita el acceso directo a las interfaces node:port, sino que envía automáticamente por proxy un subconjunto específico de servicios. Si deseas acceder a los servicios en los nodos (node:port), usa un proxy SSH SOCKS.

Crea un clúster con la puerta de enlace de componentes

Console

Para habilitar la puerta de enlace de componentes desde la consola de Google Cloud, marca la casilla de verificación Component Gateway en la sección Componentes del panel Configurar clúster en la página Crear un clúster de Dataproc.

Comando de gcloud

Ejecuta el comando gcloud dataproc clusters create de gcloud CLI de forma local en una ventana de terminal o en Cloud Shell.

gcloud dataproc clusters create cluster-name \
    --enable-component-gateway \
    --region=region \
    other args ...

API de REST

Configura la propiedad EndpointConfig.enableHttpPortAccess como true como parte de una solicitud clusters.create.

Usa URLs de puerta de enlace de componentes para acceder a interfaces web

Cuando la puerta de enlace de componentes está habilitada en un clúster, puedes hacer clic en los vínculos proporcionados en la consola de Google Cloud para conectarte a las interfaces web de componentes que se ejecutan en el primer nodo principal del clúster. La puerta de enlace de componentes también establece endpointConfig.httpPorts con una asignación de nombres de puertos a URL. Como alternativa al uso de la consola, puedes usar la herramienta de línea de comandos de gcloud o la API de REST de Dataproc para ver esta información de asignación. Luego, copia y pega la URL en el navegador para conectarte a la IU del componente.

Console

Navega al formulario Clústeres de Dataproc en la consola de Google Cloud y, luego, selecciona tu clúster para abrir el formulario Detalles del clúster. Haz clic en la pestaña Web Interfaces (Interfaces web) para ver una lista de los vínculos de puerta de enlace de componentes a las interfaces web de los componentes predeterminados y opcionales instalados en el clúster. Haz clic en un vínculo para abrir la interfaz web que se ejecuta en el nodo principal del clúster en tu navegador local.

Comando de gcloud

Ejecuta el comando gcloud dataproc clusters describe de gcloud CLI de forma local en una ventana de la terminal o en Cloud Shell.

gcloud dataproc clusters describe cluster-name \
    --region=region

Resultado de muestra:

...
config:
  endpointConfig:
    enableHttpPortAccess: true
    httpPorts:
      HDFS NameNode:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/hdfs/ MapReduce Job History:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/jobhistory/ Spark HistoryServer:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/sparkhistory/ YARN ResourceManager:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/yarn/ YARN Application Timeline:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/apphistory/ ...

API de REST

Llama a clusters.get para obtener la asignación endpointConfig.httpPorts de nombres de puertos a URL.

Usa la puerta de enlace de componentes con VPC-SC

La puerta de enlace de componentes es compatible con los controles del servicio de VPC. Para la aplicación del perímetro de servicio, las solicitudes a las interfaces mediante la puerta de enlace de componentes se incluyen como parte de la superficie de la API de Dataproc y cualquier política de acceso que controle los permisos de dataproc.googleapis.com también controlará el acceso a las IU de puerta de enlace de componentes.

La puerta de enlace de componentes también admite configuraciones de VPC-SC que dependen de la conectividad privada de Google para clústeres de Dataproc sin direcciones IP externas. Sin embargo, debes configurar la red de forma manual para permitir el acceso de la VM principal de Dataproc a *.dataproc.cloud.google.com a través del rango restringido 199.36.153.4/30 de IP virtual de Google mediante los siguientes pasos:

  1. Sigue las instrucciones a fin de configurar la conectividad privada de Google para todas las API de Google.
  2. Configura DNS con Cloud DNS o de forma local en el nodo principal de Dataproc para permitir el acceso a *.dataproc.cloud.google.com.

Configura DNS con Cloud DNS

Crea una zona de Cloud DNS que asigne el tráfico destinado para *.dataproc.cloud.google.com al rango restringido de IP virtual de la API de Google.

  1. Crea una zona privada administrada para tu red de VPC.

    gcloud dns managed-zones create ZONE_NAME \
     --visibility=private \
     --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
     --description=DESCRIPTION \
     --dns-name=dataproc.cloud.google.com \
     --project=PROJECT_ID
    
    • ZONE_NAME es un nombre para la zona que estás creando. Por ejemplo, vpc. Este nombre de zona se usará en cada uno de los siguientes pasos.

    • PROJECT_ID es el ID del proyecto que aloja tu red de VPC.

    • NETWORK_NAME es el nombre de la red de VPC.

    • DESCRIPTION es una descripción opcional y legible de la zona administrada.

  2. Inicia una transacción.

    gcloud dns record-sets transaction start --zone=ZONE_NAME
    
    • ZONE_NAME es el nombre de la zona.
  3. Agrega registros DNS.

    gcloud dns record-sets transaction add --name=*.dataproc.cloud.google.com. \
        --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
        --zone=ZONE_NAME \
        --ttl=300
    
    • ZONE_NAME es el nombre de la zona.
    gcloud dns record-sets transaction add --name=dataproc.cloud.google.com. \
        --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
        --zone=ZONE_NAME \
        --ttl=300
    
    • ZONE_NAME es el nombre de la zona.
  4. Ejecuta la transacción.

    gcloud dns record-sets transaction execute --zone=ZONE_NAME --project=PROJECT_ID
    
    • ZONE_NAME es el nombre de la zona.

    • PROJECT_ID es el ID del proyecto que aloja tu red de VPC.

Configura DNS de forma local en el nodo principal de Dataproc mediante una acción de inicialización

Puedes configurar DNS de forma local en los nodos principales de Dataproc para permitir la conectividad privada a dataproc.cloud.google.com. Este procedimiento está diseñado para la realización de pruebas y desarrollo a corto plazo. No se recomienda su uso en cargas de trabajo de producción.

  1. Almacena la acción de inicialización en Cloud Storage en etapa intermedia.

    cat <<EOF >component-gateway-vpc-sc-dns-init-action.sh
    #!/bin/bash
    readonly ROLE="$(/usr/share/google/get_metadata_value attributes/dataproc-role)"
    
    if [[ "${ROLE}" == 'Master' ]]; then
      readonly PROXY_ENDPOINT=$(grep "^dataproc.proxy.agent.endpoint=" \
        "/etc/google-dataproc/dataproc.properties" | \
        tail -n 1 | cut -d '=' -f 2- | sed -r 's/\\([#!=:])/\1/g')
    
      readonly HOSTNAME=$(echo ${PROXY_ENDPOINT} | \
        sed -n -E 's;^https://([^/?#]*).*;\1;p')
    
      echo "199.36.153.4 ${HOSTNAME}  # Component Gateway VPC-SC" >> "/etc/hosts"
    fi
    EOF
    
    gsutil cp component-gateway-vpc-sc-dns-init-action.sh gs://BUCKET/
    
    • BUCKET es un bucket de Cloud Storage al que se puede acceder desde el clúster de Dataproc.
  2. Crea un clúster de Dataproc con la acción de inicialización almacenada en etapa intermedia y con la puerta de enlace de componentes habilitada.

    gcloud dataproc clusters create cluster-name \
        --region=region \
        --initialization-actions=gs://BUCKET/component-gateway-vpc-sc-dns-init-action.sh \
        --enable-component-gateway \
        other args ...
    
    • BUCKET es el depósito de Cloud Storage que se usó en el paso 1 anteriormente.

Usa las API de HTTP de manera programática a través de la puerta de enlace de componentes

La puerta de enlace de componentes es un proxy que incorpora Apache Knox. Los extremos que expone Apache Knox están disponibles a través de https://component-gateway-base-url/component-path.

Para autenticar de manera programática con la puerta de enlace de componentes, pasa el encabezado Proxy-Authorization con un token del portador de OAuth 2.0.

$ ACCESS_TOKEN="$(gcloud auth print-access-token)"
$ curl -H "Proxy-Authorization: Bearer ${ACCESS_TOKEN}" "https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/yarn/jmx"
{
  "beans" : [ {
    "name" : "Hadoop:service=ResourceManager,name=RpcActivityForPort8031",
    "modelerType" : "RpcActivityForPort8031",
    "tag.port" : "8031",
    "tag.Context" : "rpc",
    "tag.NumOpenConnectionsPerUser" : "{\"yarn\":2}",
    "tag.Hostname" : "demo-cluster-m",
    "ReceivedBytes" : 1928581096,
    "SentBytes" : 316939850,
    "RpcQueueTimeNumOps" : 7230574,
    "RpcQueueTimeAvgTime" : 0.09090909090909091,
    "RpcProcessingTimeNumOps" : 7230574,
    "RpcProcessingTimeAvgTime" : 0.045454545454545456,
...

La puerta de enlace de componentes quita el encabezado Proxy-Authorization antes de reenviar las solicitudes a Apache Knox.

Para encontrar la URL base de la puerta de enlace de componentes, ejecuta gcloud dataproc clusters describe:

$ gcloud dataproc clusters describe <var>cluster-name</var> &#92;
    &nbsp;&nbsp;&nbsp;&nbsp;--region=<var>region</var>
...
  endpointConfig:
    enableHttpPortAccess: true
    httpPorts:
      HDFS NameNode: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/hdfs/dfshealth.html
      MapReduce Job History: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/jobhistory/
      Spark History Server: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/sparkhistory/
      Tez: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/apphistory/tez-ui/
      YARN Application Timeline: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/apphistory/
      YARN ResourceManager: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/yarn/

...

La URL base son las partes del esquema y de la autoridad de las URL en httpPorts. En este ejemplo, es https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/.

Cómo volver a generar el certificado SSL de la puerta de enlace de componentes

El certificado SSL predeterminado de la puerta de enlace de Knox para la puerta de enlace de componentes es válido para lo siguiente:

  • 5 años desde la fecha de creación de los clústeres de Dataproc en clústeres creados con las versiones de imágenes 2.0.93, 2.1.41, 2.2.7 y posteriores.

  • 13 meses a partir de la fecha de creación del clúster de Dataproc en clústeres creados con versiones de imágenes anteriores.

Si el certificado vence, todas las instancias de interfaz web de puerta de enlace de componentes se vuelven inactivas.

Si tu organización proporcionó el certificado SSL, obtén uno nuevo de la organización y, luego, reemplaza el certificado anterior por el nuevo.

Si usas el certificado SSL autofirmado predeterminado, renuévalo de la siguiente manera:

  1. Usa SSH para conectarte al nodo instancia principal del clúster de Dataproc con el sufijo de nombre m-0.

  2. Ubica gateway.jks en la ruta de acceso /var/lib/knox/security/keystores/gateway.jks.

    keytool -list -v -keystore /var/lib/knox/security/keystores/gateway.jks
    
  3. Mueve el archivo gateway.jks a un directorio de copia de seguridad.

    mv /var/lib/knox/security/keystores/gateway.jks /tmp/backup/gateway.jks
    
  4. Crea un nuevo certificado autofirmado cuando reinicias el servicio de Knox.

    systemctl restart knox
    
  5. Verifica el estado de Knox y la puerta de enlace de componentes.

    systemctl status google-dataproc-component-gateway
    systemctl status knox
    

Pasos siguientes