O gateway de componentes permite acessar com segurança endpoints da Web para componentes padrão e opcionais em clusters do Serviço Gerenciado para Apache Spark do Google. Use essas interfaces da Web para gerenciar e monitorar recursos e instalações do cluster, como o gerenciador de recursos do YARN, o sistema de arquivos distribuídos do Hadoop (HDFS), o MapReduce, o Apache Hadoop e o Apache Spark.
Em clusters criados com versões de imagem compatíveis do Serviço Gerenciado para Apache Spark, o gateway de componentes fornece acesso às interfaces da Web de componentes sem exigir túneis SSH ou modificar regras de firewall para permitir o tráfego de entrada.
Considerações
- Os usuários precisam ter a permissão dataproc.clusters.use do Identity and Access Management para acessar as interfaces da Web de componentes ativados. Consulte Papéis do Serviço Gerenciado para Apache Spark.
- O gateway de componentes pode ser usado para acessar APIs REST, como Apache Hadoop YARN e Apache Livy, e servidores de histórico.
- Quando o gateway de componentes está ativado, o Serviço Gerenciado para Apache Spark adiciona os seguintes
serviços ao primeiro nó mestre do cluster:
- Apache Knox. O certificado SSL padrão do gateway do Knox é 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 vão ficar inativos. Para receber um novo certificado, consulte 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 doGoogle Cloud
As interfaces de componente do Serviço Gerenciado para Apache Spark (pelo gateway de componente) são ativadas por padrão quando você cria um cluster usando o console do Google Cloud . Para desativar essa configuração, desmarque a caixa de seleção Ativar componentes na interface:
- Abra a página Criar cluster.
- Clique em Configuração adicional para abrir a seção.
- Edite os Componentes opcionais.
- No painel que aparece, marque ou desmarque a caixa de seleção Ativar componentes na interface.
- Clique em Salvar.
Comando da CLI 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.
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 às 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,
é possível usar a ferramenta de linha de comando gcloud
ou a API REST do Dataproc para visualizar essas informações de mapeamento.
Em seguida, copie e cole o URL no navegador para se conectar à UI do componente.
Console
Acesse o formulário Clusters do Serviço Gerenciado para Apache Spark no console do Google Cloud 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 de 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 da CLI 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.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 para interfaces por meio do gateway de componentes são
tratadas como parte da superfície da API Dataproc, e todas as políticas de acesso que
controlam as permissões para dataproc.googleapis.com também controlam o acesso às
IUs do gateway de componentes.
O gateway de componentes também é compatível com configurações de VPC-SC que dependem da
conectividade privada do Google
para clusters do Serviço Gerenciado para Apache Spark sem endereços IP externo, mas é necessário configurar manualmente
sua rede para permitir o acesso da VM mestre do Serviço Gerenciado para Apache Spark
a *.dataproc.cloud.google.com pelo 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 Serviço Gerenciado para Apache Spark
para permitir o acesso a
*.dataproc.cloud.google.com.
Configurar o 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 Serviço Gerenciado para Apache Spark com uma ação de inicialização
É possível configurar o DNS localmente nos nós mestre do Serviço Gerenciado para Apache Spark para permitir a conectividade privada com o 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-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 é um bucket do Cloud Storage acessível pelo cluster do Serviço Gerenciado para Apache Spark.
Crie um cluster do Serviço Gerenciado para Apache Spark com a ação de inicialização em etapas 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.
Usar APIs HTTP de maneira programática pelo 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 de 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 de base é o esquema e as partes de autoridade dos URLs em
httpPorts. Neste exemplo, é https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com/.
Gerar novamente o certificado SSL do gateway de componentes
O certificado SSL padrão do gateway do Knox do gateway de componentes é válido para:
Cinco anos a partir da data de criação do cluster do Serviço Gerenciado para Apache Spark em clusters criados com as versões de imagem 2.0.93, 2.1.41, 2.2.7 e posteriores.
13 meses a partir da data de criação do cluster do Serviço Gerenciado para Apache Spark em clusters criados usando versões de imagem anteriores.
Se o certificado expirar, todos os URLs da interface da Web do gateway de componentes vão ficar inativos.
Se a organização tiver fornecido o certificado SSL, peça um novo certificado a ela e substitua o antigo pelo novo.
Se você estiver usando o certificado SSL autoassinado padrão, renove-o da seguinte maneira:
Use o SSH para se conectar ao nó mestre do cluster do Serviço Gerenciado para Apache Spark com o sufixo de nome
m-0.Localize
gateway.jksno caminho/var/lib/knox/security/keystores/gateway.jks.keytool -list -v -keystore /var/lib/knox/security/keystores/gateway.jks
Mova o arquivo
gateway.jkspara 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 status do gateway de componentes e do Knox.
systemctl status google-dataproc-component-gateway systemctl status knox
A seguir
- Crie um cluster com componentes do Serviço Gerenciado para Apache Spark.