Gerenciar sobreposição de destino

Nesta página, descrevemos como os administradores de rede do produtor podem gerenciar a sobreposição de destino em uma rede de nuvem privada virtual (VPC) que usa uma interface do Private Service Connect.

O Google Cloud garante que os intervalos de endereços IP de sub-redes atribuídas a interfaces de rede na mesma instância de máquina virtual (VM) não possam ter intervalos de endereços IP sobrepostos. No entanto, as sub-redes nas redes de consumidor e produtor podem se sobrepor, conforme mostrado na figura 1. Ao usar uma interface do Private Service Connect com intervalos de endereços IP de destino sobrepostos, é necessária uma configuração adicional para garantir que o tráfego alcance o destino correto na rede pretendida.

Os comandos descritos nesta página mostram como atualizar temporariamente o roteamento para uma VM que usa o sistema operacional Debian. Para atualizar permanentemente a VM ou para configurar uma VM que tenha um sistema operacional diferente, consulte a documentação pública do sistema operacional.

Figura 1. Subnet-a em uma rede VPC do produtor se sobrepõe a subnet-c em uma rede VPC do consumidor porque as duas sub-redes usam o mesmo intervalo de endereços IP. Uma VM de produtor precisa ser capaz de alcançar 10.0.1.5 em ambas as redes.

É possível gerenciar a sobreposição de intervalos de endereços IP de destino das seguintes maneiras, descritas em detalhes nesta página:

As abordagens a seguir também podem ser usadas para gerenciar a sobreposição de destino, mas não estão descritas nesta página:

  • Use uma biblioteca de soquetes e bind() para controlar o roteamento.
  • Use um espaço de endereços IP completamente não sobreposto para a rede do produtor.
  • Se os endereços IP sobrepostos no lado do produtor forem apenas para endpoints de API primários, será possível Configurar o Acesso privado do Google para hosts locais.
  • Use roteamento e encaminhamento virtual (VRF) para isolar espaços de endereços IP sobrepostos. Atribua uma instância de VRF a cada interface do Private Service Connect. Configure rotas padrão para cada instância de VRF a fim de garantir que o tráfego chegue ao destino pretendido.
  • Use o eBPF para personalizar regras de roteamento avançadas com base em critérios diferentes do endereço IP. Essa abordagem é recomendada para casos em que as opções anteriores não são viáveis.

Gerenciar a sobreposição de endereços de destino usando namespaces de rede

Você pode gerenciar a sobreposição de endereços de destino usando namespaces de rede. Essa abordagem funciona bem quando alguns aplicativos em uma VM de produtor só precisam acessar as cargas de trabalho do consumidor, e outros aplicativos na VM de produtor só precisam acessar as cargas de trabalho do produtor.

Para gerenciar a sobreposição de endereços de destino usando namespaces de rede, faça o seguinte:

  1. Conecte-se à VM que tem a interface do Private Service Connect.

  2. Execute este comando:

    ip address
    

    Na lista de interfaces de rede, localize e anote o nome do SO convidado da sua interface do Private Service Connect, por exemplo ens5. Esse nome está associado ao endereço IP da interface do Private Service Connect.

  3. Crie um namespace de rede para o tráfego vinculado ao consumidor:

    sudo ip netns add consumer-ns
    
  4. Mova a interface do Private Service Connect para o namespace de rede do consumidor. Execute os seguintes comandos individualmente:

    sudo ip link set OS_INTERFACE_NAME netns consumer-ns
    
    sudo ip netns exec consumer-ns ip link set OS_INTERFACE_NAME up
    

    Substitua OS_INTERFACE_NAME pelo nome do SO convidado da interface do Private Service Connect que você encontrou na etapa 2, por exemplo, ens5.

  5. Restaure o endereço IP da interface do Private Service Connect:

    sudo ip netns exec consumer-ns ip addr add INTERFACE_IP/32 dev OS_INTERFACE_NAME
    

    Substitua INTERFACE_IP pelo endereço IP da interface do Private Service Connect.

  6. Valide as alterações na interface do Private Service Connect:

    sudo ip netns exec consumer-ns ip a
    

    Verifique se o nome do SO convidado da interface do Private Service Connect está listado na saída do comando. Verifique se a interface tem o endereço IP correto.

  7. Adicione uma rota ao endereço IP do gateway:

    sudo ip netns exec consumer-ns ip route add GATEWAY_IP dev OS_INTERFACE_NAME scope link
    

    Substitua GATEWAY_IP pelo endereço IP do gateway padrão da sub-rede da interface do Private Service Connect.

  8. Adicione uma rota padrão para a interface do Private Service Connect:

    sudo ip netns exec consumer-ns ip route add default via GATEWAY_IP dev OS_INTERFACE_NAME
    
  9. Valide a tabela de roteamento do namespace consumer-ns:

    sudo ip netns exec consumer-ns ip route
    

    Verifique se a tabela de roteamento tem uma entrada do seguinte formato:

    default via GATEWAY_IP dev OS_INTERFACE_NAME
    
  10. Para verificar se a interface pode alcançar VMs em cada parte do intervalo de endereços IP sobrepostos, faça o seguinte:

    1. Verifique se as regras de firewall estão configuradas para permitir o tráfego ICMP de entrada nas VMs de destino.

    2. Envie um ping ICMP da VM da sua interface para uma VM de consumidor que esteja no intervalo de endereços IP sobrepostos. Use seu namespace de consumidor:

      sudo ip netns exec consumer-ns ping CONSUMER_IP_ADDRESS
      

      Substitua CONSUMER_IP_ADDRESS pelo endereço IP de uma VM de consumidor do intervalo de endereços IP sobrepostos.

    3. Envie um ping ICMP da VM da sua interface para uma VM de produtor que esteja no intervalo de endereços IP sobrepostos. Use o namespace padrão:

      ping PRODUCER_IP_ADDRESS
      

      Substitua PRODUCER_IP_ADDRESS pelo endereço IP de uma VM do produtor no intervalo de endereços IP sobrepostos.

Gerenciar a sobreposição de endereços de destino com roteamento baseado em políticas

Você pode gerenciar a sobreposição de endereços de destino configurando o roteamento com base em políticas no sistema operacional da VM da interface. Essa abordagem funciona bem quando o mesmo aplicativo precisa acessar cargas de trabalho que estão nas redes VPC do consumidor e do produtor, mas é preciso repetir o procedimento para cada porta diferente que você quer alcançar na sobreposição Intervalo de IP.

Ao configurar o roteamento com base em políticas para gerenciar a sobreposição de destinos, você escolhe as portas de destino a serem usadas nos aplicativos do consumidor. O tráfego vinculado a uma dessas portas é transmitido pela interface do Private Service Connect para a sub-rede do consumidor, enquanto o outro tráfego passa pela interface padrão até a sub-rede do produtor.

  1. Conecte-se à VM da interface do Private Service Connect.

  2. Se o comando iproute2 não estiver disponível, instale-o.

  3. Verifique se é possível gravar no seguinte arquivo: /etc/iproute2/rt_tables

  4. Crie uma tabela de rota. Adicione uma rota padrão para a interface do Private Service Connect:

    echo "200 pscnet" >> /etc/iproute2/rt_tables \
    sudo ip route add default dev OS_INTERFACE_NAME table pscnet
    

    Substitua OS_INTERFACE_NAME pelo nome do SO convidado da interface do Private Service Connect. Por exemplo, ens5.

  5. Adicione uma rota ao intervalo de sub-rede do consumidor sobreposto por meio do gateway padrão:

    sudo ip route add CONSUMER_SUBNET_RANGE via GATEWAY_IP dev OS_INTERFACE_NAME table pscnet
    

    Substitua:

    • CONSUMER_SUBNET_RANGE: o intervalo de endereços IP da sub-rede do consumidor.
    • GATEWAY_IP: o endereço IP do gateway padrão da sub-rede da interface do Private Service Connect.
  6. Atualize a tabela de rotas para que os pacotes de saída dessa VM usem o endereço IP da interface como o endereço IP de origem:

    sudo ip route add GATEWAY_IP src INTERFACE_IP dev OS_INTERFACE_NAME table pscnet
    

    Substitua INTERFACE_IP pelo endereço IP da interface do Private Service Connect.

  7. Adicione uma regra de IP que se aplique a todo o tráfego destinado à porta de destino do seu aplicativo de consumidor:

    sudo ip rule add dport CONSUMER_PORT table pscnet
    

    Substitua CONSUMER_PORT pela porta que você configurou para o tráfego da VM de consumidor.

  8. Para verificar se um pacote é roteado para a VM correta com base na porta de destino, faça o seguinte:

    1. Crie VMs de teste nas redes do produtor e do consumidor que usam o mesmo endereço IP do intervalo de sobreposição.
    2. Configure um servidor HTTP em cada VM de teste. Configure a VM de teste do consumidor para detectar na porta que você configurou para o aplicativo do consumidor. Configure a VM de teste do produtor para detectar em uma porta diferente da que você configurou para o aplicativo consumidor.
    3. Verifique se as regras de firewall estão configuradas para permitir o tráfego HTTP nas VMs de teste.
    4. Usando a porta configurada para o aplicativo consumidor, faça uma solicitação GET para o endereço IP de teste e verifique se a instância correta foi acessada:

      curl TEST_IP_ADDRESS:CONSUMER_PORT
      

      Substitua:

      • TEST_IP_ADDRESS: o endereço IP das VMs de teste.
      • CONSUMER_PORT: a porta do aplicativo consumidor.
    5. Usando a porta configurada para a VM de teste de produção, faça uma solicitação GET para o endereço IP de teste e verifique se a instância correta foi alcançada:

      curl IP_ADDRESS:PRODUCER_PORT
      

      Substitua:

      • IP_ADDRESS: o endereço IP das VMs de teste.
      • PRODUCER_PORT: a porta configurada para a VM de teste de produção.