In questa pagina viene descritto come configurare una connessione da un'applicazione in esecuzione da Google Kubernetes Engine (GKE) a un'istanza Cloud SQL.
Per istruzioni passo passo sull'esecuzione di un'istanza web di esempio in Google Kubernetes Engine connessa a Cloud SQL, osserva guida rapida per la connessione da Google Kubernetes Engine.
Cloud SQL è un servizio di database completamente gestito che semplifica la configurazione, la gestione e l'amministrazione dei database relazionali nel cloud.
Google Kubernetes Engine è un modo semplice per automatizzare il deployment, la scalabilità e la gestione di Kubernetes.
Informazioni sulla connessione di Google Kubernetes Engine a Cloud SQL
Per accedere a un'istanza Cloud SQL da un'applicazione in esecuzione Google Kubernetes Engine, puoi utilizzare il proxy di autenticazione Cloud SQL (con IP pubblico o privato), o connetterti direttamente usando un indirizzo IP privato.
Il proxy di autenticazione Cloud SQL è il metodo consigliato per connettersi a Cloud SQL, anche quando utilizzando l'IP privato. Questo perché il proxy di autenticazione Cloud SQL fornisce una crittografia avanzata e autenticazione mediante IAM, che possono aiutarti a proteggere il tuo database.
Le connessioni al database consumano risorse sul server e durante la connessione un'applicazione. Utilizza sempre buone pratiche di gestione delle connessioni per ridurre al minimo l'impronta della tua applicazione e la probabilità di superare i limiti di connessione di Cloud SQL. Per saperne di più, consulta Gestire le connessioni al database.
Prima di iniziare
Per connetterti a Cloud SQL devi disporre di:
Un cluster GKE con lo strumento a riga di comando
kubectl
installato e configurato per comunicare con il cluster.Per iniziare a utilizzare GKE, vedi Eseguire il deployment di un'app in un cluster GKE.
Per la connessione tramite IP privato, il cluster GKE deve essere nativo VPC e avere il peering con la stessa rete Virtual Private Cloud (VPC) dell'istanza Cloud SQL.
È stata creata un'istanza.
Per assistenza sulla creazione di un'istanza Cloud SQL, consulta Creazione di istanze.
Un account utente MySQL configurato sull'istanza.
L'applicazione utilizzerà questo account per connettersi al database. Per assistenza sulla creazione di un account utente, vedi Creare un utente.
Informazioni sui secret di Kubernetes
In Kubernetes, i Secret sono un modo sicuro per trasferire i dettagli di configurazione all'applicazione. Puoi creare un secret con dettagli come il nome del database, l'utente e la password che possono essere iniettati nell'applicazione come variabili di ambiente.
Esistono molti modi diversi per utilizzare i secret, a seconda del tipo di connessione:
- Un secret delle credenziali del database include il nome dell'utente del database con cui ti colleghi e la password del database dell'utente.
- Se ti connetti con il proxy di autenticazione Cloud SQL, è possibile utilizzare un secret per memorizzare il servizio le credenziali dell'account.
- Se esegui la connessione con un indirizzo IP privato, puoi utilizzare un segreto per specificare l'indirizzo IP privato della tua istanza Cloud SQL.
Per esempi completi su come utilizzare i secret, consulta i repository GitHub a cui si fa riferimento più avanti in questa pagina.
Crea un oggetto Secret
Per creare gli oggetti Secret, utilizza il comando
kubectl create secret
.Per creare un Secret per le credenziali del database:
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>
Una volta creati, puoi visualizzare gli oggetti nella sezione Configurazione di la pagina Google Kubernetes Engine nella console Google Cloud.
Connettiti a Cloud SQL utilizzando il proxy di autenticazione Cloud SQL
Quando ti connetti utilizzando il proxy di autenticazione Cloud SQL, questo viene aggiunto al pod utilizzando il pattern del contenitore sidecar
. Il
contenitore del proxy di autenticazione Cloud SQL si trova nello stesso pod dell'applicazione, il che consente all'applicazione di connettersi al proxy di autenticazione Cloud SQL utilizzando localhost
,
aumentando la sicurezza e le prestazioni.
Per saperne di più sul proxy di autenticazione Cloud SQL, consulta Informazioni sul proxy di autenticazione Cloud SQL. Per ulteriori informazioni sull'utilizzo dei pod, consulta Panoramica dei pod in Kubernetes documentazione.
Per la connessione tramite il proxy di autenticazione Cloud SQL sono necessari i seguenti elementi:
Il nome della connessione dell'istanza di Cloud SQL.
Il nome di connessione dell'istanza è disponibile nella pagina Dettagli istanza Cloud SQL della console Google Cloud o dal comando
gcloud sql instances describe INSTANCE_ID
.La posizione del file della chiave associato a un account di servizio con i privilegi appropriati per la tua istanza Cloud SQL.
Per ulteriori informazioni, consulta la sezione Creazione di un account di servizio.
L'API Cloud SQL Admin è abilitata.
Fornisci l'account di servizio al proxy di autenticazione Cloud SQL
Il primo passaggio per eseguire il proxy di autenticazione Cloud SQL in Google Kubernetes Engine è creare Account di servizio Google (GSA) per rappresentare la tua applicazione. Ti consigliamo di creare un account di servizio univoco per ogni applicazione, invece di utilizzare lo stesso servizio Google Cloud ovunque. Questo modello è più sicuro perché consente di limitare autorizzazioni di ogni singola applicazione.
L'account di servizio per la tua applicazione deve soddisfare i seguenti criteri:
- Appartenere a un progetto con l'API Cloud SQL Admin abilitata
- Deve aver ricevuto il ruolo IAM client Cloud SQL (o equivalente) per il progetto contenente l'istanza a cui vuoi connetterti
- Se esegui la connessione utilizzando un IP privato, devi utilizzare un cluster GKE nativo VPC nello stesso VPC dell'istanza Cloud SQL
Devi configurare GKE per fornire l'account di servizio il proxy di autenticazione Cloud SQL. Puoi farlo in due modi: Workload Identity o un account di servizio chiave.
Workload Identity
Se utilizzi Google Kubernetes Engine, il metodo preferito è usano la funzionalità Workload Identity di GKE. Questo metodo consente di associare un account di servizio Kubernetes (KSA) a un account di servizio Google (GSA). La GSA sarà quindi accessibile alle applicazioni che utilizzano la KSA corrispondente.
Un account di servizio Google (GSA) è un'identità IAM che rappresenta la tua applicazione in Google Cloud. In modo simile, un account servizio Kubernetes (KSA) è un'identità che rappresenta la tua applicazione in un cluster Google Kubernetes Engine.
Workload Identity lega un KSA a un GSA, in modo che tutti i deployment con il KSA si autentichino come GSA nelle interazioni con Google Cloud.
- Abilita Workload Identity per il cluster
In genere, ogni applicazione ha la propria identità, rappresentata da un Arabia Saudita e la coppia di GB. Crea un'Arabia Saudita per l'applicazione eseguendo
kubectl apply -f service-account.yaml
:Abilita l'associazione IAM tra 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
Aggiungi un'annotazione a YOUR-KSA-NAME per completare l'associazione:
kubectl annotate serviceaccount \ YOUR-KSA-NAME \ iam.gke.io/gcp-service-account=YOUR-GSA-NAME@YOUR-GOOGLE-CLOUD-PROJECT.iam.gserviceaccount.com
Infine, assicurati di specificare l'account di servizio per l'oggetto k8s.
File della chiave dell'account di servizio
In alternativa, se non riesci a utilizzare Workload Identity, il pattern consigliato è
per montare un file di chiave dell'account di servizio nel pod del proxy di autenticazione Cloud SQL e utilizzare
--credentials-file
flag.
Crea un file di credenziali per la chiave dell'account di servizio:
gcloud iam service-accounts keys create ~/key.json \ --iam-account=YOUR-SA-NAME@project-id.iam.gserviceaccount.com
Trasforma la chiave dell'account di servizio in un secret k8s:
kubectl create secret generic YOUR-SA-SECRET \ --from-file=service_account.json=~/key.json
Monta il secret come volume in
spec:
per l'oggetto k8s:Segui le istruzioni nella sezione successiva per accedere al volume dalla il pod del proxy di autenticazione Cloud SQL.
Esegui il proxy di autenticazione Cloud SQL in un pattern sidecar
Ti consigliamo di eseguire il proxy di autenticazione Cloud SQL in un pattern sidecar
(come ulteriore
un container che condivide un pod con la tua applicazione). Consigliamo questa opzione rispetto all'esecuzione come servizio separato per diversi motivi:
- Impedisce l'esposizione locale del traffico SQL; il proxy di autenticazione Cloud SQL fornisce le connessioni in uscita, ma è necessario limitare l'esposizione connessioni in entrata.
- Previene un single point of failure; l'accesso di ogni applicazione poiché il database è indipendente dagli altri, il che lo rende più resiliente.
- Limita l'accesso al proxy di autenticazione Cloud SQL, consentendoti di utilizzare le autorizzazioni IAM per anziché esporre il database all'intero cluster.
Ti consente di definire l'ambito delle richieste di risorse in modo più preciso. Poiché il proxy di autenticazione Cloud SQL consuma risorse in modo lineare in base all'utilizzo, questo pattern ti consente di definire e richiedere le risorse in modo più preciso in base alle tue applicazioni man mano che si eseguono le operazioni di scalabilità.
Aggiungi il proxy di autenticazione Cloud SQL alla configurazione del pod in
containers
:Se utilizzi una chiave dell'account di servizio, specifica il volume del segreto e aggiungi il flag
--credentials-file
al comando:
- Se utilizzi l'autenticazione IAM dei database, avvia il proxy di autenticazione Cloud SQL con il flag
--auto-iam-authn
.
- Infine, configura l'applicazione in modo che si connetta utilizzando
127.0.0.1
su qualunque DB_PORT specificato nella sezione dei comandi.
File di configurazione di esempio completi:
Workload Identity
Chiave account di servizio
Connettiti a Cloud SQL senza il proxy di autenticazione Cloud SQL
Sebbene non sia così sicuro, è possibile connettersi da un cluster GKE nativo VPC a un'istanza Cloud SQL nella stessa VPC utilizzando l'IP privato senza il proxy di autenticazione Cloud SQL.
Crea un secret con l'indirizzo IP privato della tua istanza:
kubectl create secret generic <YOUR-PRIVATE-IP-SECRET> \ --from-literal=db_host=<YOUR-PRIVATE-IP-ADDRESS>
Assicurati di aggiungere il secret al container della tua applicazione:
Infine, configura l'applicazione in modo che si connetta utilizzando l'indirizzo IP della variabile di ambiente
DB_HOST
. Devi utilizzare la porta corretta per MySQL: 3306
File di configurazione di esempio completo:
IP privato
Risoluzione dei problemi
Serve aiuto? Per assistenza nella risoluzione dei problemi relativi al proxy, consulta Risoluzione dei problemi di connessioni del proxy di autenticazione Cloud SQL. o consulta la pagina dell'assistenza Cloud SQL.
Passaggi successivi
Scopri di più sull'IP privato.
Scopri di più sul proxy di autenticazione Cloud SQL e sull'immagine Docker proxy.
Ricevi assistenza per la risoluzione dei problemi relativi alle connessioni del proxy di autenticazione Cloud SQL.
Scopri di più su Google Kubernetes Engine.
Scopri le opzioni di assistenza.