Configuração de rede de cluster do Dataproc

Visão geral

As instâncias de máquina virtual do Compute Engine em um cluster do Dataproc que consistem em VMs mestras e workers precisam ser capazes de se comunicar usando ICMP, TCP (todas as portas) e UDP (todas as portas).

Requisito para regras de firewall

O Dataproc exige que você crie uma regra de permissão de entrada de firewall com as seguintes características:

  • O parâmetro origems especifica intervalos de endereços IP como origens de pacotes. No Dataproc, todas as VMs no cluster precisam se comunicar uns com os outros. É possível identificar as VMs no cluster pela rede VPC, tags de origem ou contas de serviço anexadas às VMs. Se você omitir uma especificação de intervalo de IP de origem, a regra de firewall usará o intervalo 0.0.0.0/0 (qualquer endereço IP) como a origem. Se as VMs do Dataproc tiverem endereços IP externos, isso significa que elas podem aceitar tráfego de qualquer lugar na Internet. Portanto, defina a origem como o mais restrita possível para atender às suas necessidades e proteger o cluster.

  • O destino da regra precisa identificar as VMs do cluster. O destino pode ser todas as VMs na rede VPC ou você pode identificar VMs de destino específicas usando tags de destino ou contas de serviço de destino.

  • A regra precisa incluir os seguintes protocolos e portas: TCP (todas as portas, 0 a 65535), UDP (todas as portas, 0 a 65535) e ICMP. O Dataproc usa serviços executados em várias portas e a especificação de todas elas ajuda a executar os serviços com êxito.

Visão geral das regras de firewall padrão do Dataproc

O Dataproc usa a rede VPC padrão. Se uma rede VPC padrão não for especificada, você precisará criar uma personalizada. Para criar uma rede VPC personalizada, é possível criar uma rede VPC no modo automático ou personalizado.

Se você usar a rede padrão, ela incluirá uma regra de firewall default-allow-internal pré-preenchida que permite a entrada do 10.128.0.0/9 intervalo de origem de todas as VMs da rede VPC. Consulte Requisito de regra de firewall para informações sobre como criar uma regra de firewall mais restritiva. Se você excluir essa regra de firewall pré-preenchida ou usar uma rede VPC diferente da rede padrão, o tráfego de entrada será bloqueado pela regra de negação de entrada implícita. Nessas situações, crie uma regra de firewall de permissão de entrada que permita o tráfego para todas as portas TCP e UDP de instâncias no cluster. Seu administrador de rede ou de segurança pode consultar a visão geral das regras de firewall para mais informações.

Como diagnosticar regras de firewall do Dataproc

Para auditar pacotes não processados por regras de firewall de prioridade mais alta, é possível criar duas regras de firewall de negação de baixa prioridade (65534). Ao contrário das regras de firewall implícitas, é possível ativar a geração de registros das regras de firewall em cada uma destas regras de baixa prioridade:

  1. Uma regra de negação de entrada (fonte 0.0.0.0/0, todos os protocolos, todos os destinos na rede VPC)

  2. Uma regra de negação de saída (destinos 0.0.0.0/0, todos os protocolos, todos os destinos na rede VPC)

Com essas regras de baixa prioridade e a geração de registros de regras de firewall, é possível registrar pacotes não processados por regras de firewall de prioridade mais alta (e possivelmente mais específicas). Essas duas regras de baixa prioridade também se alinham às práticas recomendadas de segurança ao implementar uma estratégia de "pacotes finais eliminados".

É possível examinar os registros de regras de firewall para essas regras a fim de determinar se você precisa criar ou alterar regras de prioridade mais alta para permitir pacotes. Por exemplo, se os pacotes enviados entre instâncias de cluster do Dataproc forem descartados, isso pode ser um sinal de que suas regras de firewall do Dataproc precisam ser configuradas.

Criar uma rede VPC personalizada

Você pode especificar sua própria rede Virtual Private Cloud (VPC) ao criar um cluster do Dataproc. Para isso, você precisa criar uma rede VPC com regras de firewall. Em seguida, quando o cluster for criado, associe a rede ao cluster.

Como criar uma rede VPC

Você pode criar uma rede VPC no Console do Cloud ou usando a ferramenta de linha de comando gcloud compute networks create. Crie uma rede VPC em modo automático ou uma em modo personalizado (redes chamadas "auto" e "custom", respectivamente, abaixo). Uma rede automática é configurada automaticamente com sub-redes em cada região do Compute Engine. As redes personalizadas não são configuradas automaticamente com sub-redes. É preciso criar uma ou mais sub-redes em uma ou mais regiões do Compute Engine ao criar a rede personalizada. Para mais informações, consulte Tipos de redes VPC.

Veja as opções disponíveis quando você cria uma rede automática e personalizada no Console do Cloud.

Automático

A captura de tela do Console do Cloud, abaixo, mostra os campos do Console do Cloud preenchidos para a criação automática de sub-redes (uma rede VPC de modo automático). É preciso selecionar uma ou mais regras de firewall. A regra network-name-allow-internal, que abre as portas udp:0-65535;tcp:0-65535;icmp, deve ser selecionada para ativar o acesso total à rede IP interna entre instâncias de VM na rede. Você também pode selecionar a regra network-name-allow-ssh para abrir a porta SSH padrão 22 para permitir conexões SSH com a rede.

Personalizado

Se você selecionar sub-redes personalizadas ao criar uma rede (uma rede VPC de modo personalizado), será preciso especificar a região e o intervalo de endereços IP particulares de cada sub-rede. Para ativar o acesso interno total entre as VMs na rede, especifique o intervalo de endereços IP 10.0.0.0/8. Se apropriado, defina um intervalo mais restrito, como 10.128.0.0/16.

Observe que as regras de firewall são fornecidas para sub-redes personalizadas após a criação da rede. Novamente, para ativar o acesso total à rede entre as VMs de sua rede, selecione ou crie uma regra de firewall que abra as portas udp:0-65535;tcp:0-65535;icmp, conforme mostrado na captura de tela do Console do Cloud abaixo.

Criar um cluster que use a rede VPC

Comando gcloud

Use o comando gcloud dataproc clusters create do SDK do Cloud com o sinalizador ‑‑network ou ‑‑subnet para criar um cluster que usará uma sub-rede automática ou personalizada.

Como usar a sinalização ‑‑network
Use a sinalização ‑‑network para criar um cluster que usará uma sub-rede com o mesmo nome da rede na região em que o cluster será criado.

gcloud dataproc clusters create my-cluster \
    --network network-name \
    --region=region \
    ... other args ...

Por exemplo, como as redes automáticas são criadas com sub-redes em cada região com o mesmo nome da rede automática, é possível passar o nome da rede automática para o sinalizador network (‑‑network auto-net-name) para criar um cluster que usará a sub-rede automática na região do cluster.

Como usar a sinalização ‑‑subnet
Use a sinalização ‑‑subnet para criar um cluster que usará uma sub-rede automática ou personalizada na região em que o cluster será criado. É preciso passar à sinalização ‑‑subnet o caminho completo do recurso da sub-rede que o cluster usará.

gcloud dataproc clusters create cluster-name \
    --subnet projects/project-id/regions/region/subnetworks/subnetwork-name \
    --region=region \
    ... other args ...

API REST

É possível especificar o campo GceClusterConfig networkUri ou subnetworkUri como parte de uma solicitação clusters.create.

Exemplo

POST /v1/projects/my-project-id/regions/us-central1/clusters/
{
  "projectId": "my-project-id",
  "clusterName": "example-cluster",
  "config": {
    "configBucket": "",
    "gceClusterConfig": {
      "subnetworkUri": "custom-subnet-1",
      "zoneUri": "us-central1-b"
    },
    ...

Console

Depois de criar uma rede VPC com regras de firewall que permitam o acesso total das VMs no intervalo de endereços IP particulares da rede, crie um cluster no Dataproc Criar um cluster no Console do Cloud. Selecione a rede principal na seção "Configuração de rede" no painel "Personalizar cluster". Depois de escolher a rede, o seletor de sub-rede exibirá as sub-redes disponíveis na região que você escolher para a criação do cluster.

Criar um cluster que use uma rede VPC em outro projeto

Um cluster do Dataproc pode usar uma rede VPC compartilhada participando como um projeto de serviço. Com uma VPC compartilhada, a rede VPC compartilhada é definida em um projeto diferente, chamado projeto de host. O projeto host é disponibilizado para uso em projetos de serviço anexados. Para informações básicas, consulte Visão geral da VPC compartilhada.

Você criará seu cluster do Dataproc em um projeto. No cenário de VPC compartilhada, este projeto será um projeto de serviço. Você precisará fazer referência ao número desse projeto. Aqui está uma maneira de encontrar o número do projeto:

  1. Navegue até a guia Configurações da página de administrador e IAM.

  2. Na lista suspensa do projeto, na parte superior da página, selecione o projeto que você usará para criar o cluster do Dataproc.

  3. Anote o número do projeto:

Um principal com o papel de administrador de VPC compartilhada precisa executar as etapas a seguir. Consulte as instruções para configurar a VPC compartilhada para ver informações básicas.

  1. Certifique-se de que o projeto de host da VPC compartilhada tenha sido ativado.

  2. Anexe o projeto Dataproc ao projeto host.

  3. Configure uma ou ambas as contas de serviço a seguir para aplicar o papel Usuário de rede ao projeto de host. O Dataproc tentará usar a primeira conta de serviço, voltando para a conta de serviço das APIs do Google, se necessário.

  4. Navegue até a guia IAM da página "IAM e administrador".

  5. Use a lista suspensa do projeto na parte superior da página para selecionar o projeto host.

  6. Clique em ADICIONAR. Repita essas etapas para adicionar ambas as contas de serviço:

    1. Adicione a conta de serviço ao campo Principals.

    2. No menu Papéis, selecione Compute Engine > Usuário da rede do Compute.

    3. Clique em Add.

Quando as duas contas de serviço tiverem o papel de usuário da rede no projeto host, você poderá criar um cluster que use sua rede VPC.

Criar um cluster do Dataproc somente com endereços IP internos

É possível criar um cluster do Dataproc isolado da Internet pública, cujas instâncias de VM se comunicam por meio de uma sub-rede de IP privada (as instâncias de VM não terão endereços IP públicos). Para isso, a sub-rede do cluster precisa ter Acesso privado do Google ativado para permitir que os nós do cluster acessem APIs e serviços do Google, como o Cloud Storage, por IPs internos.

Comando gcloud

É possível criar um cluster do Dataproc somente com endereços IP internos usando o comando gcloud dataproc clusters create com o sinalizador ‑‑no-address.

Como usar as sinalizações ‑‑no-address e ‑‑network
Use a sinalização ‑‑no-address com a sinalização ‑‑network para criar um cluster que usará uma sub-rede com o mesmo nome da rede na região em que o cluster será criado.

gcloud dataproc clusters create my-cluster \
    --no-address \
    --network network-name \
    --region=region \
    ... other args ...

Por exemplo, como as redes automáticas são criadas com sub-redes em cada região com o mesmo nome da rede automática, é possível passar o nome da rede automática para o sinalizador network (‑‑network auto-net-name) para criar um cluster que usará a sub-rede automática na região do cluster.

Como usar as sinalizações ‑‑no-address e ‑‑subnet
Use a sinalização ‑‑no-address com as sinalizações ‑‑subnet para criar um cluster que usará uma sub-rede automática ou personalizada na região onde o cluster será criado. É preciso passar à sinalização ‑‑subnet o caminho completo do recurso da sub-rede que o cluster usará.

gcloud dataproc clusters create cluster-name \
    --no-address \
    --subnet projects/project-id/regions/region/subnetworks/subnetwork-name \
    --region=region \
    ... other args ...

API REST

Defina o campo GceClusterConfig internalIpOnly como "true" como parte de uma solicitação clusters.create para ativar somente endereços IP internos.

Exemplo

POST /v1/projects/my-project-id/regions/us-central1/clusters/
{
  "projectId": "my-project-id",
  "clusterName": "example-cluster",
  "config": {
    "configBucket": "",
    "gceClusterConfig": {
      "subnetworkUri": "custom-subnet-1",
      "zoneUri": "us-central1-b",
      "internalIpOnly": true
    },
    ...

Console

É possível criar um cluster do Dataproc com o acesso particular do Google ativado na página Criar um cluster do Dataproc no Console do Cloud. Clique em IP interno somente no painel "Personalizar cluster" para ativar esse recurso para o cluster.

Como, por padrão, os clusters somente internos não têm acesso à Internet, os jobs que fazem o download das dependências da Internet, como um download dos pacotes de dependências do Spark do Maven Central, falharão. Há várias soluções para evitar o problema:

  1. Use o Cloud NAT para ativar o acesso ao cluster à Internet.

  2. Crie uma imagem personalizada que inclua as dependências (por exemplo, pacotes de dependência do Spark em /usr/lib/spark/jars/).

  3. Faça upload das dependências para um bucket do Cloud Storage e use uma ação de inicialização para fazer o download das dependências do bucket durante a criação do cluster.

Dataproc e redes VPC-SC

Com o VPC Service Controls, os administradores podem definir um perímetro de segurança em torno dos recursos dos serviços gerenciados pelo Google para controlar a comunicação entre esses serviços.

Observe as seguintes limitações e estratégias ao usar redes VPC-SC com clusters do Dataproc: