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 versões de imagem do Dataproc compatíveis podem permitir o acesso a interfaces da Web de componentes sem depender de túneis SSH ou modificar 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 Dataproc adiciona os seguintes serviços ao primeiro nó mestre do cluster:
- Apache Knox (em inglês). O certificado SSL do Knox Gateway padrão é válido por 13 meses a partir da data de criação do cluster. Se ele expirar, todos os URLs da interface da Web do Gateway de componentes ficarão inativos. Para conseguir um novo, consulte Como gerar novamente o certificado SSL do Gateway de Componentes.
- Inverting Proxy (em inglês)
- 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 Google 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 do 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.
Usar URLs do Gateway de componentes para acessar interfaces da Web
Quando o Gateway de componentes está ativado em um cluster, é possível se conectar a interfaces da Web de componentes em execução no primeiro nó mestre do cluster clicando nos links fornecidos no console do Google 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
Acesse o formulário Clusters do Dataproc no console do Google Cloud e selecione seu 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 do 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:
- Siga as instruções para configurar a conectividade privada do Google para todas as APIs do Google.
- 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.
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.
Inicie uma transação.
gcloud dns record-sets transaction start --zone=ZONE_NAME
- ZONE_NAME é o nome da zona.
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.
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.
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.
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 <var>cluster-name</var> \
--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/
...
O URL base é as partes do esquema e da autoridade dos URLs em httpPorts
. Neste exemplo, é https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/
.
Como gerar novamente o certificado SSL do Gateway de Componentes
O certificado SSL do Knox Gateway padrão do Component Gateway é válido para:
Cinco anos a partir da data de criação do cluster do Dataproc em clusters criados com as versões de imagens 2.0.93, 2.1.41, 2.2.7 e posteriores.
13 meses a partir da data de criação do cluster do Dataproc, em clusters criados com versões de imagem anteriores.
Se o certificado expirar, todos os URLs da interface da Web do Gateway de componentes ficarão inativos.
Se a organização forneceu o certificado SSL, consiga um novo certificado dela e substitua o certificado antigo pelo novo.
Se você estiver usando o certificado SSL autoassinado padrão, renove-o da seguinte forma:
Use SSH para se conectar ao nó mestre do cluster do Dataproc com o sufixo de nome
m-0
.Localize
gateway.jks
no caminho/var/lib/knox/security/keystores/gateway.jks
.keytool -list -v -keystore /var/lib/knox/security/keystores/gateway.jks
Mova o arquivo
gateway.jks
para um diretório de backup.mv /var/lib/knox/security/keystores/gateway.jks /tmp/backup/gateway.jks
Crie um novo certificado autoassinado reiniciando o serviço Knox.
systemctl restart knox
Verifique o Gateway de componentes e o status do Knox.
systemctl status google-dataproc-component-gateway systemctl status knox
A seguir
- Crie um cluster com componentes Dataproc.