Questa pagina descrive come configurare il DNS in Private Service Connect.
Panoramica
Il DNS è il modo consigliato per connettersi alle istanze in cui è abilitato Private Service Connect. Un nome DNS consente a reti diverse di connettersi alla stessa istanza, in cui gli endpoint Private Service Connect in ogni rete potrebbero avere indirizzi IP diversi. Inoltre, il proxy di autenticazione Cloud SQL e i connettori di linguaggio richiedono nomi DNS per connettersi a queste istanze.
Le istanze Cloud SQL con Private Service Connect abilitato possono avere due tipi di nomi DNS:
Un nome DNS per istanza. Questa opzione è disponibile per le istanze in tutte le versioni di Cloud SQL. L'istanza principale e ogni istanza di replica hanno nomi DNS per istanza diversi.
Un nome DNS dell'endpoint di scrittura globale. Questa opzione è disponibile per le istanze nella versione Cloud SQL Enterprise Plus, per facilitare il recupero di ripristino di emergenza (ADR). Un endpoint di scrittura è un nome DNS globale che si risolve automaticamente nell'indirizzo IP dell'istanza principale attuale. In caso di operazione di failover o switchover della replica, questo endpoint di scrittura reindirizza automaticamente le connessioni in entrata alla nuova istanza principale. Utilizzando un endpoint di scrittura, puoi evitare di dover apportare modifiche alla connessione dell'applicazione quando esegui un failover o uno switchover della replica per il ripristino di un'interruzione a livello di regione o un test di ripristino di emergenza.
Automazione DNS in Private Service Connect
Per creare un nome DNS per istanza, puoi utilizzare la funzionalità di automazione DNS di Cloud SQL per configurare i record DNS e il nome. Quando abiliti l'automazione DNS, Cloud SQL esegue il provisioning e la gestione automatici dei record DNS per il nome DNS per istanza nelle reti VPC consumer autorizzate.
Se l'automazione DNS è abilitata su un'istanza Cloud SQL Enterprise Plus, puoi anche abilitare un nome DNS dell'endpoint di scrittura globale che si risolve sempre automaticamente nell'indirizzo IP dell'istanza principale attuale.
Facoltativamente, puoi configurare manualmente un record DNS per istanza per l'istanza (vedi Configurare DNS manualmente), ma ti consigliamo di utilizzare l'automazione DNS. La configurazione DNS manuale è un'opzione legacy.
Prerequisiti per abilitare l'automazione DNS
- Per utilizzare l'automazione DNS o un nome DNS dell'endpoint di scrittura globale, devi abilitare l'API Cloud DNS.
- L'automazione DNS può essere abilitata solo quando è abilitato Private Service Connect (utilizza il parametro
--enable-private-service-connect). - L'automazione DNS può essere abilitata solo quando è specificata almeno una connessione automatica Private Service Connect (utilizza
--psc-auto-connections=network). - Un nome DNS dell'endpoint di scrittura globale può essere abilitato solo per un'istanza Cloud SQL Enterprise Plus con l'automazione DNS abilitata.
Configurazione dell'automazione DNS
Puoi abilitare l'automazione DNS e il nome DNS dell'endpoint di scrittura globale quando crei una nuova istanza, con Private Service Connect abilitato, come mostrato in Creare un'istanza Cloud SQL.
Puoi anche attivare o disattivare l'automazione DNS per le istanze esistenti. In questo caso, Cloud SQL esegue automaticamente il provisioning o la pulizia dei record DNS associati nelle rispettive reti.
gcloud
gcloud sql instances patch INSTANCE_NAME \ --enable-psc-auto-dns=DNS_ENABLEMENT \ --enable-psc-write-endpoint-dns=GLOBAL_DNS_ENABLEMENT \
REST
Il metodo HTTP e l'URL avranno un aspetto simile a questo:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instancesIl corpo della richiesta JSON avrà un formato simile a questo:
{ "name": "INSTANCE_NAME", "project": "PROJECT_ID", "region": "REGION_NAME", "databaseVersion": "DATABASE_VERSION", "kind": "sql#instance", "settings": { "availabilityType": "AVAILABILITY_TYPE", "ipConfiguration": { "ipv4Enabled": false, "pscConfig": { "allowedConsumerProjects": [ "ALLOWED_PROJECTS" ], "pscAutoConnections": [ { "consumerProject":"CONSUMER_PROJECT", "consumerNetwork":"projects/PARENT_PROJECT/global/networks/CONSUMER_NETWORK" } ], "pscEnabled": true, "pscAutoDnsEnabled": DNS_ENABLEMENT, "pscWriteEndpointDnsEnabled": GLOBAL_DNS_ENABLEMENT, } }, "kind": "sql#settings", "pricingPlan": "PER_USE", "replicationType": "SYNCHRONOUS", "tier": "MACHINE_TYPE" } }
Effettua le seguenti sostituzioni:
- DNS_ENABLEMENT:
trueofalsea seconda che tu voglia attivare o disattivare l'automazione DNS. - GLOBAL_DNS_ENABLEMENT:
trueofalsea seconda che tu voglia attivare o disattivare un nome DNS endpoint di scrittura globale. Setrue, ancheenable-psc-auto-dnsdeve esseretrue.
Visualizza i nomi DNS
Puoi trovare sia il nome DNS per istanza di un'istanza sia il nome DNS dell'endpoint di scrittura globale per il progetto utilizzando il comando describe.
gcloud
Nome DNS per istanza
Per trovare il nome DNS per istanza creato utilizzando l'automazione DNS, utilizza il comando
gcloud sql instances describe nel seguente modo:
gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID \ --flatten="dnsNames[]" \ --format="csv[no-heading](dnsNames.dnsScope, dnsNames.recordManager, dnsNames.name)" \ | grep "INSTANCE,CLOUD_SQL_AUTOMATION"
L'output sarà simile al seguente (dove DNS_NAME sarà il nome DNS per istanza per l'istanza):
INSTANCE,CLOUD_SQL_AUTOMATION,DNS_NAME
Il nome DNS terminerà con il nome della regione dell'istanza seguito da
.sql-psc-goog, ad esempio:
INSTANCE,CLOUD_SQL_AUTOMATION,d73a167a8c3a.2naantchj3tsc.us-central1.sql-psc.goog.
Per restituire solo il nome DNS non decorato, aggiungi | cut -d, -f3 alla fine del comando.
Il nome DNS dell'endpoint di scrittura globale
Allo stesso modo, puoi utilizzare il comando describe per trovare il nome DNS dell'endpoint di scrittura globale per il cluster di replica:
gcloud sql instances describe INSTANCE_NAME \ --project=INSTANCE_NAME \ --flatten="dnsNames[]" \ --format="csv[no-heading](dnsNames.dnsScope, dnsNames.recordManager, dnsNames.name)" \ | grep "CLUSTER,CLOUD_SQL_AUTOMATION"
L'output sarà simile al seguente (dove GLOBAL_DNS_NAME sarà il nome DNS dell'endpoint di scrittura globale per il cluster di replica):
CLUSTER,CLOUD_SQL_AUTOMATION,GLOBAL_DNS_NAME
Il nome DNS dell'endpoint di scrittura globale termina con
.global.sql-psc-goog, ad esempio:
CLUSTER,CLOUD_SQL_AUTOMATION,d73a167a8c3a.2naantchj3tsc.global.sql-psc.goog.
Per restituire solo il nome DNS non decorato, aggiungi | cut -d, -f3 alla fine del comando.
REST
Il metodo HTTP e l'URL avranno un aspetto simile a questo:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instancesIl nome DNS per istanza e il nome DNS dell'endpoint di scrittura globale verranno restituiti nel campo
dnsNames della risposta, come segue:
{ "dnsNames": [ { "connectionType": "PRIVATE_SERVICE_CONNECT", "dnsScope": "INSTANCE", "name": "31f5395197d0.3e0v7ztul56ph.us-central1.sql.goog.", "recordManager": "CUSTOMER" }, { "connectionType": "PRIVATE_SERVICE_CONNECT", "dnsScope": "INSTANCE", "name": "31f5395197d0.3e0v7ztul56ph.us-central1.sql-psc.goog", "recordManager": "CLOUD_SQL_AUTOMATION" }, { "connectionType": "PRIVATE_SERVICE_CONNECT", "dnsScope": "CLUSTER", "name": "3lbvojtu2fo6q.3e0v7ztul56ph.global.sql-psc.goog", "recordManager": "CLOUD_SQL_AUTOMATION" } ], }
Puoi utilizzare il nome DNS dell'endpoint di scrittura globale o il nome DNS per istanza per connetterti all'istanza. Vedi Connettersi utilizzando un record DNS.
Campi di stato dell'automazione DNS
Puoi determinare lo stato del DNS per l'istanza e il cluster di replica in questi due campi di output:
instanceAutoDnsStatus: mostra lo stato del DNS per istanza.writeEndpointAutoDnsStatus: mostra lo stato del DNS dell'endpoint di scrittura globale.
Entrambi i campi possono avere i seguenti valori:
AUTO_DNS_STATUS_UNSPECIFIEDAUTO_DNS_OKAUTO_DNS_FAILEDAUTO_DNS_UNKNOWN
Questi campi vengono visualizzati nel campo di output pscAutoConnections:
"pscAutoConnections": [ { "consumerNetwork": "projects/my-psc-project/global/networks/psc-dns-net2", "consumerNetworkStatus": "VALID", "consumerProject": "my-psc-project", "instanceAutoDnsStatus": "AUTO_DNS_OK", "ipAddress": "10.0.2.4", "status": "ACTIVE", "writeEndpointAutoDnsStatus": "AUTO_DNS_OK" } ]
Risoluzione dei problemi relativi all'automazione DNS
Se l'API Cloud DNS non è abilitata, se la policy di connessione Private Service Connect non è presente o se si verificano errori di backend durante la creazione del record DNS, l'automazione DNS potrebbe non riuscire a creare un record DNS per istanza o un nome DNS dell'endpoint di scrittura globale.
Esistono due flag che puoi utilizzare con l'API update/patch o
gcloud CLI se si verifica una situazione in cui l'automazione DNS non è stata
provisionata correttamente:
--reconcile-psc-networking(boolean): se impostato, Cloud SQL tenta di ripristinare le parti dell'automazione DNS che non funzionano. Questo flag non causa tempi di inattività.--reconcile-psc-networking-force(boolean): simile areconcile-psc-networking, ma se impostato, Cloud SQL tenta di ripristinare completamente tutta l'automazione DNS a costo di un breve periodo di inattività delle parti di automazione DNS PSC esistenti che funzionano. Questa opzione può essere utile in alcuni casi in cuireconcile-psc-networkingnon lo è.
Assegnare nomi DNS personalizzati
Puoi configurare nomi DNS personalizzati per le tue istanze Cloud SQL Private Service Connect. Basta creare un record CNAME con il nome DNS dell'istanza Private Service Connect come valore. Ad esempio, se vuoi configurare le tue applicazioni utilizzando il nome DNS del database sample-db.mycompany.example.com per fare riferimento all'istanza del database con il nome DNS Private Service Connect abcdef123456.987654321fedcb.us-central1.sql-psc.goog, devi prima configurare l'istanza con un nome DNS personalizzato e poi creare un record DNS CNAME utilizzando il provider DNS:
| NOME | TIPO | TTL | VALORE |
|---|---|---|---|
sample-db.mycompany.example.com |
CNAME | 600 | abcdef123456.987654321fedcb.us-central1.sql-psc.goog |
Configurare manualmente il DNS
Ti consigliamo di utilizzare l'automazione DNS, perché la configurazione DNS manuale è un'opzione legacy. Se vuoi, puoi configurare manualmente un record DNS per istanza per l'istanza. Un nome DNS fornisce un modo coerente di utilizzare il proxy di autenticazione o i connettori di lingua per connettersi da reti diverse. La risposta dell'API di ricerca delle istanze fornisce un nome DNS suggerito che puoi utilizzare per creare il record DNS in una zona DNS privata nella rete VPC corrispondente.
gcloud
Per visualizzare le informazioni di riepilogo su un'istanza Cloud SQL, incluso il nome DNS dell'istanza, utilizza il comando
gcloud sql instances describe:gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID
Esegui queste sostituzioni:
- INSTANCE_NAME: il nome dell'istanza Cloud SQL
- PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene l'istanza
Nella risposta, verifica che venga visualizzato il nome DNS. Questo nome ha il seguente pattern:
INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.. Ad esempio:1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog..Se vuoi utilizzare un nome DNS personalizzato per connetterti a un'istanza Cloud SQL anziché utilizzare il nome DNS predefinito in questa sezione, configura l'impostazione del nome alternativo del soggetto (SAN) personalizzato durante la creazione dell'istanza. Il nome DNS personalizzato che inserisci nell'impostazione SAN personalizzata viene aggiunto al campo SAN del certificato del server dell'istanza. In questo modo puoi utilizzare il nome DNS personalizzato con la convalida del nome host in modo sicuro.
Per ulteriori informazioni sulla configurazione dell'impostazione SAN personalizzata, vedi Crea istanze.
-
Per creare una zona DNS privata, utilizza il comando
gcloud dns managed-zones create. Questa zona è associata alla rete VPC utilizzata per connettersi all'istanza Cloud SQL tramite l'endpoint Private Service Connect.gcloud dns managed-zones create ZONE_NAME \ --project=PROJECT_ID \ --description="DESCRIPTION" \ --dns-name=DNS_NAME \ --networks=NETWORK_NAME \ --visibility=private
Effettua le seguenti sostituzioni:
- ZONE_NAME: il nome della zona DNS
- PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene la zona
- DESCRIPTION: una descrizione della zona (ad esempio, una zona DNS per l'istanza Cloud SQL)
- DNS_NAME: il nome del suffisso DNS per la zona, ad esempio
REGION_NAME.sql.goog.(dove REGION_NAME è il nome della regione per la zona) - NETWORK_NAME: il nome della rete VPC
Dopo aver creato l'endpoint Private Service Connect, per creare un record DNS nella zona, utilizza il comando
gcloud dns record-sets create:gcloud dns record-sets create DNS_RECORD \ --project=PROJECT_ID \ --type=RRSET_TYPE \ --rrdatas=RR_DATA \ --zone=ZONE_NAME
Effettua le seguenti sostituzioni:
- DNS_RECORD: il nome del record DNS. Questo record è impostato
sul nome DNS recuperato dall'istanza Cloud SQL
in precedenza in questa procedura (ad esempio,
1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.). - RRSET_TYPE: il tipo di record di risorse del set di record DNS.
Se l'indirizzo IP interno che hai prenotato
per l'endpoint Private Service Connect è un indirizzo IPv4, specifica
Aper questo parametro. Altrimenti, se l'indirizzo IP per l'endpoint è un indirizzo IPv6, specificaAAAA. - RR_DATA: l'indirizzo IP allocato per l'endpoint Private Service Connect (ad esempio,
198.51.100.5). Puoi anche inserire più valori, ad esempiorrdata1 rrdata2 rrdata3(ad esempio,
10.1.2.3 10.2.3.4 10.3. 4.5).
- DNS_RECORD: il nome del record DNS. Questo record è impostato
sul nome DNS recuperato dall'istanza Cloud SQL
in precedenza in questa procedura (ad esempio,
REST
- Recupera il nome DNS di un'istanza Cloud SQL.
- PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene l'istanza
- INSTANCE_NAME: il nome dell'istanza
- Crea una zona DNS privata. Questa zona è associata alla rete VPC utilizzata per connettersi all'istanza Cloud SQL tramite l'endpoint Private Service Connect.
- PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene la zona DNS
- ZONE_NAME: il nome della zona
- DESCRIPTION: una descrizione della zona (ad esempio, una zona DNS per l'istanza Cloud SQL)
- DNS_NAME: il nome del suffisso DNS per la zona, ad esempio
REGION_NAME.sql.goog.(dove REGION_NAME è il nome della regione per la zona) - NETWORK_NAME: il nome della rete VPC
- Dopo aver creato l'endpoint Private Service Connect, crea un record DNS nella zona.
- PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene la zona DNS.
- ZONE_NAME: il nome della zona
- DNS_RECORD: il nome del record DNS. Questo record è impostato sul nome DNS recuperato dall'istanza Cloud SQL in precedenza in questa procedura (ad esempio,
1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.). - RRSET_TYPE: il tipo di record di risorse del set di record DNS. Se
l'indirizzo IP interno che hai riservato
per l'endpoint Private Service Connect è IPv4, specifica
Aper questo parametro. Altrimenti, se l'indirizzo IP per l'endpoint è IPv6, specificaAAAA. - TTL: la durata (TTL) del set di record in secondi (ad esempio,
300). - RR_DATA: l'indirizzo IP allocato per l'endpoint Private Service Connect (ad esempio,
198.51.100.5). Puoi anche inserire più valori, ad esempiorrdata1 rrdata2 rrdata3(ad esempio,10.1.2.3 10.2.3.4 10.3.4.5).
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
Metodo HTTP e URL:
GET https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{
...
"dnsName": "INSTANCE_ID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog."
}
Il campo dnsName mostra il nome DNS dell'istanza Cloud SQL. I nomi DNS terminano sempre con un punto (.).
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
Metodo HTTP e URL:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones
Corpo JSON della richiesta:
{
"name": "ZONE_NAME",
"description": "DESCRIPTION",
"dnsName": "DNS_NAME",
"visibility": "private",
"privateVisibilityConfig": {
"kind": "dns#managedZonePrivateVisibilityConfig",
"networks": [
{
"kind": "dns#managedZonePrivateVisibilityConfigNetwork",
"networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME"
}
]
}
}
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{
"name": "ZONE_NAME",
"dnsName": "DNS_NAME",
"description": "DESCRIPTION",
"id": "ID",
"nameServers": [
"ns-gcp-private.googledomains.com."
],
"creationTime": "2024-05-10T17:05:34.607Z",
"visibility": "private",
"privateVisibilityConfig": {
"networks": [
{
"networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME",
"kind": "dns#managedZonePrivateVisibilityConfigNetwork"
}
],
"gkeClusters": [],
"kind": "dns#managedZonePrivateVisibilityConfig"
},
"cloudLoggingConfig": {
"kind": "dns#managedZoneCloudLoggingConfig"
},
"kind": "dns#managedZone"
}
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
Metodo HTTP e URL:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ZONE_NAME
Corpo JSON della richiesta:
{
"deletions": []
"additions": [
{
"name": "DNS_RECORD",
"type": "RRSET_TYPE",
"ttl": TTL,
"rrdatas": [
"RR_DATA"
]
}
]
}
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{
"additions": [
{
"name": "DNS_RECORD",
"type": "RRSET_TYPE",
"ttl": TTL,
"rrdatas": [
"RR_DATA"
],
"signatureRrdatas": [],
"kind": "dns#resourceRecordSet"
}
],
"deletions": [],
"startTime": "2024-05-10T17:29:44.375Z",
"id": "CHANGE_ID",
"status": "pending",
"kind": "dns#change"
}