Cette page explique comment configurer le DNS dans Private Service Connect.
Présentation
Le DNS est la méthode recommandée pour se connecter aux instances sur lesquelles Private Service Connect est activé. Un nom DNS permet à différents réseaux de se connecter à la même instance, où les points de terminaison Private Service Connect de chaque réseau peuvent avoir des adresses IP différentes. De plus, le proxy d'authentification Cloud SQL et les connecteurs de langage nécessitent des noms DNS pour se connecter à ces instances.
Les instances Cloud SQL sur lesquelles Private Service Connect est activé peuvent avoir deux types de noms DNS :
Nom DNS par instance. Cette fonctionnalité est disponible pour les instances de toutes les éditions de Cloud SQL. L'instance principale et chaque instance répliquée ont des noms DNS par instance différents.
Nom DNS d'un point de terminaison d'écriture global. Cette option est disponible pour les instances de l'édition Cloud SQL Enterprise Plus afin de faciliter la reprise après sinistre avancée. Un point de terminaison d'écriture est un nom DNS global qui pointe automatiquement vers l'adresse IP de l'instance principale actuelle. En cas d'opération de basculement ou de commutation d'instance répliquée, ce point de terminaison d'écriture redirige automatiquement les connexions entrantes vers la nouvelle instance principale. En utilisant un point de terminaison d'écriture, vous pouvez éviter d'avoir à modifier la connexion de l'application lorsque vous effectuez une opération de basculement ou de commutation d'instance répliquée pour la récupération après une panne régionale ou un exercice de reprise après sinistre.
Automatisation DNS dans Private Service Connect
Pour créer un nom DNS par instance, vous pouvez utiliser la fonctionnalité d'automatisation DNS Cloud SQL pour configurer les enregistrements et le nom DNS à votre place. Lorsque vous activez l'automatisation DNS, Cloud SQL provisionne et gère automatiquement les enregistrements DNS pour le nom DNS par instance dans vos réseaux VPC consommateurs autorisés.
Si l'automatisation DNS est activée sur une instance Cloud SQL Enterprise Plus, vous pouvez également activer un nom DNS de point de terminaison d'écriture global qui pointe toujours automatiquement vers l'adresse IP de l'instance principale actuelle.
Vous pouvez éventuellement configurer manuellement un enregistrement DNS par instance pour l'instance (consultez Configurer manuellement le DNS), mais nous vous recommandons d'utiliser l'automatisation DNS. La configuration manuelle du DNS est une option obsolète.
Conditions préalables à l'activation de l'automatisation DNS
- Pour utiliser l'automatisation DNS ou un nom DNS de point de terminaison d'écriture global, vous devez activer l'API Cloud DNS.
- L'automatisation DNS ne peut être activée que lorsque Private Service Connect est activé (utilisez le paramètre
--enable-private-service-connect). - L'automatisation DNS ne peut être activée que si au moins une connexion automatique Private Service Connect est spécifiée (utilisez
--psc-auto-connections=network). - Un nom DNS de point de terminaison d'écriture global ne peut être activé que pour une instance Cloud SQL Enterprise Plus dont l'automatisation DNS est activée.
Configuration de l'automatisation DNS
Vous pouvez activer l'automatisation DNS et le nom DNS du point de terminaison d'écriture global lorsque vous créez une instance avec Private Service Connect activé, comme indiqué dans Créer une instance Cloud SQL.
Vous pouvez également activer ou désactiver l'automatisation DNS pour les instances existantes. Dans ce cas, Cloud SQL provisionne ou nettoie automatiquement les enregistrements DNS associés dans les réseaux respectifs.
gcloud
gcloud sql instances patch INSTANCE_NAME \ --enable-psc-auto-dns=DNS_ENABLEMENT \ --enable-psc-write-endpoint-dns=GLOBAL_DNS_ENABLEMENT \
REST
La méthode HTTP et l'URL se présenteraient comme suit :
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instancesLe corps de la requête JSON se présenterait comme suit :
{ "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" } }
Effectuez les remplacements suivants :
- DNS_ENABLEMENT :
trueoufalse, selon que vous souhaitez activer ou désactiver l'automatisation DNS. - GLOBAL_DNS_ENABLEMENT :
trueoufalse, selon que vous souhaitez activer ou désactiver un nom DNS de point de terminaison d'écriture global. Si la valeur esttrue,enable-psc-auto-dnsdoit également êtretrue.
Afficher les noms DNS
Vous pouvez trouver le nom DNS par instance pour une instance et le nom DNS du point de terminaison d'écriture global pour le projet à l'aide de la commande describe.
gcloud
Nom DNS par instance
Pour trouver le nom DNS par instance créé à l'aide de l'automatisation DNS, utilisez la commande
gcloud sql instances describe
comme suit :
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"
Le résultat doit se présenter comme suit (où DNS_NAME correspond au nom DNS par instance de l'instance) :
INSTANCE,CLOUD_SQL_AUTOMATION,DNS_NAME
Le nom DNS se terminera par le nom de la région de l'instance, suivi de .sql-psc-goog, comme ceci :
INSTANCE,CLOUD_SQL_AUTOMATION,d73a167a8c3a.2naantchj3tsc.us-central1.sql-psc.goog.
Pour renvoyer uniquement le nom DNS non décoré, ajoutez | cut -d, -f3 à la fin de la commande.
Nom DNS du point de terminaison d'écriture global
De même, vous pouvez utiliser la commande describe pour trouver le nom DNS du point de terminaison d'écriture global de votre cluster de réplication :
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"
Le résultat se présente comme suit (où GLOBAL_DNS_NAME correspond au nom DNS du point de terminaison d'écriture global pour votre cluster de réplication) :
CLUSTER,CLOUD_SQL_AUTOMATION,GLOBAL_DNS_NAME
Le nom DNS du point de terminaison d'écriture global se termine par .global.sql-psc-goog, comme ceci :
CLUSTER,CLOUD_SQL_AUTOMATION,d73a167a8c3a.2naantchj3tsc.global.sql-psc.goog.
Pour renvoyer uniquement le nom DNS sans décoration, ajoutez | cut -d, -f3 à la fin de la commande.
REST
La méthode HTTP et l'URL se présenteraient comme suit :
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instancesLe nom DNS par instance et le nom DNS du point de terminaison d'écriture global sont renvoyés dans le champ dnsNames de la réponse, comme suit :
{ "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" } ], }
Vous pouvez utiliser le nom DNS du point de terminaison d'écriture global ou le nom DNS par instance pour vous connecter à l'instance. Consultez Se connecter à l'aide d'un enregistrement DNS.
Champs d'état de l'automatisation DNS
Vous pouvez déterminer l'état du DNS pour votre instance et votre cluster de réplication dans ces deux champs de sortie :
instanceAutoDnsStatus: affiche l'état du DNS par instance.writeEndpointAutoDnsStatus: affiche l'état du DNS du point de terminaison d'écriture global.
Ces deux champs peuvent présenter les valeurs suivantes :
AUTO_DNS_STATUS_UNSPECIFIEDAUTO_DNS_OKAUTO_DNS_FAILEDAUTO_DNS_UNKNOWN
Ces champs apparaissent dans le champ de sortie 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" } ]
Résoudre les problèmes d'automatisation DNS
Si l'API Cloud DNS n'est pas activée, si la règle de connexion Private Service Connect est manquante ou si des erreurs de backend se produisent lors de la création d'un enregistrement DNS, l'automatisation DNS peut ne pas créer d'enregistrement DNS par instance ni de nom DNS de point de terminaison d'écriture global.
Si vous rencontrez une situation où l'automatisation DNS n'a pas été correctement provisionnée, vous pouvez utiliser deux options avec l'API update/patch ou la gcloud CLI :
--reconcile-psc-networking(boolean) : lorsque cette option est activée, Cloud SQL tente de restaurer les parties de l'automatisation DNS qui ne fonctionnent pas. Cette option n'entraîne aucun temps d'arrêt.--reconcile-psc-networking-force(boolean) : semblable àreconcile-psc-networking, mais si cette option est définie, Cloud SQL tente de restaurer complètement toute l'automatisation DNS au prix d'un bref temps d'arrêt sur les parties d'automatisation DNS PSC existantes qui fonctionnent. Cela peut aider dans certains cas oùreconcile-psc-networkingne le fait pas.
Attribuer des noms DNS personnalisés
Vous pouvez configurer des noms DNS personnalisés pour vos instances Cloud SQL Private Service Connect. Il vous suffit de créer un enregistrement CNAME avec le nom DNS de l'instance Private Service Connect comme valeur. Par exemple, si vous souhaitez configurer vos applications à l'aide du nom DNS de la base de données sample-db.mycompany.example.com pour faire référence à l'instance de base de données avec le nom DNS Private Service Connect abcdef123456.987654321fedcb.us-central1.sql-psc.goog, vous devez d'abord configurer l'instance avec un nom DNS personnalisé, puis créer un enregistrement DNS CNAME à l'aide du fournisseur DNS :
| NOM | TYPE | Valeur TTL | VALEUR |
|---|---|---|---|
sample-db.mycompany.example.com |
CNAME | 600 | abcdef123456.987654321fedcb.us-central1.sql-psc.goog |
Configurer le DNS manuellement
Nous vous recommandons d'utiliser l'automatisation DNS, car la configuration DNS manuelle est une option obsolète. Vous pouvez également configurer manuellement un enregistrement DNS par instance pour l'instance. Un nom DNS permet d'utiliser le proxy d'authentification ou les connecteurs de langage de manière cohérente pour se connecter à partir de différents réseaux. La réponse de l'API de recherche d'instance fournit un nom DNS suggéré que vous pouvez utiliser pour créer l'enregistrement DNS dans une zone DNS privée du réseau VPC correspondant.
gcloud
Pour afficher des informations récapitulatives sur une instance Cloud SQL, y compris son nom DNS, utilisez la commande
gcloud sql instances describe:gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID
Effectuez les remplacements suivants :
- INSTANCE_NAME : nom de l'instance Cloud SQL
- PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant l'instance
Dans la réponse, vérifiez que le nom DNS apparaît. Ce nom a le format suivant :
INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.. Exemple :1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog..Si vous souhaitez utiliser un nom DNS personnalisé pour vous connecter à une instance Cloud SQL au lieu d'utiliser le nom DNS prédéfini dans cette section, configurez le paramètre de nom alternatif du sujet (SAN) personnalisé lors de la création de l'instance. Le nom DNS personnalisé que vous insérez dans le paramètre SAN personnalisé est ajouté au champ SAN du certificat de serveur de l'instance. Cela vous permet d'utiliser le nom DNS personnalisé avec la validation du nom d'hôte de manière sécurisée.
Pour en savoir plus sur la configuration du paramètre SAN personnalisé, consultez Créer des instances.
-
Pour créer une zone DNS privée, utilisez la commande
gcloud dns managed-zones create. Cette zone est associée au réseau VPC utilisé pour se connecter à l'instance Cloud SQL via le point de terminaison Private Service Connect.gcloud dns managed-zones create ZONE_NAME \ --project=PROJECT_ID \ --description="DESCRIPTION" \ --dns-name=DNS_NAME \ --networks=NETWORK_NAME \ --visibility=private
Effectuez les remplacements suivants :
- ZONE_NAME : nom de la zone DNS
- PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant la zone.
- DESCRIPTION : description de la zone (par exemple, une zone DNS pour l'instance Cloud SQL)
- DNS_NAME : nom du suffixe DNS pour la zone, tel que
REGION_NAME.sql.goog.(où REGION_NAME correspond au nom de la région pour la zone). - NETWORK_NAME : nom du réseau VPC.
Après avoir créé le point de terminaison Private Service Connect, utilisez la commande
gcloud dns record-sets createpour créer un enregistrement DNS dans la zone :gcloud dns record-sets create DNS_RECORD \ --project=PROJECT_ID \ --type=RRSET_TYPE \ --rrdatas=RR_DATA \ --zone=ZONE_NAME
Effectuez les remplacements suivants :
- DNS_RECORD : nom de l'enregistrement DNS. Cet enregistrement est défini sur le nom DNS que vous avez récupéré à partir de l'instance Cloud SQL précédemment dans cette procédure (par exemple,
1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.). - RRSET_TYPE : type d'enregistrement de ressource du jeu d'enregistrements DNS.
Si l'adresse IP interne que vous avez réservée pour le point de terminaison Private Service Connect est une adresse IPv4, spécifiez
Apour ce paramètre. Sinon, si l'adresse IP du point de terminaison est une adresse IPv6, spécifiezAAAA. - RR_DATA : adresse IP allouée au point de terminaison Private Service Connect (par exemple,
198.51.100.5). Vous pouvez également saisir plusieurs valeurs, telles querrdata1 rrdata2 rrdata3(par exemple,
10.1.2.3 10.2.3.4 10.3. 4.5).
- DNS_RECORD : nom de l'enregistrement DNS. Cet enregistrement est défini sur le nom DNS que vous avez récupéré à partir de l'instance Cloud SQL précédemment dans cette procédure (par exemple,
REST
- Procurez-vous le nom DNS d'une instance Cloud SQL.
- PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant l'instance.
- INSTANCE_NAME : nom de l'instance
- Créez une zone DNS privée. Cette zone est associée au réseau VPC utilisé pour se connecter à l'instance Cloud SQL via le point de terminaison Private Service Connect.
- PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant la zone DNS.
- ZONE_NAME : nom de la zone.
- DESCRIPTION : une description de la zone (par exemple, une zone DNS pour l'instance Cloud SQL).
- DNS_NAME : nom du suffixe DNS pour la zone, tel que
REGION_NAME.sql.goog.(où REGION_NAME correspond au nom de la région pour la zone). - NETWORK_NAME : nom du réseau VPC.
- Après avoir créé le point de terminaison Private Service Connect, créez un enregistrement DNS dans la zone.
- PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant la zone DNS.
- ZONE_NAME : nom de la zone.
- DNS_RECORD : nom de l'enregistrement DNS. Cet enregistrement est défini sur le nom DNS que vous avez récupéré à partir de l'instance Cloud SQL précédemment dans cette procédure (par exemple,
1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.). - RRSET_TYPE : type d'enregistrement de ressource du jeu d'enregistrements DNS. Si l'adresse IP interne que vous avez réservée pour le point de terminaison Private Service Connect est une adresse IPv4, spécifiez
Apour ce paramètre. Sinon, si l'adresse IP du point de terminaison est IPv6, spécifiezAAAA. - TTL : valeur TTL (Time To Live) du jeu d'enregistrements exprimée en nombre de secondes (par exemple,
300). - RR_DATA : adresse IP allouée au point de terminaison Private Service Connect (par exemple,
198.51.100.5). Vous pouvez également saisir plusieurs valeurs, telles querrdata1 rrdata2 rrdata3(par exemple10.1.2.3 10.2.3.4 10.3.4.5).
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
Méthode HTTP et URL :
GET https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{
...
"dnsName": "INSTANCE_ID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog."
}
Le champ dnsName affiche le nom DNS de l'instance Cloud SQL. Les noms DNS se terminent toujours par un point (.).
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
Méthode HTTP et URL :
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones
Corps JSON de la requête :
{
"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"
}
]
}
}
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{
"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"
}
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
Méthode HTTP et URL :
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ZONE_NAME
Corps JSON de la requête :
{
"deletions": []
"additions": [
{
"name": "DNS_RECORD",
"type": "RRSET_TYPE",
"ttl": TTL,
"rrdatas": [
"RR_DATA"
]
}
]
}
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{
"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"
}