Dataproc Component Gateway

Alcuni dei componenti open source predefiniti inclusi nei cluster Google Dataproc, come Apache Hadoop e Apache Spark, forniscono interfacce web. Queste interfacce possono essere utilizzate per gestire e monitorare le risorse e le strutture del cluster, come il gestore delle risorse YARN, HDFS (Hadoop Distributed File System), MapReduce e Spark. Gateway dei componenti fornisce un accesso sicuro agli endpoint web per Dataproc componenti facoltativi.

I cluster creati con le versioni delle immagini Dataproc supportate possono consentire l'accesso alle interfacce web dei componenti senza fare affidamento su tunnel SSH o sulla modifica delle regole del firewall per consentire il traffico in entrata.

Considerazioni

  • Le interfacce web dei componenti sono accessibili agli utenti che hanno dataproc.clusters.use Autorizzazione IAM. Consulta Ruoli Dataproc.
  • Component Gateway può essere utilizzato per accedere alle API REST, come Apache Hadoop YARN e Apache Livy, nonché ai server di cronologia.
  • Quando il gateway dei componenti è abilitato, Dataproc aggiunge i seguenti servizi al primo nodo master del cluster:
  • Il gateway dei componenti non consente l'accesso diretto alle interfacce node:port. ma esegue automaticamente il proxy di un sottoinsieme specifico di servizi. Se vuoi accedere ai servizi sui nodi (node:port), utilizza un proxy SOCKS SSH.

Crea un cluster con il gateway dei componenti

Console

Il gateway dei componenti Dataproc viene attivato per impostazione predefinita quando crei un cluster utilizzando la console Google Cloud. Puoi disattivare questa impostazione deselezionando la casella di controllo Attiva gateway dei componenti nella sezione Componenti del riquadro Configura cluster nella pagina Dataproc Crea un cluster Dataproc su Compute Engine.

Comando g-cloud

Esegui il comando gcloud CLI gcloud dataproc clusters create in locale in una finestra del terminale o in Cloud Shell.

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

API REST

Imposta la proprietà EndpointConfig.enableHttpPortAccess su true nell'ambito di una richiesta clusters.create.

Utilizzare gli URL del gateway dei componenti per accedere alle interfacce web

Quando il gateway dei componenti è abilitato su un cluster, puoi connetterti alle interfacce web dei componenti in esecuzione sul primo nodo master del cluster facendo clic sui link forniti nella console Google Cloud. Il gateway dei componenti imposta anche endpointConfig.httpPorts con una mappa dei nomi delle porte agli URL. In alternativa all'uso della console, puoi usare la riga di comando gcloud o l'API REST Dataproc per visualizzare le informazioni di mappatura, quindi copia e incolla l'URL nel browser per connetterti all'interfaccia utente del componente.

Console

Accedi a Dataproc Cluster sulla console Google Cloud, poi seleziona il cluster per aprire Modulo Dettagli cluster. Fai clic sulla scheda Interfacce web per visualizzare un elenco di link del gateway dei componenti alle interfacce web dei componenti predefiniti e facoltativi installati sul cluster. Fai clic su un link a apri l'interfaccia web in esecuzione sul nodo master del cluster nel browser locale.

Comando g-cloud

Esegui gcloud CLI gcloud dataproc clusters describe localmente in una finestra del terminale o Cloud Shell.

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

Output di esempio

...
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 REST

Chiama clusters.get per ottenere Mappa endpointConfig.httpPorts dei nomi delle porte per gli URL.

Utilizzo di Component Gateway con VPC-SC

Il gateway dei componenti supporta Controlli di servizio VPC. Per l'applicazione del perimetro del servizio, le richieste alle interfacce tramite il gateway dei componenti vengono trattate come parte dell'interfaccia API Dataproc e tutti i criteri di accesso che controllano le autorizzazioni per dataproc.googleapis.com controlleranno anche l'accesso alle UI del gateway dei componenti.

Il gateway dei componenti supporta anche le configurazioni VPC-SC che si basano su connettività Google privata per i cluster Dataproc senza indirizzi IP esterni, ma devi manualmente configurare la rete per consentire l'accesso dalla VM master Dataproc a *.dataproc.cloud.google.com tramite l'intervallo IP virtuale di Google limitato 199.36.153.4/30 nel seguente modo:

  1. Segui le istruzioni per configurare la connettività privata di Google per tutte le API di Google.
  2. Configura DNS con Cloud DNS oppure configurare il DNS in locale sul nodo master di Dataproc per consentire l'accesso a *.dataproc.cloud.google.com.

Configurare il DNS con Cloud DNS

Crea una zona Cloud DNS che mappa il traffico destinato a *.dataproc.cloud.google.com all'intervallo IP virtuale limitato dell'API di Google.

  1. Crea una zona privata gestita per la tua rete 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 è un nome per la zona che stai creando. Ad esempio, vpc. Questo nome verrà utilizzato in ciascuno dei passaggi successivi.

    • PROJECT_ID è l'ID del progetto che ospita il tuo rete VPC.

    • NETWORK_NAME è il nome della tua rete VPC.

    • DESCRIPTION è una descrizione facoltativa leggibile del nella zona gestita.

  2. Avvia una transazione.

    gcloud dns record-sets transaction start --zone=ZONE_NAME
    
    • ZONE_NAME è il nome della zona.
  3. Aggiungi i record 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 è il nome della tua 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 è il nome della zona.
  4. Esegui la transazione.

    gcloud dns record-sets transaction execute --zone=ZONE_NAME --project=PROJECT_ID
    
    • ZONE_NAME è il nome della tua zona.

    • PROJECT_ID è l'ID del progetto che ospita la rete VPC.

Configura il DNS in locale sul nodo master Dataproc con un'azione di inizializzazione

Puoi configurare localmente i nodi master DNS di Dataproc per consentire l'accesso connettività a dataproc.cloud.google.com. Questa procedura è destinata test e sviluppo a breve termine. Opzione sconsigliata per l'utilizzo nei carichi di lavoro di produzione.

  1. Esegui la gestione delle fasi dell'azione di inizializzazione in Cloud Storage.

    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 è un bucket Cloud Storage accessibile dal cluster Dataproc.
  2. Creare un cluster Dataproc con l'azione di inizializzazione graduale e Gateway dei componenti abilitato.

    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 è il bucket Cloud Storage utilizzato nel passaggio 1 precedente.

Utilizzo programmatico delle API HTTP tramite il gateway dei componenti

Il gateway dei componenti è un proxy che incorpora Apache Knox. Endpoint esposti da Apache Knox sono disponibili tramite https://component-gateway-base-url/component-path.

Per autenticarti in modo programmatico con Component Gateway, passa l'intestazione Proxy-Authorization con un token di accesso 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,
...

Component Gateway rimuove l'intestazione Proxy-Authorization prima di inoltrare le richieste ad Apache Knox.

Per trovare l'URL di base del gateway dei componenti, esegui: 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/

...

L'URL di base è lo schema e le parti dell'autorità degli URL in httpPorts. In questo esempio, è https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/.

Come rigenerare il certificato SSL di Component Gateway

Il certificato SSL predefinito del gateway dei componenti Knox Gateway è valido per:

  • 5 anni dalla data di creazione del cluster Dataproc sui cluster creati con immagini versioni 2.0.93, 2.1.41, 2.2.7 e successive.

  • 13 mesi dalla data di creazione del cluster Dataproc sui cluster creati utilizzando versioni immagine precedenti.

Se il certificato scade, tutti gli URL dell'interfaccia web di Component Gateway diventano inattivi.

Se il certificato SSL è stato fornito dalla tua organizzazione, ottieni un nuovo certificato dall'organizzazione e sostituisci il vecchio certificato con quello nuovo.

Se utilizzi il certificato SSL autofirmato predefinito, rinnovalo come segue:

  1. Utilizza SSH per connetterti al Nodo master del cluster Dataproc con nome m-0 suffisso.

  2. Individua gateway.jks in /var/lib/knox/security/keystores/gateway.jks del tuo percorso di apprendimento.

    keytool -list -v -keystore /var/lib/knox/security/keystores/gateway.jks
    
  3. Sposta il file gateway.jks in una directory di backup.

    mv /var/lib/knox/security/keystores/gateway.jks /tmp/backup/gateway.jks
    
  4. Crea un nuovo certificato autofirmato riavviando il servizio Knox.

    systemctl restart knox
    
  5. Verifica lo stato di Component Gateway e Knox.

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

Passaggi successivi