Gateway dei componenti di Managed Service per Apache Spark

Il gateway dei componenti ti consente di accedere in modo sicuro agli endpoint web per i componenti predefiniti e facoltativi sui cluster Google Managed Service for Apache Spark. Puoi utilizzare queste interfacce web per gestire e monitorare le risorse e le strutture del cluster, come il gestore di risorse YARN, Hadoop Distributed File System (HDFS), MapReduce, Apache Hadoop e Apache Spark.

Sui cluster creati con versioni immagine di Managed Service for Apache Spark supportate, il gateway dei componenti fornisce l'accesso alle interfacce web dei componenti senza richiedere tunnel SSH o la modifica delle regole firewall per consentire il traffico in entrata.

Considerazioni

  • Gli utenti devono disporre dell'autorizzazione Identity and Access Management dataproc.clusters.use per accedere alle interfacce web dei componenti abilitati. Consulta Ruoli di Managed Service for Apache Spark.
  • Il gateway dei componenti può essere utilizzato per accedere alle API REST, come Apache Hadoop YARN e Apache Livy, e ai server di cronologia.
  • Quando il gateway dei componenti è abilitato, Managed Service for Apache Spark 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 Component Gateway

ConsoleGoogle Cloud

Le UI dei componenti di Managed Service for Apache Spark (tramite il gateway dei componenti) sono abilitate per impostazione predefinita quando crei un cluster utilizzando la console Google Cloud . Puoi disattivare questa impostazione deselezionando la casella di controllo Abilita i componenti nell'UI:

  1. Apri la pagina Crea cluster.
  2. Fai clic su Configurazione aggiuntiva per espandere la sezione.
  3. Modifica i componenti facoltativi.
  4. Nel riquadro che si apre, seleziona o deseleziona la casella di controllo Abilita i componenti nell'UI.
  5. Fai clic su Salva.

Comando gcloud CLI

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.

Utilizza 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 sugli URL. In alternativa all'utilizzo della console, puoi utilizzare lo strumento a riga di comando gcloud o l'API REST Dataproc per visualizzare queste informazioni di mappatura, quindi copiare e incollare l'URL nel browser per connetterti alla UI del componente.

Console

Vai al modulo Cluster di Managed Service for Apache Spark nella console Google Cloud , quindi seleziona il tuo cluster per aprire il 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 per aprire l'interfaccia web in esecuzione sul nodo master del cluster nel tuo browser locale.

Comando gcloud CLI

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

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

Esempio di output

...
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 la mappa endpointConfig.httpPorts dei nomi delle porte agli URL.

Utilizza il gateway dei componenti con i Controlli di servizio VPC

Component Gateway supporta i Controlli di servizio VPC. Per l'applicazione del perimetro di servizio, le richieste alle interfacce tramite il gateway dei componenti vengono trattate come parte della superficie dell'API Dataproc e tutte le policy 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 sulla connettività privata di Google per i cluster Managed Service for Apache Spark senza indirizzi IP esterni, ma devi configurare manualmente la rete per consentire l'accesso dalla VM master di Managed Service for Apache Spark a *.dataproc.cloud.google.com tramite l'intervallo di IP virtuali Google limitato 199.36.153.4/30 procedendo nel seguente modo:

  1. Segui le istruzioni per configurare la connettività privata di Google per tutte le API di Google.
  2. Configura il DNS con Cloud DNS o configura il DNS localmente sul nodo master di Managed Service for Apache Spark per consentire l'accesso a *.dataproc.cloud.google.com.

Configura il DNS con Cloud DNS

Crea una zona Cloud DNS che mappa il traffico destinato a *.dataproc.cloud.google.com all'intervallo di IP virtuali delle API di Google con limitazioni.

  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 di zona verrà utilizzato in ognuno dei passaggi che seguono.

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

    • NETWORK_NAME è il nome della tua rete VPC.

    • DESCRIPTION è una descrizione facoltativa e leggibile della zona gestita.

  2. Avvia una transazione.

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

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

Configura il DNS localmente sul nodo master di Managed Service for Apache Spark con un'azione di inizializzazione

Puoi configurare localmente il DNS sui nodi master di Managed Service for Apache Spark per consentire la connettività privata a dataproc.cloud.google.com. Questa procedura è destinata ai test e allo sviluppo a breve termine. Non è consigliato per l'utilizzo nei workload di produzione.

  1. Esegui lo stage dell'azione di inizializzazione su 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-managed-spark/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 Managed Service for Apache Spark.
  2. Crea un cluster Managed Service for Apache Spark con l'azione di inizializzazione temporanea e il 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.

Utilizza le API HTTP in modo programmatico tramite Component Gateway

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

Per eseguire l'autenticazione in modo programmatico con Component Gateway, passa l'intestazione Proxy-Authorization con un token di connessione 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 è costituito dalle parti di schema e autorità degli URL in httpPorts. In questo esempio, è https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/.

Rigenera il certificato SSL del gateway dei componenti

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

  • 5 anni dalla data di creazione del cluster Managed Service for Apache Spark sui cluster creati con le versioni immagine 2.0.93, 2.1.41, 2.2.7 e successive.

  • 13 mesi dalla data di creazione del cluster Managed Service for Apache Spark 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, richiedine uno nuovo e sostituisci quello precedente.

Se utilizzi il certificato SSL autofirmato predefinito, rinnovalo nel seguente modo:

  1. Utilizza SSH per connetterti al nodo master del cluster Managed Service for Apache Spark con il suffisso del nome m-0.

  2. Individua gateway.jks nel percorso /var/lib/knox/security/keystores/gateway.jks.

    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