Estabeleça ligação a uma origem pública a partir de uma instância privada

Esta página descreve como estabelecer ligação a aplicações de software como serviço (SaaS), como o Salesforce, e serviços na nuvem de terceiros, como o Amazon S3, a partir de uma instância privada do Cloud Data Fusion quando desenvolve um pipeline.

Ao longo deste guia, são usados os termos saída e controlo de saída:

  • A saída refere-se ao tráfego de rede que sai Google Cloud através da Internet pública. Normalmente, a saída ocorre quando cria um pipeline que lê ou escreve num serviço de SaaS, como o Salesforce, ou num serviço de nuvem pública, como o Amazon S3.

  • O controlo de saída define restrições para o tráfego de saída através de uma VM proxy, que permite que o tráfego de saída para um conjunto de domínios pré-configurados seja bem-sucedido e que todos os outros falhem. Permite um perímetro de segurança mais elevado para o tráfego de saída e pode impedir a saída indesejada de uma instância privada.

O diagrama de arquitetura do sistema seguinte mostra como uma instância privada do Cloud Data Fusion se liga à Internet pública quando desenvolve um pipeline:

Diagrama da arquitetura da instância privada

Quando cria o pipeline neste cenário, o Cloud Data Fusion encaminha o tráfego de saída através do seu projeto de cliente na pré-visualização do Cloud Data Fusion ou no Wrangler. Este processo usa os seguintes recursos:

  • Uma rota de rede VPC personalizada: uma rota de rede VPC personalizada encaminha o tráfego através de uma rota personalizada importada para VMs de gateway, que exportam para uma VPC de projeto de inquilino através do intercâmbio da rede da VPC.

  • Uma VM de gateway: uma VM de gateway encaminha o tráfego de saída do projeto de inquilino do Cloud Data Fusion para uma nuvem SaaS ou de terceiros através da Internet pública. Google Cloud Esta VM é gerida no seu projeto de cliente. Pode configurá-lo num ambiente de alta disponibilidade (HA) através de um equilibrador de carga interno (ILB). Recomendamos que reutilize a VM para várias instâncias privadas do Cloud Data Fusion na mesma VPC.

Para obter informações sobre a configuração do controlo de saída nos seus ambientes de conceção e execução, consulte o artigo Controlar a saída numa instância privada.

Antes de começar

Configure a conetividade à Internet

Os passos seguintes descrevem como aceder a um contentor do Amazon S3 a partir de uma instância privada do Cloud Data Fusion no Wrangler. Os mesmos passos aplicam-se ao acesso a qualquer origem de dados através da Internet pública quando cria um pipeline na pré-visualização ou no Wrangler.

Neste guia, é usada apenas uma VM, mas, para aplicações essenciais, recomendamos que crie VMs com balanceamento de carga. Para mais informações, consulte o artigo Configure a VM de alta disponibilidade.

Crie um gateway de NAT

Crie um gateway Cloud NAT na mesma região e rede VPC que a sua instância privada do Cloud Data Fusion.

Aceda ao Cloud NAT

Crie uma instância de VM de gateway e regras de firewall

Consola

  1. Aceda à página Instâncias de VM.

    Aceder às instâncias de VM

  2. Clique em Criar instância. Recomendamos que use uma VM sem um IP externo.

  3. Use a mesma VPC que tem o intercâmbio de redes configurado com a instância privada do Cloud Data Fusion. Para mais informações sobre a interligação de redes VPC neste cenário, consulte a secção Antes de começar.

  4. Ative o encaminhamento de IP para a instância na mesma rede que a instância do Cloud Data Fusion.

  5. No campo Script de arranque, introduza o seguinte script:

    #! /bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -j MASQUERADE
    echo net.ipv4.ip_forward=1 > /etc/sysctl.d/11-gce-network-security.conf
    iptables-save
    

    Para mais informações, consulte o artigo Executar scripts de arranque.

    Para obter o intervalo de IPs atribuído à instância do Cloud Data Fusion, aceda à página Detalhes da instância do Cloud Data Fusion.

    Interface de saída de preparação

gcloud

Para criar a VM de gateway e as regras de firewall, execute o seguinte script na CLI do Google Cloud:

export CDF_PROJECT=CDF_PROJECT
export GATEWAY_VM=GATEWAY_VM_NAME
export ZONE=VM_ZONE
export SUBNET=SUBNET
export VPC_NETWORK=VPC_NETWORK
export COMPUTE_ENGINE_SA=COMPUTE_ENGINE_SA

gcloud beta compute --project=$CDF_PROJECT instances create $GATEWAY_VM --zone=$ZONE --machine-type=e2-medium --subnet=$SUBNET --network-tier=PREMIUM --metadata=startup-script=\#\!\ /bin/bash$'\n'echo\ 1\ \>\ /proc/sys/net/ipv4/ip_forward$'\n'iptables\ -t\ nat\ -A\ POSTROUTING\ -s\ 0.0.0.0/0\ -j\ MASQUERADE$'\n'echo\ net.ipv4.ip_forward=1\ \>\ /etc/sysctl.d/11-gce-network-security.conf$'\n'iptables-save  --can-ip-forward --no-address --maintenance-policy=MIGRATE --service-account=$COMPUTE_ENGINE_SA --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append --tags=http-server,https-server --image=debian-10-buster-v20210316 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-balanced --boot-disk-device-name=$GATEWAY_VM --no-shielded-secure-boot --shielded-vtpm --shielded-integrity-monitoring --reservation-affinity=any

gcloud compute --project=$CDF_PROJECT firewall-rules create egress-allow-http --direction=INGRESS --priority=1000 --network=$VPC_NETWORK --action=ALLOW --rules=tcp:80 --source-ranges=CDF_IP_RANGE --target-tags=http-server

gcloud compute --project=$CDF_PROJECT firewall-rules create egress-allow-https --direction=INGRESS --priority=1000 --network=$VPC_NETWORK --action=ALLOW --rules=tcp:443 --source-ranges=CDF_IP_RANGE --target-tags=https-server

Substitua o seguinte:

  • CDF_PROJECT: o identificador exclusivo personalizável do seu projeto
  • GATEWAY_VM: o nome da VM que quer configurar
  • ZONE: a zona da sua VM
  • SUBNET: a sub-rede
  • VPC_NETWORK: o nome da sua VM
  • COMPUTE_ENGINE_SA: o nome da sua conta de serviço do Compute Engine
  • CDF_IP_RANGE: o intervalo de IP atribuído à instância do Cloud Data Fusion

Usar uma VPC partilhada

Se usar uma VPC partilhada para ligar a sua instância privada do Cloud Data Fusion a origens na Internet pública, crie uma VM de gateway no projeto anfitrião onde o peering de rede VPC está configurado com o projeto de inquilino.

Crie um trajeto personalizado

Crie uma rota personalizada para estabelecer ligação à instância de VM de gateway que criou.

Consola

Para criar o seu trajeto na Google Cloud consola, consulte o artigo Adicionar um trajeto estático.

Quando configura o trajeto:

  • Defina a Prioridade como superior ou igual a 1001. Defina o destino para o intervalo de IP atribuído à instância do Cloud Data Fusion.
  • Use o mesmo projeto e VPC que a instância privada do Cloud Data Fusion.
  • Certifique-se de que a configuração do peering de rede VPC permite a exportação de rotas, para que a VPC do projeto de inquilino do Cloud Data Fusion importe esta rota personalizada através do peering de rede VPC.

gcloud

Para criar a sua rota na CLI gcloud:

export ROUTE=ROUTE
gcloud beta compute routes create $ROUTE --project=$CDF_PROJECT \
    --network=$VPC_NETWORK --priority=1001 \
    --destination-range=0.0.0.0/0 \
    --next-hop-instance=$GATEWAY_VM \
    --next-hop-instance-zone=$ZONE

Substitua o seguinte:

  • ROUTE: o nome do trajeto personalizado.

Valide a configuração

Depois de realizar os passos anteriores, verifique se consegue aceder aos serviços de contentores S3 (ou a outro serviço SaaS ou na nuvem pública) na pré-visualização e no Wrangler.

Configure um gateway de alta disponibilidade

Recomendado: para aplicações de missão crítica, recomendamos que crie VMs com balanceamento de carga.

Crie regras de firewall para verificações de funcionamento

Crie regras de firewall para permitir:

  • Porta 80 (HTTP) e porta 443 (HTTPS) de todos os intervalos de origem.
  • Tráfego TCP, UDP e ICMP dos endereços IP do teste de funcionamento Por exemplo: 130.211.0.0/22,35.191.0.0/16.

Consola

Crie regras de firewall para permitir portas de todos os intervalos de origem e regras de firewall para permitir tráfego TCP, UDP e ICMP de endereços IP de sondas de verificação de funcionamento, como 130.211.0.0/22,35.191.0.0/16.

Consulte o artigo Criar verificações de funcionamento.

gcloud

Crie uma regra de firewall para verificações de funcionamento:

export CDF_PROJECT=PROJECT_ID
export VPC_NETWORK=VPC_NETWORK

gcloud compute --project=$CDF_PROJECT firewall-rules create vpc-allow-http \
    --direction=INGRESS --priority=1000 \
    --network=$VPC_NETWORK \
    --action=ALLOW --rules=tcp:80 \
    --source-ranges=CDF_IP_RANGE \
    --target-tags=http-server

gcloud compute --project=$CDF_PROJECT firewall-rules create vpc-allow-https \
    --direction=INGRESS --priority=1000 --network=$VPC_NETWORK \
    --action=ALLOW --rules=tcp:443 --source-ranges=CDF_IP_RANGE \
    --target-tags=https-server

gcloud compute --project=$CDF_PROJECT firewall-rules create allow-health-checks \
    --network=$VPC_NETWORK \
    --action=allow --direction=ingress \
    --target-tags=allow-health-checks \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --rules=tcp,udp,icmp

Substitua o seguinte:

  • PROJECT_ID: o identificador exclusivo personalizável do seu projeto.
  • VPC_NETWORK: o nome da sua rede VPC.
  • CDF_IP_RANGE: o intervalo de endereços IP atribuído ao Cloud Data Fusion.

Crie um modelo de instância de VM de gateway

Consola

Quando cria um modelo de instância na consola:

  • Crie-o na mesma VPC que a instância do Cloud Data Fusion.
  • Recomendado: use uma VM com um endereço IP privado.
  • Ative as portas HTTP/HTTPS.
  • Ative o encaminhamento de IP
  • No campo Script de arranque, introduza o seguinte script:

    #! /bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -j MASQUERADE
    echo net.ipv4.ip_forward=1 > /etc/sysctl.d/11-gce-network-security.conf
    iptables-save
    

    Para mais informações, consulte o artigo Executar scripts de arranque.

    Para obter o intervalo de IPs atribuído à instância do Cloud Data Fusion, aceda à página Detalhes da instância do Cloud Data Fusion.

gcloud

Crie um modelo de instância:

export TEMPLATE_NAME=TEMPLATE_NAME
export REGION=REGION
export SUBNET=SUBNET
export SERVICE_ACCOUNT=SERVICE_ACCOUNT

gcloud beta compute --project=$CDF_PROJECT instance-templates create $TEMPLATE_NAME \
--machine-type=e2-medium \
--subnet=projects/$CDF_PROJECT/regions/$REGION/subnetworks/$SUBNET \
--network-tier=PREMIUM --metadata=startup-script=sudo\ bash\ -c\ \"echo\ 1\ \>\ /proc/sys/net/ipv4/ip_forward\"$'\n'sudo\ iptables\ -t\ nat\ -A\ POSTROUTING\ -s\ 0.0.0.0/0\ -j\ MASQUERADE$'\n'sudo\ bash\ -c\ \"echo\ net.ipv4.ip_forward=1\ \>\ /etc/sysctl.d/11-gce-network-security.conf\"$'\n'sudo\ iptables-save \
--can-ip-forward --no-address --maintenance-policy=MIGRATE \
--service-account=$SERVICE_ACCOUNT \
--scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append \
--region=$REGION --tags=http-server,https-server,allow-health-checks \
--image=debian-10-buster-v20210316 \
--image-project=debian-cloud --boot-disk-size=10GB \
--boot-disk-type=pd-balanced \
--boot-disk-device-name=$TEMPLATE_NAME \
--no-shielded-secure-boot --no-shielded-vtpm \
--no-shielded-integrity-monitoring \
--reservation-affinity=any

Crie uma verificação de funcionamento

Nenhum serviço é executado nesta instância de VM de gateway, pelo que pode usar a porta 22 para a sua verificação de estado.

Consola

Consulte o artigo Criar verificações de funcionamento.

gcloud

Crie uma verificação de funcionamento:

export HEATH_CHECK=HEALTH_CHECK_NAME

gcloud beta compute health-checks create tcp $HEATH_CHECK --project=$CDF_PROJECT \
--port=22 --proxy-header=NONE --no-enable-logging \
--check-interval=5 --timeout=5 \
--unhealthy-threshold=2 --healthy-threshold=2

Crie um grupo de instâncias

Usando a verificação de funcionamento criada no passo anterior, crie um grupo de instâncias:

Consola

Consulte o artigo Criar grupos de instâncias geridos.

gcloud

Crie um grupo de instâncias:

export INSTANCE_GROUP=INSTANCE_GROUP
gcloud beta compute --project=$CDF_PROJECT instance-groups managed create $INSTANCE_GROUP \
--base-instance-name=$INSTANCE_GROUP \
--template=$TEMPLATE_NAME --size=1 --zone=$ZONE \
--health-check=test --initial-delay=300

gcloud beta compute --project "$CDF_PROJECT" instance-groups managed set-autoscaling "$INSTANCE_GROUP" \
--zone "$ZONE" --cool-down-period "60" \
--max-num-replicas "10" --min-num-replicas "1" \
--target-cpu-utilization "0.6" --mode "on"

Crie um balanceador de carga

Crie um balanceador de carga TCP (ILB) a partir do grupo de instâncias criado no passo anterior.

Adicione a rota personalizada ao equilibrador de carga

Adicione a rota personalizada ao equilibrador de carga interno (ILB) na mesma VPC que a instância do Cloud Data Fusion.

Consola

Aceda à página Rede de VPC.

Aceda a redes de VPC

No separador Rotas, clique em Criar rota.

Adicione um trajeto personalizado

gcloud

Adicione a rota personalizada ao balanceador de carga interno:

export ROUTE=ROUTE_NAME
export ILB_FRONTEND=<ip_of_ilb_frontend>
gcloud beta compute routes create $ROUTE --project=$CDF_PROJECT \
--network=$VPC_NETWORK --priority=1001 \
--destination-range=0.0.0.0/0 \
--next-hop-ilb=$ILB_FRONTEND \
--next-hop-ilb-region=$REGION

Resolução de problemas

Receber erros de limite de tempo excedido da ligação na pré-visualização ou no Wrangler

Ao configurar os controlos de saída, pode receber um erro Connection Timeout.

Para corrigir o problema, verifique se as seguintes definições estão em vigor:

As verificações de funcionamento do grupo de instâncias não são bem-sucedidas

Verifique se existem regras de firewall para permitir o tráfego TCP, UDP e ICMP do intervalo de origem 130.211.0.0/22,35.191.0.0/16.

O pipeline falha durante a execução no Dataproc

Para aceder à Internet pública no momento da execução, ative o Cloud NAT na mesma região e rede que o cluster do Dataproc.

O que se segue?