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.

Clústeres creados con versiones de imagen de Dataproc compatibles puede habilitar el acceso a las interfaces web de componentes sin depender de Túneles SSH o 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 APIs de REST, como las siguientes: Apache Hadoop YARN y Apache Livy, y servidores de historial.
  • Cuando la puerta de enlace de componentes está habilitada, Dataproc agrega lo siguiente: 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

La puerta de enlace de componentes de Dataproc se activa de forma predeterminada cuando se crea un clúster con la consola de Google Cloud. Para inhabilitar este parámetro de configuración, borra la Habilitar puerta de enlace de componentes sección Componentes de el panel Configurar clúster en Dataproc Crea un clúster de Dataproc en Compute Engine .

Comando de gcloud

Ejecuta gcloud CLI gcloud dataproc clusters create 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 conectarte interfaces web que se ejecutan en el primer nodo principal del clúster haciendo clic en los vínculos disponibles en la consola de Google Cloud. 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 a Dataproc Clústeres en la consola de Google Cloud y, luego, selecciona tu clúster para abrir Formulario de 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 gcloud CLI gcloud dataproc clusters describe de forma local en una ventana de 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 parámetros de configuración de VPC-SC que dependen conectividad privada de Google para clústeres de Dataproc sin direcciones IP externas, pero debes configurar tu red para permitir el acceso desde la VM principal de Dataproc a *.dataproc.cloud.google.com a través del rango de IP virtual restringido de Google 199.36.153.4/30 haciendo lo siguiente:

  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 y el 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
    
    gcloud storage 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 de Knox Gateway predeterminado de la puerta de enlace de componentes es válido para:

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

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

Si el certificado vence, todas las URls de la interfaz web de la puerta de enlace de componentes se convierten inactivo.

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

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

  1. Usa SSH para conectarte a la Nodo instancia principal del clúster de Dataproc con el nombre m-0 .

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

    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. Reinicia el servicio de Knox para crear un nuevo certificado autofirmado.

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

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

Qué sigue