Esta página descreve como configurar uma conexão de um aplicativo em execução no Google Kubernetes Engine (GKE) para uma instância do Cloud SQL.
Para obter instruções passo a passo sobre como executar um aplicativo Web de exemplo do Google Kubernetes Engine conectado ao Cloud SQL, consulte o início rápido para conexão do Google Kubernetes Engine .
O Cloud SQL é um serviço de banco de dados totalmente gerenciado que ajuda você a configurar, manter, gerenciar e administrar seus bancos de dados relacionais na nuvem.
O Google Kubernetes Engine é uma maneira simples de implantar, dimensionar e gerenciar o Kubernetes automaticamente.
Sobre conectar o Google Kubernetes Engine ao Cloud SQL
Para acessar uma instância do Cloud SQL de um aplicativo em execução no Google Kubernetes Engine, você pode usar o Cloud SQL Auth Proxy (com IP público ou privado) ou conectar-se diretamente usando um endereço IP privado.
O Cloud SQL Auth Proxy é a maneira recomendada de se conectar ao Cloud SQL, mesmo usando um IP privado. Isso ocorre porque o Cloud SQL Auth Proxy oferece criptografia e autenticação robustas usando o IAM, o que pode ajudar a manter seu banco de dados seguro.
As conexões de banco de dados consomem recursos no servidor e no aplicativo conectado. Sempre use boas práticas de gerenciamento de conexões para minimizar o impacto do seu aplicativo e reduzir a probabilidade de exceder os limites de conexão do Cloud SQL. Para obter mais informações, consulte Gerenciando conexões de banco de dados .
Antes de começar
Para se conectar ao Cloud SQL, você deve ter:
Um cluster do GKE, com a ferramenta de linha de comando
kubectl
instalada e configurada para se comunicar com o cluster.Para obter ajuda para começar a usar o GKE, consulte Implantar um aplicativo em um cluster do GKE .
Para conectar usando IP privado, o cluster do GKE deve ser nativo de VPC e pareado com a mesma rede de Nuvem Privada Virtual (VPC) que a instância do Cloud SQL.
Uma instância criada.
Para obter ajuda para criar uma instância do Cloud SQL, consulte Criação de instâncias .
Uma conta de usuário MySQL configurada na instância.
Seu aplicativo usará esta conta para se conectar ao banco de dados. Para obter ajuda na criação de uma conta de usuário, consulte Criação de um usuário .
Sobre os segredos do Kubernetes
No Kubernetes, segredos são uma maneira segura de passar detalhes de configuração para sua aplicação. Você pode criar um segredo com detalhes como nome do seu banco de dados, usuário e senha, que podem ser inseridos na sua aplicação como variáveis de ambiente.
Existem muitas maneiras diferentes de usar os segredos, dependendo do tipo de conexão:
- Um segredo de credenciais de banco de dados inclui o nome do usuário do banco de dados com o qual você está se conectando e a senha do usuário do banco de dados.
- Se estiver se conectando com o Cloud SQL Auth Proxy, um segredo poderá ser usado para armazenar o arquivo de credenciais da sua conta de serviço.
- Se estiver se conectando com um IP privado, um Segredo pode ser usado para especificar o endereço IP privado da sua instância do Cloud SQL.
Para obter exemplos completos de como usar o Secrets, consulte os repositórios do GitHub referenciados mais adiante nesta página.
Criar um objeto secreto
Você cria os objetos Secret usando o comando
kubectl create secret
.Para criar um segredo de credenciais de banco de dados:
kubectl create secret generic <YOUR-DB-SECRET> \ --from-literal=username=<YOUR-DATABASE-USER> \ --from-literal=password=<YOUR-DATABASE-PASSWORD> \ --from-literal=database=<YOUR-DATABASE-NAME>
Depois de criados, você pode visualizar os objetos na seção Configuração da página do Google Kubernetes Engine no Google Cloud console .
Conecte-se ao Cloud SQL usando o Cloud SQL Auth Proxy
Ao se conectar usando o Cloud SQL Auth Proxy, o Cloud SQL Auth Proxy é adicionado ao seu pod usando o padrão de contêiner sidecar
. O contêiner do Cloud SQL Auth Proxy está no mesmo pod que o seu aplicativo, o que permite que o aplicativo se conecte ao Cloud SQL Auth Proxy usando localhost
, aumentando a segurança e o desempenho.
Para obter mais informações sobre o Cloud SQL Auth Proxy, consulte Sobre o Cloud SQL Auth Proxy . Para obter mais informações sobre como trabalhar com pods, consulte Visão geral dos pods na documentação do Kubernetes.
Para conectar usando o Cloud SQL Auth Proxy, você precisa do seguinte:
O nome da conexão da instância da sua instância do Cloud SQL.
O nome da conexão da instância está disponível na página de detalhes da instância do Cloud SQL. Google Cloud console ou do comando
gcloud sql instances describe INSTANCE_ID
.O local do arquivo de chave associado a uma conta de serviço com os privilégios adequados para sua instância do Cloud SQL.
Consulte Criando uma conta de serviço para obter mais informações.
A API de administração do Cloud SQL está habilitada.
Forneça a conta de serviço ao Cloud SQL Auth Proxy
O primeiro passo para executar o Cloud SQL Auth Proxy no Google Kubernetes Engine é criar uma Conta de Serviço do Google (GSA) para representar seu aplicativo. Recomenda-se criar uma conta de serviço exclusiva para cada aplicativo, em vez de usar a mesma conta de serviço em todos os lugares. Este modelo é mais seguro, pois permite limitar as permissões por aplicativo.
A conta de serviço do seu aplicativo precisa atender aos seguintes critérios:
- Pertence a um projeto com a API de administração do Cloud SQL habilitada
- Foi concedida a função IAM do cliente Cloud SQL (ou equivalente) para o projeto que contém a instância à qual você deseja se conectar
- Se estiver conectando usando IP privado, você deve usar um cluster GKE nativo de VPC, na mesma VPC que sua instância do Cloud SQL
Você precisa configurar o GKE para fornecer a conta de serviço ao Proxy de Autenticação do Cloud SQL. Há duas maneiras recomendadas de fazer isso: identidade da carga de trabalho ou um arquivo de chave da conta de serviço .
Identidade da Carga de Trabalho
Se você estiver usando o Google Kubernetes Engine , o método preferencial é usar o recurso de Identidade de Carga de Trabalho do GKE. Esse método permite vincular uma Conta de Serviço do Kubernetes (KSA) a uma Conta de Serviço do Google (GSA) . A GSA ficará então acessível aos aplicativos que usam a KSA correspondente.
Uma Conta de Serviço do Google (GSA) é uma identidade do IAM que representa seu aplicativo no Google Cloud. De forma semelhante, uma Conta de Serviço do Kubernetes (KSA) é uma identidade que representa seu aplicativo em um cluster do Google Kubernetes Engine.
A Identidade de Carga de Trabalho vincula um KSA a um GSA, fazendo com que qualquer implantação com esse KSA seja autenticada como GSA em suas interações com o Google Cloud.
- Habilitar identidade de carga de trabalho para seu cluster
Normalmente, cada aplicativo tem sua própria identidade, representada por um par de KSA e GSA. Crie um KSA para seu aplicativo executando
kubectl apply -f service-account.yaml
:Habilite a vinculação do IAM entre YOUR-GSA-NAME e YOUR-KSA-NAME :
gcloud iam service-accounts add-iam-policy-binding \ --role="roles/iam.workloadIdentityUser" \ --member="serviceAccount:YOUR-GOOGLE-CLOUD-PROJECT.svc.id.goog[YOUR-K8S-NAMESPACE/YOUR-KSA-NAME]" \ YOUR-GSA-NAME@YOUR-GOOGLE-CLOUD-PROJECT.iam.gserviceaccount.com
Adicione uma anotação ao YOUR-KSA-NAME para completar a vinculação:
kubectl annotate serviceaccount \ YOUR-KSA-NAME \ iam.gke.io/gcp-service-account=YOUR-GSA-NAME@YOUR-GOOGLE-CLOUD-PROJECT.iam.gserviceaccount.com
Por fim, certifique-se de especificar a conta de serviço para o objeto k8s.
Arquivo de chave da conta de serviço
Como alternativa, se você não puder usar a Identidade de Carga de Trabalho, o padrão recomendado é montar um arquivo de chave de conta de serviço no pod do Proxy de Autenticação do Cloud SQL e usar o sinalizador --credentials-file
.
Crie um arquivo de credenciais para sua chave de conta de serviço:
gcloud iam service-accounts keys create ~/key.json \ --iam-account=YOUR-SA-NAME@project-id.iam.gserviceaccount.com
Transforme sua chave de conta de serviço em um segredo do k8s:
kubectl create secret generic YOUR-SA-SECRET \ --from-file=service_account.json=~/key.json
Monte o segredo como um volume sob a
spec:
para seu objeto k8s:Siga as instruções na próxima seção para acessar o volume do pod do Cloud SQL Auth Proxy.
Execute o Cloud SQL Auth Proxy em um padrão sidecar
Recomendamos executar o Cloud SQL Auth Proxy em um padrão sidecar
(como um contêiner adicional compartilhando um pod com seu aplicativo). Recomendamos isso em vez de executar como um serviço separado por vários motivos:
- Impede que seu tráfego SQL seja exposto localmente; o Cloud SQL Auth Proxy fornece criptografia em conexões de saída, mas você precisa limitar a exposição para conexões de entrada.
- Evita um único ponto de falha; o acesso de cada aplicativo ao seu banco de dados é independente dos outros, tornando-o mais resiliente.
- Limita o acesso ao Cloud SQL Auth Proxy, permitindo que você use permissões do IAM por aplicativo em vez de expor o banco de dados ao cluster inteiro.
Permite que você defina o escopo de solicitações de recursos com mais precisão; como o Cloud SQL Auth Proxy consome recursos linearmente em relação ao uso, esse padrão permite que você defina o escopo e solicite recursos com mais precisão para corresponder aos seus aplicativos à medida que eles são dimensionados.
Adicione o Cloud SQL Auth Proxy à configuração do pod em
initContainers
:Se você estiver usando uma chave de conta de serviço, especifique seu volume secreto e adicione o sinalizador
--credentials-file
ao comando:
- Se você estiver usando a autenticação de banco de dados IAM , inicie o Cloud SQL Auth Proxy com o sinalizador
--auto-iam-authn
.
- Por fim, configure seu aplicativo para se conectar usando
127.0.0.1
em qualquer DB_PORT que você especificou na seção de comando.
Arquivos de configuração de exemplo completos:
Identidade da carga de trabalho
Chave da conta de serviço
Conecte-se ao Cloud SQL sem o Cloud SQL Auth Proxy
Embora não seja tão seguro, é possível conectar-se de um cluster GKE nativo de VPC a uma instância do Cloud SQL na mesma VPC usando um IP privado sem o Cloud SQL Auth Proxy.
Crie um segredo com o endereço IP privado da sua instância:
kubectl create secret generic <YOUR-PRIVATE-IP-SECRET> \ --from-literal=db_host=<YOUR-PRIVATE-IP-ADDRESS>
Em seguida, certifique-se de adicionar o segredo ao contêiner do seu aplicativo:
Por fim, configure seu aplicativo para se conectar usando o endereço IP da variável de ambiente
DB_HOST
. Você precisará usar a porta correta para o MySQL: 3306.
Arquivo de configuração de exemplo completo:
IP privado
Solução de problemas
Precisa de ajuda? Para obter ajuda na solução de problemas do proxy, consulte Solução de problemas de conexões do Cloud SQL Auth Proxy ou consulte nossa página de suporte do Cloud SQL .
O que vem a seguir
Saiba mais sobre IP privado .
Saiba mais sobre o Cloud SQL Auth Proxy e a imagem do Docker do proxy .
Obtenha ajuda para solucionar problemas de conexões do Cloud SQL Auth Proxy .
Saiba mais sobre o Google Kubernetes Engine .
Saiba mais sobre opções de suporte .