Gateway de componentes do Dataproc

Alguns dos componentes de código aberto padrão incluídos nos clusters do Google Dataproc, como Apache Hadoop e Apache Spark, fornecem interfaces da Web. Elas podem ser usadas para gerenciar e monitorar diferentes recursos e instalações do cluster, como o gerenciador de recursos YARN, o Sistema de arquivos distribuídos Hadoop (HDFS, na sigla em inglês), o MapReduce e o Spark. O Gateway de componentes fornece acesso seguro a endpoints da Web para componentes padrão e opcionais do Dataproc.

Os clusters criados com a versão de imagem 1.3.29 e posteriores do Dataproc podem ativar o acesso a interfaces de componentes na Web sem depender do uso de túneis SSHou de modificação de regras de firewall para permitir o tráfego de entrada.

Considerações

  • As interfaces de componentes na Web podem ser acessadas por usuários com permissão do IAM dataproc.clusters.use. Consulte Papéis do Dataproc.
  • O Gateway de componentes pode ser usado para acessar APIs REST, como o Apache Hadoop YARN, o Apache Livy (ambos em inglês) e servidores de histórico.
  • Quando o Gateway de componentes está ativado, o primeiro nó mestre do cluster terá os seguintes serviços adicionais:
  • O Gateway de componentes não permite acesso direto a interfaces node:port, mas faz proxy de um subconjunto específico de serviços automaticamente. Se você quer acessar serviços em nós (node:port), use um proxy SSH SOCKS.

Criar um cluster com o Gateway de componentes

Console

Para ativar o Gateway de componentes no Console do Cloud, marque a caixa de seleção "Gateway de componentes" na seção "Componentes" do painel "Configurar cluster" na página Criar um cluster do Dataproc.

Comando gcloud

Execute o comando gcloud dataproc clusters create da CLI gcloud localmente em uma janela de terminal ou no Cloud Shell.

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

API REST

Defina a propriedade EndpointConfig.enableHttpPortAccess como true como parte de uma solicitação clusters.create.

Visualizar e acessar URLs do Gateway de componentes

Quando o Component Gateway está ativado em um cluster, você pode se conectar a interfaces de componentes na Web em execução no primeiro nó mestre do cluster clicando em links fornecidos no Console do Cloud. O Gateway de componentes também define endpointConfig.httpPorts com um mapa de nomes de portas para URLs. Como alternativa ao uso do console, você pode usar a ferramenta de linha de comando gcloud ou a API REST do Dataproc para visualizar essas informações de mapeamento e copiar e colar o URL no navegador para se conectar à IU do componente.

Console

Navegue até o formulário Clusters do Dataproc no Google Cloud Console e selecione o cluster para abrir o formulário Detalhes do cluster. Clique na guia Interfaces da Web para exibir uma lista de links do Gateway de componentes para as interfaces da Web dos componentes padrão e opcionais instalados no cluster. Clique em um link para abrir a interface da Web em execução no nó principal do cluster em seu navegador local.

Comando gcloud

Execute o comando gcloud dataproc clusters describe da CLI gcloud localmente em uma janela de terminal ou no Cloud Shell.

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

Exemplo de saída

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

Chame clusters.get para receber o mapa endpointConfig.httpPorts de nomes de portas para URLs.

Como usar o Gateway de componentes com o VPC-SC

O Gateway de componentes é compatível com o VPC Service Controls. Para a aplicação do perímetro de serviço, as solicitações a interfaces por meio do Gateway de componentes são tratadas como parte da superfície de API do Dataproc, e qualquer política de acesso que controle permissões para dataproc.googleapis.com também controlará o acesso às interfaces de usuário do Gateway de componentes.

O Gateway de componentes também é compatível com configurações do VPC-SC que dependem de conectividade particular do Google para clusters do Dataproc sem endereços IP externos, mas você deve configurar manualmente sua rede para permitir o acesso da VM mestre do Dataproc a *.dataproc.cloud.google.com por meio do intervalo de IP virtual restrito do Google 199.36.153.4/30 fazendo o seguinte:

  1. Siga as instruções para configurar a conectividade privada do Google para todas as APIs do Google.
  2. Configure o DNS com o Cloud DNS ou configure o DNS localmente no nó mestre do Dataproc para permitir o acesso a *.dataproc.cloud.google.com.

Configurar DNS com o Cloud DNS

Crie uma zona do Cloud DNS que mapeie o tráfego destinado a *.dataproc.cloud.google.com ao intervalo de IP virtual restrito de API do Google.

  1. Crie uma zona privada gerenciada para sua rede 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 é um nome para a zona que você está criando. Por exemplo, vpc. Esse nome será utilizado em todas as etapas a seguir.

    • PROJECT_ID é o código do projeto que hospeda sua rede VPC.

    • NETWORK_NAME é o nome da sua rede VPC.

    • DESCRIPTION é uma descrição opcional, legível por humanos, da zona gerenciada.

  2. Inicie uma transação.

    gcloud dns record-sets transaction start --zone=ZONE_NAME
    
    • ZONE_NAME é o nome da zona.
  3. Adicione registros de 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 é o nome da 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 é o nome da zona.
  4. Execute a transação.

    gcloud dns record-sets transaction execute --zone=ZONE_NAME --project=PROJECT_ID
    
    • ZONE_NAME é o nome da zona.

    • PROJECT_ID é o código do projeto que hospeda sua rede VPC.

Configurar o DNS localmente no nó mestre do Dataproc com uma ação de inicialização

Você pode configurar o DNS localmente nos nós mestres do Dataproc para permitir conectividade privada a dataproc.cloud.google.com. Esse procedimento destina-se a testes e desenvolvimento de curto prazo. Ele não é recomendado para uso em cargas de trabalho de produção.

  1. Estabeleça a ação de inicialização no 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
    
    gsutil cp component-gateway-vpc-sc-dns-init-action.sh gs://BUCKET/
    
    • BUCKET é um bucket do Cloud Storage acessível a partir do cluster do Dataproc.
  2. Crie um cluster do Dataproc com a ação de inicialização estabelecida e o Gateway de componentes ativado.

    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 é o bucket do Cloud Storage usado na etapa 1 acima.

Programaticamente, usando APIs HTTP por meio do Gateway de componentes

O Gateway de componentes é um proxy que incorpora o Apache Knox. Os endpoints expostos pelo Apache Knox estão disponíveis por meio do https://component-gateway-base-url/component-path.

Para autenticar de maneira programática com o Gateway de componentes, passe o cabeçalho Proxy-Authorization com um token do portador 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,
...

O Gateway de componentes remove o cabeçalho Proxy-Authorization antes de encaminhar solicitações para o Apache Knox.

Para encontrar o URL base do Gateway de componentes, execute: gcloud dataproc clusters describe:

$ gcloud dataproc clusters describe
...
  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/

...

O URL base é as partes do esquema e da autoridade dos URLs em httpPorts. Neste exemplo, é https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/.

A seguir