Conectividade de rede em serviços gerenciados do Google Cloud

Esta página descreve como configurar a conectividade privada dos Integration Connectors para seu serviço de back-end como Cloud SQL para MySQL, Cloud SQL para PostgreSQL e Cloud SQL para SQL Server. Nesta página, consideramos que você esteja familiarizado com os seguintes conceitos:

Considerações

Ao criar um anexo de serviço do PSC, considere os seguintes pontos principais:

  • O anexo de serviço do PSC e o balanceador de carga são criados em sub-redes diferentes dentro da mesma VPC. Especificamente, o anexo de serviço é sempre criado em uma sub-rede NAT.
  • Os servidores proxy SOCKS5 precisam estar vinculados ao endereço IP 0.0.0.0:<port>, porque isso é necessário para o tráfego de entrada do balanceador de carga e das sondagens de verificação de integridade. Para mais informações, consulte Verificação de integridade.
  • O tráfego do balanceador de carga e da sondagem de verificação de integridade precisa ser enviado para a mesma porta.
  • Configure as regras de firewall para facilitar o fluxo de tráfego.

    Regras de entrada

    • O tráfego da sub-rede do anexo de serviço do PSC precisa chegar ao serviço de back-end.
    • Na sub-rede do ILB, o ILB precisa enviar tráfego para os servidores proxy SOCKS5.
    • A sondagem de verificação de integridade precisa acessar os servidores proxy SOCKS5. As sondagens de verificação de integridade do Google Cloud têm um intervalo de IP fixo (35.191.0.0/16, 130.211.0.0/22). Portanto, esses IPs podem ser permitidos para enviar tráfego aos servidores proxy SOCKS.

    Regras de saída

    O tráfego de saída é ativado por padrão em um projeto do Google Cloud, a menos que regras de negação específicas sejam configuradas.

  • Todos os componentes do Google Cloud, como o anexo de serviço do PSC e o balanceador de carga, precisam estar na mesma região.
  • Verifique se os servidores proxy SOCKS5 aceitam tráfego nos seguintes cenários:
    • Balanceadores de carga de passagem (ILB TCP/UDP L4): as solicitações dos IPs NAT do anexo de serviço do PSC precisam chegar aos servidores proxy SOCKS5. Portanto, é necessário permitir todo o intervalo de IP da sub-rede NAT para o anexo de serviço. Para mais informações, consulte Sub-redes do Private Service Connect.
    • Balanceadores de carga baseados em proxy/HTTP(s) (ILB de proxy L4, ILB L7): Todas as novas solicitações são originadas do balanceador de carga. Portanto, os servidores proxy SOCKS5 precisam aceitar solicitações da sub-rede de proxy da rede VPC. Para mais informações, consulte Sub-redes somente proxy para balanceadores de carga baseados no Envoy.

Configurar a conectividade particular

Alguns dos serviços gerenciados do Google Cloud, como o Cloud SQL para MySQL expõem um anexo de serviço do PSC para conectividade particular. Nesses casos, você pode pular esta etapa para criar um anexo de serviço do PSC. O anexo de serviço do PSC fornecido pelo serviço gerenciado pode ser usado para criar o anexo de endpoint dos Integration Connectors.

É necessário criar um novo anexo de serviço do PSC nos seguintes cenários:

  • O serviço gerenciado do Google Cloud não expõe um anexo de serviço, mas expõe um endereço IP usando o acesso a serviços particulares.
  • O serviço gerenciado do Google Cloud expõe um anexo de serviço, mas não oferece suporte à lista de permissões do projeto dos Integration Connectors para consumir o anexo de serviço.

As etapas para criar o anexo de serviço para esses dois cenários são descritas em detalhes nas seções a seguir. Depois de criar o anexo de serviço, é necessário criar um anexo de endpoint e configurar uma conexão para usar o anexo de endpoint.

Criar um anexo de serviço para um serviço gerenciado que restringe o acesso

O serviço gerenciado pode não permitir que o projeto dos Integration Connectors seja adicionado à lista de permissões para consumir o anexo de serviço que ele expõe. Nesse caso, é necessário criar um balanceador de carga que consuma o anexo de serviço e o exponha aos Integration Connectors criando outro anexo de serviço no seu projeto.

A imagem a seguir mostra um serviço gerenciado que expõe um anexo de serviço:

Para um exemplo de um serviço gerenciado que expõe um anexo de serviço, consulte Conectividade particular para um cluster do MongoDB Atlas.

Criar um balanceador de carga com o NEG do PSC como back-end

  1. Criar um NEG para se conectar a um serviço publicado.
  2. Adicionar um back-end a um balanceador de carga de rede de proxy interno regional.

Para mais informações, consulte Criar um NEG do Private Service Connect.

Criar um anexo de serviço

  1. Crie uma sub-rede para o NAT do PSC.
  2. Crie uma regra de firewall para permitir solicitações do NAT do PSC ao balanceador de carga.
  3. Crie um anexo de serviço.

Para mais informações, consulte Criar um anexo de serviço do PSC

Permitir a conexão do PSC do projeto dos Integration Connectors

Verifique se o projeto dos Integration Connectors no Diretório de serviços está na lista de permissões do anexo de serviço. Para mais informações, consulte Adicionar o projeto dos Integration Connectors à lista de permissões em um anexo de serviço.

Criar um anexo de serviço para um serviço gerenciado que expõe o endereço IP

Se o serviço gerenciado não expuser um anexo de serviço, o tráfego dos Integration Connectors precisará ser encaminhado por proxy pelo seu projeto.

A imagem a seguir mostra um serviço gerenciado que não expõe um anexo de serviço:

Para configurar a conectividade particular, siga estas etapas:

  1. Crie um anexo do serviço PSC.
    1. Crie instâncias de VM do Compute Engine para executar servidores proxy SOCKS5.
      1. Crie a instância de proxy 1.
        gcloud compute instances create PROXY_INSTANCE_1 \
                    --project=PROJECT_ID \
                    --network-interface=network-tier=PREMIUM,subnet=SUBNET_NAME_2,no-address
                  

      Com base no seu requisito, você pode criar quantas instâncias de VM forem necessárias.

    2. Crie uma regra de firewall para permitir o SSH nas instâncias de VM.
      gcloud compute firewall-rules create FIREWALL_RULE_NAME_SSH \
                  --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:22
                  
    3. A instância de VM será usada para encaminhar o tráfego dos Integration Connectors para o serviço gerenciado. Instale um proxy SOCKS5 na instância de VM. O proxy de autenticação do Cloud SQL oferece suporte ao encadeamento por um proxy SOCKS5, que permite encaminhar o tráfego criptografado do proxy de autenticação do Cloud SQL para a instância de destino do Cloud SQL.

      As etapas detalhadas para instalar e configurar um servidor proxy SOCKS5 estão fora do escopo deste documento. Você pode instalar qualquer proxy SOCKS5 de sua escolha. As etapas a seguir mostram como instalar e configurar o servidor proxy SOCKS5 do Dante.

      1. Conecte-se à instância de VM usando SSH.
        gcloud compute ssh \
                    --tunnel-through-iap \
                    PROXY_INSTANCE_1
                
      2. Instale o servidor proxy SOCKS5 do Dante.
        sudo apt update
                sudo apt install dante-server
      3. Verifique a interface do servidor.
        sudo ip a
      4. Crie um backup da configuração do Dante.
        sudo mv /etc/danted.conf /etc/danted.conf.bak
      5. Crie um novo arquivo de configuração do Dante.
        sudo nano /etc/danted.conf
      6. Copie a seguinte configuração para o arquivo de configuração:
        logoutput: /var/log/socks.log
                # Bind the server to the 0.0.0.0 IP address to allow traffic
                # traffic from the load balancer and the health check probes.
                internal: 0.0.0.0 port = 1080
                external: ens4
                clientmethod: none
                socksmethod: none
                user.privileged: root
                user.notprivileged: nobody
                client pass {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: error connect disconnect
                }
                client block {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: connect error
                }
                socks pass {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: error connect disconnect
                }
                socks block {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: connect error
                }
      7. Reinicie o servidor Dante e verifique o status.
        sudo systemctl restart danted
                sudo systemctl status danted
      8. Saia da instância de VM.
        exit
    4. Crie um balanceador de carga com a instância de VM como back-end.
      1. Crie um grupo de instâncias não gerenciadas.
        gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME
      2. Adicione as instâncias de VM criadas na etapa 3 ao grupo.
        gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME \
                    --instances=PROXY_INSTANCE_1
      3. Crie uma sondagem de verificação de integridade e permita o tráfego da sondagem.
        1. Crie a sondagem de verificação de integridade.
          gcloud compute health-checks create tcp HEALTH_CHECK_NAME \
                      --port BACKEND_SERVER_PORT --region=REGION

          Nesse comando, defina BACKEND_SERVER_PORT como 1080, que é a porta padrão em que os servidores proxy SOCKS5 são executados.

        2. Crie uma regra de firewall para permitir o tráfego da sondagem.
          gcloud compute firewall-rules create FIREWALL_RULE_NAME_HEALTHCHECK \
                      --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT \
                      --source-ranges=35.191.0.0/16,130.211.0.0/22
      4. Crie um balanceador de carga interno L4 e permita o tráfego do balanceador de carga.
        1. Crie um serviço de back-end.
          gcloud compute backend-services create BACKEND_SERVICE \
                      --load-balancing-scheme=internal --protocol=tcp --health-checks=HEALTH_CHECK_NAME \
                      --health-checks-region=REGION 
        2. Adicione o grupo de instâncias ao serviço de back-end.
          gcloud compute backend-services add-backend BACKEND_SERVICE \
                      --instance-group=INSTANCE_GROUP_NAME \
                      --instance-group-zone=ZONE
        3. Crie uma regra de encaminhamento.
          gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
                      --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 \
                      --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE \
                      --backend-service-region=REGION
        4. Crie uma regra de firewall para permitir o tráfego interno do balanceador de carga para o grupo de instâncias.
          gcloud compute firewall-rules create FIREWALL_RULE_NAME_INTERNAL \
                      --direction=INGRESS --priority=1000 --network=VPC_NETWORK \
                      --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2

      Criar um anexo de endpoint

      Depois de criar um anexo de serviço para um serviço gerenciado, é necessário criar um anexo de endpoint e usá-lo na conexão.

      Anexo de endpoint como um endereço IP

      Para instruções sobre como criar um anexo de endpoint como um endereço IP, consulte Criar um anexo de endpoint como um endereço IP.

      Anexo de endpoint como um nome de host

      Em alguns casos, como back-ends ativados para TLS, o destino exige que você use nomes de host em vez de IPs particulares para realizar a validação de TLS. Nesses casos em que um DNS particular é usado em vez de um endereço IP para o destino do host, além de criar um anexo de endpoint como um endereço IP, também é necessário configurar zonas gerenciadas. Para instruções sobre como criar um anexo de endpoint como um nome de host, consulte Criar um anexo de endpoint como um nome de host.

      Mais tarde, ao configurar a conexão para usar o anexo de endpoint, você poderá selecionar esse anexo de endpoint.

      Configurar uma conexão para usar o anexo de endpoint

      Agora que você criou um anexo de endpoint, use-o na sua conexão. Ao criar uma nova conexão ou atualizar uma conexão atual, na seção Destinos, selecione Anexo de endpoint como o Tipo de destino e selecione o anexo de endpoint que você criou na lista Anexo de endpoint.

      Se você criou uma zona gerenciada, selecione Endereço do host como o Tipo de destino e use o registro A que você criou ao criar a zona gerenciada.

      Dicas de solução de problemas

      Se você tiver problemas com a conectividade particular, siga as diretrizes listadas nesta seção para evitar problemas comuns.

      • Verifique se o projeto dos Integration Connectors no Diretório de serviços está na lista de permissões do anexo de serviço. Para mais informações, consulte Adicionar o projeto dos Integration Connectors à lista de permissões em um anexo de serviço.
      • Verifique a seguinte configuração para as regras de firewall:
        • O tráfego da sub-rede do anexo de serviço do PSC precisa chegar ao serviço de back-end.
        • A sondagem de verificação de integridade precisa acessar o sistema de back-end. As sondagens de verificação de integridade do Google Cloud têm um intervalo de IP fixo (35.191.0.0/16, 130.211.0.0/22). Portanto, esses endereços IP precisam ser permitidos para enviar tráfego ao servidor de back-end.
      • O teste de conectividade do Google Cloud pode ser usado para identificar lacunas na configuração de rede. Para mais informações, consulte Criar e executar testes de conectividade.