Configurar o peering de VPC

No Datastream, o peering de rede VPC permite estabelecer uma conexão dedicada entre sua rede de nuvem privada virtual (VPC) e o Datastream usando endereços IP internos. Antes de criar uma configuração de conectividade privada, revise as topologias de rede compatíveis e conclua os pré-requisitos de VPC e VPC compartilhada. Para se conectar a uma instância do Cloud SQL, também é possível configurar uma VM de NAT na rede VPC.

Sobre o peering de rede VPC no Datastream

O uso da conectividade particular estabelece uma conexão dedicada na rede do Datastream, ou seja, nenhum outro cliente pode compartilhá-la.

A conexão de peering de rede VPC entre sua rede VPC e a rede VPC do Datastream permite que o Datastream se conecte a:

A conexão de peering de rede VPC entre sua rede VPC e a rede VPC do Datastream não permite que o Datastream se conecte a:

Para estabelecer conectividade entre o Datastream e um recurso que só pode ser acessado pela rede VPC, como uma instância do Cloud SQL, use uma VM de conversão de endereços de rede (NAT, na sigla em inglês) na rede VPC. O diagrama a seguir mostra um exemplo de configuração de VM NAT que permite que o Datastream se conecte de forma particular a uma instância do Cloud SQL:

Diagrama de fluxo do usuário do Datastream

Pré-requisitos de peering de VPC

Antes de criar uma configuração de conectividade privada, siga estas etapas para que o Datastream possa criar a conexão de peering de VPC com seu projeto:

  • Ter uma rede VPC que possa fazer peering com a rede privada do Datastream e que atenda aos requisitos descritos na página Peering de rede VPC. Para mais informações sobre como criar essa rede, consulte Como usar o peering de rede VPC.
  • Identifique um intervalo de IP disponível (com um bloco CIDR de /29) na rede VPC. Não pode ser um intervalo de IP que já existe como uma sub-rede, um intervalo de IP pré-alocado de acesso a serviços particulares ou qualquer rota (exceto a rota padrão 0.0.0.0) que inclua o intervalo de IP. O intervalo de IP também não pode se sobrepor aos intervalos de IP internos reservados pelo Datastream (10.1.0.0/16 e 10.2.2.0/24). O Datastream usa esse intervalo de IP para criar uma sub-rede e se comunicar com o banco de dados de origem. A tabela a seguir descreve intervalos de IP válidos.
Intervalo Descrição
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
Endereços IP privados RFC 1918
100.64.0.0/10 Espaço de endereços compartilhado RFC 6598
192.0.0.0/24 Atribuições do protocolo IETF RFC 6890
192.0.2.0/24 (TEST-NET-1)
198.51.100.0/24 (TEST-NET-2)
203.0.113.0/24 (TEST-NET-3)
Documentação RFC 5737
192.88.99.0/24 Retransmissão IPv6 para IPv4 (descontinuado) RFC 7526
198.18.0.0/15 Teste de comparativo de mercado RFC 2544
  • Verifique se os recursos na sua rede VPC que se comunicam com o Datastream (como VMs NAT, balanceadores de carga internos ou bancos de dados de origem e destino) não usam endereços IP nos intervalos 10.1.0.0/16 ou 10.2.2.0/24. Esses intervalos são reservados para a infraestrutura interna do Datastream, e usá-los nos seus recursos pode causar conflitos de roteamento e falhas de conectividade imprevisíveis.

  • Verifique se o Google Cloud e o firewall local permitem o tráfego do intervalo de IP selecionado. Se não houver, crie uma regra de firewall de entrada que permita o tráfego na porta do banco de dados de origem e verifique se o intervalo de endereços IPv4 na regra de firewall é o mesmo que o intervalo de endereços IP alocado ao criar o recurso de conectividade privada:

    gcloud compute firewall-rules create FIREWALL-RULE-NAME \
      --direction=INGRESS \
      --priority=PRIORITY \
      --network=PRIVATE_CONNECTIVITY_VPC \
      --project=VPC_PROJECT \
      --action=ALLOW \
      --rules=FIREWALL_RULES \
      --source-ranges=IP-RANGE
      

    Substitua:

    • FIREWALL-RULE-NAME: o nome da regra de firewall a ser criada.
    • PRIORITY: a prioridade da regra, expressa como um número inteiro entre 0 e 65535, inclusive. O valor precisa ser menor que o definido para a regra de bloqueio de tráfego, se houver. Valores de prioridade mais baixos implicam maior precedência.
    • PRIVATE_CONNECTIVITY_VPC: a rede VPC que pode fazer peering com a rede privada do Datastream e que atende aos requisitos descritos na página Peering de rede VPC. Essa é a VPC que você especifica ao criar sua configuração de conectividade particular.
    • VPC_PROJECT: o projeto da rede VPC.
    • FIREWALL_RULES: a lista de protocolos e portas a que a regra de firewall se aplica, por exemplo, tcp:80. A regra precisa permitir o tráfego TCP para o endereço IP e a porta do banco de dados de origem ou do proxy. Como a conectividade privada pode ser compatível com vários bancos de dados, a regra precisa considerar o uso real da sua configuração.
    • IP-RANGE: o intervalo de endereços IP que o Datastream usa para se comunicar com o banco de dados de origem. Esse é o mesmo intervalo indicado no campo Alocar um intervalo de IP ao criar a configuração de conectividade particular.

      Também pode ser necessário criar uma regra de firewall de saída idêntica para permitir o tráfego de volta para o Datastream.

  • São atribuídas a um papel que contém a permissão compute.networks.list. Essa permissão fornece as permissões do IAM necessárias para listar redes VPC no projeto. Para saber quais papéis contêm essa permissão, consulte a referência de permissões do IAM.

Pré-requisitos da VPC compartilhada

Se você estiver usando a VPC compartilhada, conclua as ações a seguir, além das etapas descritas na seção Pré-requisitos da VPC:

  1. No projeto de serviço:

    1. Ative a API Datastream.
    2. Encontre o endereço de e-mail usado para a conta de serviço do Datastream. As contas de serviço do Datastream são criadas quando você realiza uma das seguintes ações:

      • Você cria um recurso do Datastream, como um perfil de conexão ou um stream.
      • Crie uma configuração de conectividade privada, selecione sua VPC compartilhada e clique em Criar conta de serviço do Datastream. A conta de serviço é criada no projeto host.

      Para encontrar o endereço de e-mail usado na conta de serviço do Datastream, localize o Número do projeto na página inicial do console do Google Cloud . O endereço de e-mail da conta de serviço é service-[project_number]@gcp-sa-datastream..

  2. No projeto host:

    1. Conceda a permissão do papel do Identity and Access Management (IAM) compute.networkAdmin à conta de serviço do Datastream. Esse papel só é necessário quando você cria o peering de VPC. Depois que o peering for estabelecido, você não vai mais precisar do papel.

      Se a organização não permitir a concessão da permissão, crie um papel personalizado com as seguintes permissões mínimas para criar e excluir recursos de conexão particular:

    Para mais informações sobre papéis personalizados, consulte Criar e gerenciar papéis personalizados.

Configurar uma VM NAT

  1. Identifique o endereço IP da instância do Cloud SQL à qual o Datastream precisa se conectar.

  2. Identifique sua rede VPC. Essa é a rede VPC conectada à rede VPC do Datastream usando o peering de rede VPC.

  3. Se ainda não tiver feito isso, crie uma configuração de conectividade privada no Datastream. Isso cria a conexão de peering de rede VPC que conecta sua rede VPC e a rede VPC do Datastream. Anote o intervalo de endereços IP usado pela configuração de conectividade privada do Datastream.

  4. Escolha um tipo de máquina para usar na VM NAT que você vai criar na próxima etapa. OGoogle Cloud impõe um limite máximo de largura de banda de saída por instância para pacotes roteados por próximos saltos em uma rede VPC, de acordo com o tipo de máquina da instância de VM. Para mais informações, consulte Saída para destinos roteáveis em uma rede VPC e Largura de banda de saída máxima por instância.

  5. Crie a VM NAT na rede VPC. Ao criar a VM, é preciso ativar o encaminhamento de IP. Para mais informações, consulte Ativar encaminhamento de IP para instâncias.

    Se a rede VPC for uma rede VPC compartilhada, será possível criar a VM NAT no projeto host ou em qualquer projeto de serviço, desde que a interface de rede da VM NAT esteja na rede VPC compartilhada.

    • Para minimizar o tempo de retorno da rede, crie a VM de NAT na mesma região do Datastream.
    • Neste exemplo, presumimos que a VM de NAT tem uma única interface de rede.
    • Execute o script em uma distribuição do Linux, por exemplo, Debian 12.
    • Use o seguinte script de inicialização. O script de inicialização é executado pelo root sempre que a VM é iniciada. Esse script inclui comentários que explicam o que cada linha faz. No script, substitua CLOUD_SQL_INSTANCE_IP pelo endereço IP da instância do Cloud SQL e DATABASE_PORT pela porta de destino usada pelo software de banco de dados.
    #! /bin/bash
    
    export DB_ADDR=CLOUD_SQL_INSTANCE_IP
    export DB_PORT=DATABASE_PORT
    export SYSCTL_CONF_FILE="/etc/sysctl.d/99-sysctl.conf"
    
    # Ensure the VM can receive packets whose destinations do
    # not match any running process local to the VM
    if [ "$(sysctl net.ipv4.ip_forward)" != "net.ipv4.ip_forward = 1" ]; then
        echo "Enabling IP forwarding..."
        if [ ! -f "${SYSCTL_CONF_FILE}" ]; then
           # Create the kernel parameter config file if it doesn't exist.
           touch "${SYSCTL_CONF_FILE}"
        fi
        # Remove any lines with net.ipv4.ip_forward:
        sed -i '/net.ipv4.ip_forward/d' "${SYSCTL_CONF_FILE}"
        # Append net.ipv4.ip_forward=1:
        echo "net.ipv4.ip_forward=1" >> "${SYSCTL_CONF_FILE}"
        # Reload kernel parameters:
        sysctl --system
    fi
    
    # Ask the Metadata server for the IP address of the VM nic0
    # network interface:
    md_url_prefix="http://169.254.169.254/computeMetadata/v1/instance"
    vm_nic_ip="$(curl -H "Metadata-Flavor: Google" ${md_url_prefix}/network-interfaces/0/ip)"
    
    # Clear any existing iptables NAT table entries (all chains):
    iptables -t nat -F
    
    # Create a NAT table entry in the prerouting chain, matching
    # any packets with destination database port, changing the destination
    # IP address of the packet to the SQL instance IP address:
    iptables -t nat -A PREROUTING \
         -p tcp --dport $DB_PORT \
         -j DNAT \
         --to-destination $DB_ADDR
    
    # Create a NAT table entry in the postrouting chain, matching
    # any packets with destination database port, changing the source IP
    # address of the packet to the NAT VM's primary internal IPv4 address:
    iptables -t nat -A POSTROUTING \
         -p tcp --dport $DB_PORT \
         -j SNAT \
         --to-source $vm_nic_ip
    
    # Save iptables configuration:
    iptables-save
  6. Crie uma regra de firewall de permissão de entrada (ou regra em uma política de firewall de rede global, política de firewall de rede regional ou política de firewall hierárquica) com estas características:

    • Direção: entrada
    • Ação: permitir
    • Parâmetro de destino: pelo menos a VM NAT
    • Parâmetro de origem: o intervalo de endereços IP usado pela configuração de conectividade privada do Datastream
    • Protocolo: TCP
    • Porta: precisa incluir pelo menos o DATABASE_PORT
  7. A regra de firewall de permissão de saída implícita permite que a VM de NAT envie pacotes para qualquer destino. Se a rede VPC usar regras de firewall de negação de saída, talvez seja necessário criar uma regra de firewall de permissão de saída para permitir que a VM NAT envie pacotes para a instância do Cloud SQL. Se uma regra de permissão de saída for necessária, use estes parâmetros:

    • Direção: saída
    • Ação: permitir
    • Parâmetro de destino: pelo menos a VM NAT
    • Parâmetro de destino: o endereço IP da instância do Cloud SQL
    • Protocolo: TCP
    • Porta: precisa incluir pelo menos o DATABASE_PORT
  8. Verifique se você configurou a instância do Cloud SQL para aceitar conexões do endereço IPv4 interno principal usado pela interface de rede da VM NAT. Para instruções, consulte Autorizar com redes autorizadas na documentação do Cloud SQL.

  9. Crie um perfil de conexão no Datastream. Nos detalhes de conexão do perfil, especifique o endereço IPv4 interno principal da VM NAT que você criou. Insira a porta do banco de dados de origem no campo de porta do perfil de conexão.

Configurar um par de VMs NAT e um balanceador de carga de rede de passagem interna

Para melhorar a confiabilidade de uma solução de VM NAT, considere a seguinte arquitetura, que usa um par de VMs NAT e um balanceador de carga de rede de passagem interno:

  1. Crie duas VMs de NAT em zonas diferentes da mesma região. Siga as instruções em Configurar uma VM NAT para criar cada VM e coloque cada uma delas no próprio grupo de instâncias não gerenciadas por zona.

    Como alternativa, é possível criar um grupo gerenciado de instâncias regional. No modelo do grupo gerenciado de instâncias, inclua um script de inicialização como o exemplo nas instruções Configurar uma VM NAT.

  2. Crie um balanceador de carga de rede de passagem interna com um serviço de back-end que use os grupos de instâncias da etapa anterior como back-ends. Para um exemplo de balanceador de carga de rede de passagem interna, consulte Configurar um balanceador de carga de rede de passagem interna com back-ends de grupos de instâncias de VM.

    Ao configurar a verificação de integridade do balanceador de carga, é possível usar uma verificação de integridade TCP que use uma porta TCP de destino correspondente ao DATABASE_PORT. Os pacotes de verificação de integridade são roteados para o CLOUD_SQL_INSTANCE_IP de acordo com a configuração da VM de NAT. Como alternativa, é possível executar um processo local na VM de NAT que responda a uma verificação de integridade TCP ou HTTP em uma porta personalizada.

  3. Crie regras de firewall e configure as redes autorizadas do Cloud SQL conforme descrito nas instruções de Configurar uma VM NAT. Verifique se as redes autorizadas do Cloud SQL incluem o endereço IPv4 interno principal das duas VMs NAT.

  4. Ao criar um perfil de conexão do Datastream, especifique o endereço IP da regra de encaminhamento do balanceador de carga de rede de passagem interna nos detalhes de conexão do perfil.

A seguir