Esta página descreve como configurar uma instância do Cloud SQL para usar IP privado.
Para obter informações sobre como funciona o IP privado, bem como requisitos de ambiente e gerenciamento, consulte IP privado .
Antes de começar
Requisitos de API e IAM
- Você deve habilitar a API de rede de serviços para seu Google Cloud projeto.
- Para gerenciar uma conexão de acesso a serviços privados, o usuário deve ter as seguintes permissões de Gerenciamento de Identidade e Acesso (IAM). Se você não tiver as permissões necessárias, poderá receber erros de permissões insuficientes.
-
compute.networks.list
-
compute.addresses.create
-
compute.addresses.list
-
servicenetworking.services.addPeering
Se estiver usando uma rede VPC compartilhada , você também precisará adicionar seu usuário ao projeto host e atribuir as mesmas permissões ao usuário no projeto host.
-
Se você estiver usando uma rede VPC compartilhada , também precisará habilitar esta API para o projeto host.
Acesso a serviços privados
Ao criar uma nova rede de Nuvem Privada Virtual (VPC) no seu projeto, você precisa configurar o acesso a serviços privados para alocar um intervalo de endereços IP e criar uma conexão de serviço privada. Isso permite que os recursos na rede VPC se conectem às instâncias do Cloud SQL. Google Cloud O console fornece um assistente para ajudar você a definir essa configuração.
Configurar uma instância para usar IP privado
Você pode configurar uma instância do Cloud SQL para usar IP privado ao criá-la ou para uma instância existente.
Configurar IP privado para uma nova instância
Para configurar uma instância do Cloud SQL para usar IP privado ao criar uma instância:
Console
No Google Cloud console, acesse a página Instâncias do Cloud SQL .
- Clique em Criar instância .
- Expandir Mostrar opções de configuração .
- Expandir conexões .
- Selecione IP privado .
Uma lista suspensa mostra as redes VPC disponíveis no seu projeto. Se o seu projeto for o projeto de serviço de uma VPC compartilhada , as redes VPC do projeto host também serão exibidas.
- Selecione a rede VPC que você deseja usar.
- Clique em Configurar conexão .
- Na seção Alocar um intervalo de IP , selecione uma das seguintes opções:
- Selecione um ou mais intervalos de IP existentes ou crie um novo no menu suspenso. O menu suspenso inclui os intervalos alocados anteriormente, se houver, ou você pode selecionar " Alocar um novo intervalo de IP" e inserir um novo intervalo e nome.
- Use um intervalo de IP alocado automaticamente em sua rede .
- Clique em Continuar .
- Clique em Criar conexão .
- Verifique se você vê a mensagem:
Private service connection for network VPC_NETWORK_NAME has been successfully created
. - Opcionalmente, você pode especificar um intervalo de IP alocado para suas instâncias usarem para conexões.
- Expanda a opção Mostrar intervalo de IP alocado .
- Selecione um intervalo de IP no menu suspenso.
- Conclua a configuração da sua instância.
- Clique em Criar instância .
Se você vir uma mensagem indicando que precisa configurar uma conexão de serviço privada, faça o seguinte:
gcloud
Antes de criar uma instância usando um endereço IP privado, certifique-se de que seu projeto esteja configurado para acesso a serviços privados .
Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:
-
INSTANCE_ID
: O ID da instância -
PROJECT_ID
: O ID do projeto NETWORK_PROJECT_ID
: O ID do projeto da rede VPC-
VPC_NETWORK_NAME
: O nome da rede VPC -
RANGE_NAME
: Opcional. Se especificado, define um nome de intervalo para o qual um intervalo de IP é alocado. O nome do intervalo deve estar em conformidade comRFC-1035
e conter de 1 a 63 caracteres. -
REGION_NAME
: O nome da região
--network
. Para desabilitar o IP público, use o sinalizador --no-assign-ip
.gcloud beta sql instances create INSTANCE_ID \ --project=PROJECT_ID \ --network=projects/NETWORK_PROJECT_ID/global/networks/VPC_NETWORK_NAME \ --no-assign-ip \ --allocated-ip-range-name=RANGE_NAME
Terraform
Para configurar o IP privado para uma nova instância, use os seguintes recursos do Terraform:
-
google_compute_network
-
google_compute_global_address
-
google_service_networking_connection
-
google_sql_database_instance
Aplicar as alterações
Para aplicar sua configuração do Terraform em um Google Cloud projeto, conclua as etapas nas seções a seguir.
Preparar o Cloud Shell
- Inicie o Cloud Shell .
Defina o padrão Google Cloud projeto onde você deseja aplicar suas configurações do Terraform.
Você só precisa executar este comando uma vez por projeto e pode executá-lo em qualquer diretório.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.
Preparar o diretório
Cada arquivo de configuração do Terraform deve ter seu próprio diretório (também chamado de módulo raiz ).
- No Cloud Shell , crie um diretório e um novo arquivo dentro dele. O nome do arquivo deve ter a extensão
.tf
— por exemplo,main.tf
Neste tutorial, o arquivo será chamado demain.tf
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
Se estiver seguindo um tutorial, você pode copiar o código de exemplo em cada seção ou etapa.
Copie o código de exemplo no
main.tf
recém-criado.Opcionalmente, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução completa.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve suas alterações.
- Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção
-upgrade
:terraform init -upgrade
Aplicar as alterações
- Revise a configuração e verifique se os recursos que o Terraform irá criar ou atualizar correspondem às suas expectativas:
terraform plan
Faça correções na configuração conforme necessário.
- Aplique a configuração do Terraform executando o seguinte comando e digitando
yes
no prompt:terraform apply
Aguarde até que o Terraform exiba a mensagem "Aplicação concluída!".
- Abra seu Google Cloud projeto para visualizar os resultados. No Google Cloud console, navegue até seus recursos na interface do usuário para garantir que o Terraform os criou ou atualizou.
Excluir as alterações
Para excluir suas alterações, faça o seguinte:
- Para desabilitar a proteção contra exclusão, no seu arquivo de configuração do Terraform defina o argumento
deletion_protection
comofalse
.deletion_protection = "false"
- Aplique a configuração atualizada do Terraform executando o seguinte comando e digitando
yes
no prompt:terraform apply
Remova os recursos aplicados anteriormente com sua configuração do Terraform executando o seguinte comando e digitando
yes
no prompt:terraform destroy
REST v1
Crie uma nova instância com um endereço IP privado:
Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:
- PROJECT_ID: O ID do projeto
- INSTANCE_ID: O ID da instância
- VPC_NETWORK_NAME: especifique o nome da rede de Nuvem Privada Virtual (VPC) que você deseja usar para esta instância. O acesso aos serviços privados já deve estar configurado para a rede.
- RANGE_NAME: Opcional. Se especificado, define um nome de intervalo para o qual um intervalo de IP é alocado. O nome do intervalo deve estar em conformidade com
RFC-1035
e conter de 1 a 63 caracteres. - AUTHORIZED_NETWORKS: Para conexões IP públicas, especifique as conexões de redes autorizadas que podem se conectar à sua instância.
Para o parâmetro ipv4Enabled
, defina o valor como true
se estiver usando um endereço IP público para sua instância ou false
se sua instância tiver um endereço IP privado.
Método HTTP e URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances
Corpo JSON da solicitação:
{ "name": "INSTANCE_ID", "region": "region", "databaseVersion": "database-version", "settings": { "tier": "machine-type", "ipConfiguration": { "ipv4Enabled": false, "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME", "allocatedIpRange": "RANGE_NAME" "authorizedNetworks": [AUTHORIZED_NETWORKS], } } }
Para enviar sua solicitação, expanda uma destas opções:
Você deve receber uma resposta JSON semelhante à seguinte:
REST v1beta4
Crie uma nova instância com um endereço IP privado:
Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:
- PROJECT_ID: O ID do projeto
- INSTANCE_ID: O ID da instância
- VPC_NETWORK_NAME: especifique o nome da rede de Nuvem Privada Virtual (VPC) que você deseja usar para esta instância. O acesso aos serviços privados já deve estar configurado para a rede.
- RANGE_NAME: Opcional. Se especificado, define um nome de intervalo para o qual um intervalo de IP é alocado. O nome do intervalo deve estar em conformidade com
RFC-1035
e conter de 1 a 63 caracteres. - AUTHORIZED_NETWORKS: Para conexões IP públicas, especifique as conexões de redes autorizadas que podem se conectar à sua instância.
Para o parâmetro ipv4Enabled
, defina o valor como true
se estiver usando um endereço IP público para sua instância ou false
se sua instância tiver um endereço IP privado.
Método HTTP e URL:
POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances
Corpo JSON da solicitação:
{ "name": "INSTANCE_ID", "region": "region", "databaseVersion": "database-version", "settings": { "tier": "machine-type", "ipConfiguration": { "ipv4Enabled": false, "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME", "allocatedIpRange": "RANGE_NAME" "authorizedNetworks": [AUTHORIZED_NETWORKS], } } }
Para enviar sua solicitação, expanda uma destas opções:
Você deve receber uma resposta JSON semelhante à seguinte:
Configurar IP privado para uma instância existente
Configurar uma instância existente do Cloud SQL para usar IP privado faz com que a instância seja reiniciada, resultando em tempo de inatividade.
Para configurar uma instância existente para usar IP privado:
Console
No Google Cloud console, acesse a página Instâncias do Cloud SQL .
- Para abrir a página Visão geral de uma instância, clique no nome da instância.
- Selecione Conexões no menu de navegação do Cloud SQL.
- Na guia Rede , marque a caixa de seleção IP privado .
Uma lista suspensa mostra as redes disponíveis no seu projeto.
- Selecione a rede VPC que você deseja usar:
- Clique em Configurar conexão .
- Na seção Alocar um intervalo de IP , escolha uma das seguintes opções:
- Selecione um ou mais intervalos de IP existentes ou crie um novo no menu suspenso. O menu suspenso inclui os intervalos alocados anteriormente, se houver, ou você pode selecionar " Alocar um novo intervalo de IP" e inserir um novo intervalo e nome.
- Use um intervalo de IP alocado automaticamente em sua rede.
- Clique em Continuar .
- Clique em Criar conexão .
- Verifique se você vê o status A conexão de serviço privada para a rede
VPC_NETWORK_NAME
foi criada com sucesso . - Clique em Salvar .
Se você vir que é necessária uma conexão de serviço privada :
gcloud
Certifique-se de que seu projeto esteja configurado para acesso a serviços privados .
Atualize sua instância do Cloud SQL usando o parâmetro --network
para especificar o nome da rede VPC selecionada.
gcloud beta sql instances patch INSTANCE_ID \ --project=PROJECT_ID \ --network=projects/NETWORK_PROJECT_ID/global/networks/VPC_NETWORK_NAME \ --no-assign-ip
REST v1
Crie uma nova instância com um endereço IP privado:
Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:
- PROJECT_ID: O ID do projeto
- INSTANCE_ID: O ID da instância
- VPC_NETWORK_NAME: especifique o nome da rede de Nuvem Privada Virtual (VPC) que você deseja usar para esta instância. O acesso aos serviços privados já deve estar configurado para a rede.
- RANGE_NAME: Opcional. Se especificado, define um nome de intervalo para o qual um intervalo de IP é alocado. O nome do intervalo deve estar em conformidade com
RFC-1035
e conter de 1 a 63 caracteres. - AUTHORIZED_NETWORKS: Para conexões IP públicas, especifique as conexões de redes autorizadas que podem se conectar à sua instância.
Para o parâmetro ipv4Enabled
, defina o valor como true
se estiver usando um endereço IP público para sua instância ou false
se sua instância tiver um endereço IP privado.
Método HTTP e URL:
PATCH https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_ID
Corpo JSON da solicitação:
{ "settings": { "ipConfiguration": { "ipv4Enabled": false, "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME", "allocatedIpRange": "RANGE_NAME" "authorizedNetworks": [AUTHORIZED_NETWORKS], } } }
Para enviar sua solicitação, expanda uma destas opções:
Você deve receber uma resposta JSON semelhante à seguinte:
REST v1beta4
Crie uma nova instância com um endereço IP privado:
Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:
- PROJECT_ID: O ID do projeto
- INSTANCE_ID: O ID da instância
- VPC_NETWORK_NAME: especifique o nome da rede de Nuvem Privada Virtual (VPC) que você deseja usar para esta instância. O acesso aos serviços privados já deve estar configurado para a rede.
- RANGE_NAME: Opcional. Se especificado, define um nome de intervalo para o qual um intervalo de IP é alocado. O nome do intervalo deve estar em conformidade com
RFC-1035
e conter de 1 a 63 caracteres. - AUTHORIZED_NETWORKS : Para conexões IP públicas, especifique as conexões de redes autorizadas que podem se conectar à sua instância.
Para o parâmetro ipv4Enabled
, defina o valor como true
se estiver usando um endereço IP público para sua instância ou false
se sua instância tiver um endereço IP privado.
Método HTTP e URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID
Corpo JSON da solicitação:
{ "settings": { "ipConfiguration": { "ipv4Enabled": false, "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME", "allocatedIpRange": "RANGE_NAME" "authorizedNetworks": [AUTHORIZED_NETWORKS], } } }
Para enviar sua solicitação, expanda uma destas opções:
Você deve receber uma resposta JSON semelhante à seguinte:
Conecte-se a uma instância usando seu IP privado
Você usa acesso a serviços privados para se conectar a instâncias do Cloud SQL de instâncias do Compute Engine ou do Google Kubernetes Engine na mesma rede VPC (definida aqui como fontes internas ) ou de fora dessa rede (uma fonte externa ).
Conectar de uma fonte interna
Para conectar de uma fonte na mesma Google Cloud projeto como sua instância do Cloud SQL, como o Cloud SQL Auth Proxy em execução em um recurso do Compute Engine, esse recurso deve estar na mesma rede VPC onde o acesso a serviços privados foi estabelecido para a instância do Cloud SQL.
Para se conectar de uma fonte sem servidor, como o ambiente padrão do App Engine , o Cloud Run ou as funções do Cloud Run , seu aplicativo ou função se conecta diretamente à sua instância por meio do Serverless VPC Access sem o Cloud SQL Auth Proxy.
Conectar de uma fonte externa
Se uma rede externa (por exemplo, uma rede local ou uma rede VPC) estiver conectada à rede VPC à qual sua instância do Cloud SQL está conectada, você poderá usar o Cloud VPN ou o Cloud Interconnect para se conectar à instância de um cliente na rede externa.
Para permitir conexões de uma rede externa, faça o seguinte:
- Certifique-se de que sua rede VPC esteja conectada à rede externa usando um túnel VPN na nuvem ou um anexo de VLAN para Interconexão Dedicada ou Interconexão de Parceiro .
- Certifique-se de que as sessões do Border Gateway Protocol (BGP) nos Cloud Routers que gerenciam seus túneis Cloud VPN e anexos Cloud Interconnect (VLANs) tenham recebido prefixos específicos (destinos) da sua rede local.
Rotas padrão (destino 0.0.0.0/0) não podem ser importadas para a rede VPC do Cloud SQL porque essa rede possui sua própria rota padrão local. Rotas locais para um destino são usadas mesmo que o peering do Cloud SQL esteja configurado para importar rotas personalizadas da sua rede VPC.
- Identifique as conexões de peering produzidas pela conexão de serviços privados. Dependendo do serviço, a conexão de serviços privados pode criar uma ou mais das seguintes conexões de peering, mas não necessariamente todas:
-
cloudsql-mysql-googleapis-com
-
cloudsql-postgres-googleapis-com
-
servicenetworking-googleapis-com
-
- Atualize todas as conexões de peering para habilitar a exportação de rotas personalizadas .
- Identifique o intervalo alocado usado pela conexão de serviços privados.
- Configure o modo de anúncio personalizado do Cloud Router para o intervalo alocado nos Cloud Routers que gerenciam sessões BGP para seus túneis Cloud VPN ou anexos Cloud Interconnect (VLANs).
Conectar do Cloud Shell
O Cloud Shell não oferece suporte à conexão com uma instância do Cloud SQL que tenha apenas um endereço IP privado.
Conectar-se a partir de endereços IP não RFC 1918
A RFC 1918 especifica endereços IP que são atribuídos para uso interno (ou seja, dentro de uma organização) e não serão roteados na internet. Especificamente, são:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
Conexões com uma instância do Cloud SQL usando um endereço IP privado são autorizadas automaticamente para intervalos de endereços RFC 1918. Dessa forma, todos os clientes privados podem acessar o banco de dados sem passar pelo proxy.
Para se conectar a partir de um endereço IP não RFC 1918, você deve definir a autorização de IP por instância para permitir tráfego de intervalos de endereços IP não RFC 1918.
Por exemplo, use um comando gcloud
como o seguinte:
gcloud sql instances patch INSTANCE_NAME \ --authorized-networks=192.88.99.0/24,11.0.0.0/24
Por padrão, o Cloud SQL não aprende rotas de sub-rede não RFC 1918 da sua rede VPC. Você precisa atualizar o peering de rede para o Cloud SQL para exportar quaisquer rotas não RFC 1918.
gcloud compute networks peerings update PEERING_CONNECTION \ --network=VPC_NETWORK_NAME \ --export-subnet-routes-with-public-ip \ --project=PROJECT_ID
-
PEERING_CONNECTION
é o nome da conexão de peering produzida pela conexão de serviços privados entre sua rede VPC e a rede do produtor de serviços. -
VPC_NETWORK_NAME
é o nome da sua rede VPC. -
PROJECT_ID
é o ID do projeto da rede VPC. Se estiver usando uma VPC compartilhada, use o ID do projeto do host.
Substitua o seguinte:
Para mitigar o esgotamento de endereços IP, você pode usar endereços IP públicos de uso privado .
Conecte-se a partir de endereços IP públicos usados privadamente
Se você quiser configurar sua instância em um intervalo de endereços IP públicos usados de forma privada, ative export-subnet-routes-with-public-ip
no peering de rede entre sua rede e a rede do Cloud SQL.
gcloud compute networks peerings update PEERING_CONNECTION \ --network=VPC_NETWORK_NAME \ --export-subnet-routes-with-public-ip \ --project=PROJECT_ID
-
PEERING_CONNECTION
é o nome da conexão de peering produzida pela conexão de serviços privados entre sua rede VPC e a rede do produtor de serviços. Para saber o nome da conexão de peering, acesse a página de peering da rede VPC . -
VPC_NETWORK_NAME
é o nome da sua rede VPC. -
PROJECT_ID
é o ID do projeto da rede VPC. Se estiver usando uma VPC compartilhada, use o ID do projeto do host.
Substitua o seguinte:
Conecte-se a uma instância configurada com endereços IP públicos usados de forma privada
Se sua instância estiver configurada em um intervalo de endereços IP públicos usados de forma privada e você quiser se conectar a ela, ative import-subnet-routes-with-public-ip
no peering de rede entre sua rede e a rede do Cloud SQL.
gcloud compute networks peerings update PEERING_CONNECTION \ --network=VPC_NETWORK_NAME \ --import-subnet-routes-with-public-ip \ --project=PROJECT_ID
-
PEERING_CONNECTION
é o nome da conexão de peering produzida pela conexão de serviços privados entre sua rede VPC e a rede do produtor de serviços. Para saber o nome da conexão de peering, acesse a página de peering da rede VPC . -
VPC_NETWORK_NAME
é o nome da sua rede VPC. -
PROJECT_ID
é o ID do projeto da rede VPC. Use o ID do projeto do host se estiver usando uma VPC compartilhada.
Substitua o seguinte:
Conecte-se usando um ponto de extremidade de gravação
Além de um endereço IP privado, você pode usar um ponto de extremidade de gravação em uma string de conexão SQL. Um ponto de extremidade de gravação é um nome de serviço de nome de domínio (DNS) global que resolve automaticamente para o endereço IP da instância primária atual. Ao usar um ponto de extremidade de gravação, você evita a necessidade de fazer alterações na conexão do aplicativo quando ocorre uma interrupção regional.
Se ocorrer um failover ou switchover de réplica, o ponto de extremidade de gravação poderá ajudar a gerenciar os endereços IP privados das instâncias. Quando isso acontecer, use o ponto de extremidade de gravação para se conectar à instância que atua como instância primária.
Como o Cloud SQL cria um ponto de extremidade de gravação
Se você habilitar a API Cloud DNS para seu Google Cloud projeto e, em seguida, você cria uma instância primária do Cloud SQL Enterprise Plus Edition , promove a réplica para a instância ou atualiza a instância do Cloud SQL Enterprise Edition , o Cloud SQL gera um ponto de extremidade de gravação automaticamente e o atribui à instância.
Para obter mais informações sobre como obter o ponto de extremidade de gravação para a instância, consulte Exibir informações da instância .
Atribuir um ponto de extremidade de gravação a uma instância
Se você não habilitar a API Cloud DNS para seu Google Cloud projeto e, em seguida, você cria, promove ou atualiza sua instância, o Cloud SQL não atribui o ponto de extremidade de gravação à instância automaticamente.
Para que o Cloud SQL gere um ponto de extremidade de gravação e o atribua à instância, conclua as seguintes etapas:
- Habilite a API do Cloud DNS.
Console
No Google Cloud console, vá para a página de APIs .
- Clique em Cloud DNS API .
- Habilite a API.
gcloud
Clique no botão a seguir para abrir o Cloud Shell, que fornece acesso de linha de comando ao seu Google Cloud recursos diretamente do navegador.
Para habilitar a API, execute o seguinte comando
gcloud services enable
:gcloud services enable dns.googleapis.com
Crie uma réplica habilitada para recuperação avançada de desastres . Como resultado, o Cloud SQL gera o ponto de extremidade de gravação e o atribui à instância.
- Para recuperar o ponto de extremidade de gravação, use o comando
gcloud sql instances describe
:gcloud sql instances describe INSTANCE_NAME | grep psaWriteEndpoint
Substitua INSTANCE_NAME pelo nome da sua instância do Cloud SQL.
Solução de problemas
Consulte a solução de problemas de conectividade conhecidos e também a depuração de problemas de conexão para obter ajuda com o autodiagnóstico.
O que vem a seguir
- Saiba mais sobre IP privado .
- Saiba mais sobre acesso a serviços privados .
- Veja como usar o VPC Service Controls para adicionar um perímetro de serviço.
- Saiba mais sobre como configurar o acesso a serviços privados .
- Saiba mais sobre como configurar o acesso a serviços privados para o Cloud SQL .
- Saiba mais sobre o Cloud VPN .
- Saiba mais sobre redes VPC .
- Saiba mais sobre o peering de rede VPC .
- Saiba mais sobre VPC compartilhada .