Auf dieser Seite wird beschrieben, wie Sie DNS in Private Service Connect konfigurieren.
Übersicht
DNS ist die empfohlene Methode, um eine Verbindung zu Instanzen mit aktiviertem Private Service Connect herzustellen. Über einen DNS-Namen können verschiedene Netzwerke eine Verbindung zur selben Instanz herstellen, wobei Private Service Connect-Endpunkte in jedem Netzwerk unterschiedliche IP-Adressen haben können. Außerdem benötigen der Cloud SQL Auth-Proxy und die Language Connectors DNS-Namen, um eine Verbindung zu diesen Instanzen herzustellen.
Cloud SQL-Instanzen mit aktiviertem Private Service Connect können zwei Arten von DNS-Namen haben:
DNS-Name pro Instanz Diese Funktion ist für Instanzen in allen Cloud SQL-Editionen verfügbar. Die primäre Instanz und jede Replikatinstanz haben unterschiedliche instanzspezifische DNS-Namen.
Ein globaler DNS-Name des Schreibendpunkts. Diese Option ist für Instanzen in der Cloud SQL Enterprise Plus-Version verfügbar, um die erweiterte Notfallwiederherstellung zu unterstützen. Ein Schreibendpunkt ist ein globaler DNS-Name, der automatisch in die IP-Adresse der aktuellen primären Instanz aufgelöst wird. Bei einem Replikat-Failover oder ‑Switchover leitet dieser Schreibendpunkt eingehende Verbindungen automatisch an die neue primäre Instanz weiter. Wenn Sie einen Schreibendpunkt verwenden, müssen Sie keine Änderungen an der Anwendungsverbindung vornehmen, wenn Sie einen Replikat-Failover- oder Switchover-Vorgang zur Wiederherstellung nach einem regionalen Ausfall oder eine Notfallwiederherstellungsübung durchführen.
DNS-Automatisierung in Private Service Connect
Wenn Sie einen DNS-Namen pro Instanz erstellen möchten, können Sie die Cloud SQL-DNS-Automatisierungsfunktion verwenden, um die DNS-Einträge und den Namen für Sie einzurichten. Wenn Sie die DNS-Automatisierung aktivieren, werden DNS-Einträge für den DNS-Namen pro Instanz in Ihren autorisierten VPC-Netzwerken automatisch von Cloud SQL bereitgestellt und verwaltet.
Wenn die DNS-Automatisierung für eine Cloud SQL Enterprise Plus-Instanz aktiviert ist, können Sie auch einen globalen DNS-Namen für den Schreibendpunkt aktivieren, der immer automatisch in die IP-Adresse der aktuellen primären Instanz aufgelöst wird.
Optional können Sie einen instanzspezifischen DNS-Eintrag für die Instanz manuell konfigurieren (siehe DNS manuell konfigurieren). Wir empfehlen jedoch, die DNS-Automatisierung zu verwenden. Die manuelle DNS-Konfiguration ist eine Legacy-Option.
Voraussetzungen für die Aktivierung der DNS-Automatisierung
- Wenn Sie die DNS-Automatisierung oder einen globalen DNS-Namen für den Schreibendpunkt verwenden möchten, müssen Sie die Cloud DNS API aktivieren.
- Die DNS-Automatisierung kann nur aktiviert werden, wenn Private Service Connect aktiviert ist (verwenden Sie den Parameter
--enable-private-service-connect). - Die DNS-Automatisierung kann nur aktiviert werden, wenn mindestens eine automatische Private Service Connect-Verbindung angegeben ist (verwenden Sie
--psc-auto-connections=network). - Ein globaler DNS-Name des Schreibendpunkts kann nur für eine Cloud SQL Enterprise Plus-Instanz aktiviert werden, für die die DNS-Automatisierung aktiviert ist.
DNS-Automatisierung konfigurieren
Sie können die DNS-Automatisierung und den globalen DNS-Namen des Schreibendpunkts aktivieren, wenn Sie eine neue Instanz mit aktiviertem Private Service Connect erstellen, wie unter Cloud SQL-Instanz erstellen beschrieben.
Sie können die DNS-Automatisierung auch für vorhandene Instanzen aktivieren oder deaktivieren. In diesem Fall stellt Cloud SQL die zugehörigen DNS-Einträge in den jeweiligen Netzwerken automatisch bereit oder bereinigt sie.
gcloud
gcloud sql instances patch INSTANCE_NAME \ --enable-psc-auto-dns=DNS_ENABLEMENT \ --enable-psc-write-endpoint-dns=GLOBAL_DNS_ENABLEMENT \
REST
Die HTTP-Methode und URL sehen so aus:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instancesDer JSON-Anfragetext würde so aussehen:
{ "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" } }
Ersetzen Sie die folgenden Werte:
- DNS_ENABLEMENT:
trueoderfalse, je nachdem, ob Sie die DNS-Automatisierung aktivieren oder deaktivieren möchten. - GLOBAL_DNS_ENABLEMENT:
trueoderfalse, je nachdem, ob Sie einen globalen DNS-Namen für den Schreibendpunkt aktivieren oder deaktivieren möchten. Fallstrue, mussenable-psc-auto-dnsebenfallstruesein.
DNS-Namen ansehen
Sie können sowohl den DNS-Namen pro Instanz für eine Instanz als auch den globalen DNS-Namen des Schreibendpunkts für das Projekt mit dem Befehl describe abrufen.
gcloud
DNS-Name pro Instanz
So finden Sie den DNS-Namen pro Instanz, der mit der DNS-Automatisierung erstellt wurde: Verwenden Sie den Befehl gcloud sql instances describe:
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"
Die Ausgabe sieht so aus (wobei DNS_NAME der DNS-Name der Instanz ist):
INSTANCE,CLOUD_SQL_AUTOMATION,DNS_NAME
Der DNS-Name endet mit dem Namen der Region der Instanz, gefolgt von .sql-psc-goog, z. B.
INSTANCE,CLOUD_SQL_AUTOMATION,d73a167a8c3a.2naantchj3tsc.us-central1.sql-psc.goog.
Wenn Sie nur den unformatierten DNS-Namen zurückgeben möchten, fügen Sie | cut -d, -f3 am Ende des Befehls hinzu.
Der globale DNS-Name des Schreibendpunkts
Ebenso können Sie den Befehl describe verwenden, um den globalen DNS-Namen des Schreibendpunkts für Ihren Replikationscluster zu finden:
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"
Die Ausgabe sieht so aus (wobei GLOBAL_DNS_NAME der globale DNS-Name des Schreibendpunkts für Ihren Replikationscluster ist):
CLUSTER,CLOUD_SQL_AUTOMATION,GLOBAL_DNS_NAME
Der DNS-Name des globalen Schreibendpunkts endet mit .global.sql-psc-goog, z. B.
CLUSTER,CLOUD_SQL_AUTOMATION,d73a167a8c3a.2naantchj3tsc.global.sql-psc.goog.
Wenn Sie nur den nicht dekorierten DNS-Namen zurückgeben möchten, fügen Sie | cut -d, -f3 am Ende des Befehls hinzu.
REST
Die HTTP-Methode und URL sehen so aus:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instancesDer DNS-Name der einzelnen Instanzen und der globale DNS-Name des Schreibendpunkts werden im Feld dnsNames der Antwort zurückgegeben, wie hier:
{ "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" } ], }
Sie können den globalen DNS-Namen des Schreibendpunkts oder den DNS-Namen der Instanz verwenden, um eine Verbindung zur Instanz herzustellen. Weitere Informationen finden Sie unter Verbindung über einen DNS-Eintrag herstellen.
DNS-Automatisierungsstatusfelder
In diesen beiden Ausgabefeldern können Sie den Status von DNS für Ihre Instanz und Ihren Replikationscluster ermitteln:
instanceAutoDnsStatus: Zeigt den Status von DNS pro Instanz an.writeEndpointAutoDnsStatus: Zeigt den Status des globalen DNS des Schreibendpunkts an.
Beide Felder können die folgenden Werte haben:
AUTO_DNS_STATUS_UNSPECIFIEDAUTO_DNS_OKAUTO_DNS_FAILEDAUTO_DNS_UNKNOWN
Diese Felder werden im Ausgabefeld pscAutoConnections angezeigt:
"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" } ]
Fehlerbehebung bei der DNS-Automatisierung
Wenn die Cloud DNS API nicht aktiviert ist, die Private Service Connect-Verbindungsrichtlinie fehlt oder Backend-Fehler beim Erstellen von DNS-Einträgen auftreten, kann die DNS-Automatisierung möglicherweise keinen DNS-Eintrag pro Instanz oder einen globalen DNS-Namen für den Schreibendpunkt erstellen.
Wenn Sie auf eine Situation stoßen, in der die DNS-Automatisierung nicht richtig bereitgestellt wurde, können Sie zwei Flags mit der update/patch API oder der gcloud CLI verwenden:
--reconcile-psc-networking(boolean): Wenn diese Option festgelegt ist, versucht Cloud SQL, alle Teile der DNS-Automatisierung wiederherzustellen, die nicht funktionieren. Dieses Flag führt nicht zu Ausfallzeiten.--reconcile-psc-networking-force(boolean): Ähnlich wiereconcile-psc-networking, aber wenn diese Option festgelegt ist, versucht Cloud SQL, die gesamte DNS-Automatisierung wiederherzustellen. Dies kann zu kurzen Ausfallzeiten bei vorhandenen PSC-DNS-Automatisierungsteilen führen, die funktionieren. Das kann in einigen Fällen helfen, in denenreconcile-psc-networkingnicht weiterhilft.
Benutzerdefinierte DNS-Namen zuweisen
Sie können benutzerdefinierte DNS-Namen für Ihre Private Service Connect-Cloud SQL-Instanzen konfigurieren. Erstellen Sie einfach einen CNAME-Eintrag mit dem DNS-Namen der Private Service Connect-Instanz als Wert. Wenn Sie beispielsweise Ihre Anwendungen mit dem Datenbank-DNS-Namen sample-db.mycompany.example.com konfigurieren möchten, um auf die Datenbankinstanz mit dem Private Service Connect-DNS-Namen abcdef123456.987654321fedcb.us-central1.sql-psc.goog zu verweisen, müssen Sie zuerst die Instanz mit einem benutzerdefinierten DNS-Namen konfigurieren und dann einen DNS-CNAME-Eintrag mit dem DNS-Anbieter erstellen:
| NAME | TYP | TTL | WERT |
|---|---|---|---|
sample-db.mycompany.example.com |
CNAME | 600 | abcdef123456.987654321fedcb.us-central1.sql-psc.goog |
DNS manuell konfigurieren
Wir empfehlen die DNS-Automatisierung, da die manuelle DNS-Konfiguration eine Legacy-Option ist. Optional können Sie einen instanzspezifischen DNS-Eintrag für die Instanz manuell konfigurieren. Ein DNS-Name bietet eine konsistente Methode zur Verwendung des Auth-Proxys oder der Sprachconnectors, um eine Verbindung aus verschiedenen Netzwerken herzustellen. Die API-Antwort für die Instanzsuche enthält einen vorgeschlagenen DNS-Namen, den Sie zum Erstellen des DNS-Eintrags in einer privaten DNS-Zone im entsprechenden VPC-Netzwerk verwenden können.
gcloud
Verwenden Sie den Befehl
gcloud sql instances describe, um zusammenfassende Informationen zu einer Cloud SQL-Instanz einschließlich des DNS-Namens der Instanz aufzurufen:gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID
Ersetzen Sie die folgenden Werte:
- INSTANCE_NAME: der Name der Cloud SQL-Instanz
- PROJECT_ID: die ID oder Projektnummer des Google Cloud -Projekts, das die Instanz enthält
Prüfen Sie in der Antwort, ob der DNS-Name angezeigt wird. Dieser Name hat das folgende Muster:
INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.. Beispiel:1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.Wenn Sie zum Herstellen einer Verbindung zu einer Cloud SQL-Instanz einen benutzerdefinierten DNS-Namen anstelle des vordefinierten DNS-Namens in diesem Abschnitt verwenden möchten, konfigurieren Sie beim Erstellen der Instanz die benutzerdefinierte Einstellung für den alternativen Betreffnamen (Subject Alternative Name, SAN). Der benutzerdefinierte DNS-Name, den Sie in die benutzerdefinierte SAN-Einstellung einfügen, wird dem SAN-Feld des Serverzertifikats der Instanz hinzugefügt. So können Sie den benutzerdefinierten DNS-Namen sicher mit der Hostnamenvalidierung verwenden.
Weitere Informationen zum Konfigurieren der benutzerdefinierten SAN-Einstellung finden Sie unter Instanzen erstellen.
-
Verwenden Sie zum Erstellen einer privaten DNS-Zone den Befehl
gcloud dns managed-zones create. Diese Zone ist dem VPC-Netzwerk zugeordnet, das für die Verbindung mit der Cloud SQL-Instanz über den Private Service Connect-Endpunkt verwendet wird.gcloud dns managed-zones create ZONE_NAME \ --project=PROJECT_ID \ --description="DESCRIPTION" \ --dns-name=DNS_NAME \ --networks=NETWORK_NAME \ --visibility=private
Ersetzen Sie die folgenden Werte:
- ZONE_NAME: der Name der DNS-Zone
- PROJECT_ID: die ID oder Projektnummer des Google Cloud -Projekts, das die Zone enthält
- DESCRIPTION durch eine Beschreibung der Zone (z. B. eine DNS-Zone für die Cloud SQL-Instanz)
- DNS_NAME: der Name des DNS-Suffixs für die Zone, z. B.
REGION_NAME.sql.goog.(wobei REGION_NAME der Name der Region für die Zone ist) - NETWORK_NAME: Der Name des VPC-Netzwerks
Nachdem Sie den Private Service Connect-Endpunkt erstellt haben, verwenden Sie den Befehl
gcloud dns record-sets create, um einen DNS-Eintrag in der Zone zu erstellen:gcloud dns record-sets create DNS_RECORD \ --project=PROJECT_ID \ --type=RRSET_TYPE \ --rrdatas=RR_DATA \ --zone=ZONE_NAME
Ersetzen Sie die folgenden Werte:
- DNS_RECORD: der Name des DNS-Eintrags. Dieser Eintrag wird auf den DNS-Namen festgelegt,den Sie zuvor von der Cloud SQL-Instanz abgerufen haben (z. B.
1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.). - RRSET_TYPE: der Ressourceneintragstyp des DNS-Eintragssatzes.
Wenn die interne IP-Adresse, die Sie für den Private Service Connect-Endpunkt reserviert haben, eine IPv4-Adresse ist, geben Sie für diesen Parameter
Aan. Andernfalls geben SieAAAAan, wenn die IP-Adresse für den Endpunkt eine IPv6-Adresse ist. - RR_DATA: die IP-Adresse, die dem Private Service Connect-Endpunkt zugewiesen ist (z. B.
198.51.100.5). Sie können auch mehrere Werte eingeben,z. B.rrdata1 rrdata2 rrdata3(z. B.
10.1.2.3 10.2.3.4 10.3. 4.5).
- DNS_RECORD: der Name des DNS-Eintrags. Dieser Eintrag wird auf den DNS-Namen festgelegt,den Sie zuvor von der Cloud SQL-Instanz abgerufen haben (z. B.
REST
- Rufen Sie den DNS-Namen einer Cloud SQL-Instanz ab.
- PROJECT_ID: die ID oder Projektnummer des Google Cloud -Projekts, das die Instanz enthält
- INSTANCE_NAME den Namen der Instanz
- Erstellen Sie eine private DNS-Zone: Diese Zone ist dem VPC-Netzwerk zugeordnet, das für die Verbindung mit der Cloud SQL-Instanz über den Private Service Connect-Endpunkt verwendet wird.
- PROJECT_ID: die ID oder Projektnummer des Google Cloud -Projekts, das die DNS-Zone enthält
- ZONE_NAME: der Name der Zone.
- DESCRIPTION durch eine Beschreibung der Zone (z. B. eine DNS-Zone für die Cloud SQL-Instanz)
- DNS_NAME: der Name des DNS-Suffixs für die Zone, z. B.
REGION_NAME.sql.goog.(wobei REGION_NAME der Name der Region für die Zone ist) - NETWORK_NAME: Der Name des VPC-Netzwerks
- Nachdem Sie den Private Service Connect-Endpunkt erstellt haben, erstellen Sie in der Zone einen DNS-Eintrag.
- PROJECT_ID: die ID oder Projektnummer des Google Cloud -Projekts, das die DNS-Zone enthält.
- ZONE_NAME: der Name der Zone.
- DNS_RECORD: der Name des DNS-Eintrags. Dieser Eintrag wird auf den DNS-Namen festgelegt, den Sie zuvor von der Cloud SQL-Instanz abgerufen haben (z. B.
1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.). - RRSET_TYPE: der Ressourceneintragstyp des DNS-Eintragssatzes. Wenn die interne IP-Adresse, die Sie für den Private Service Connect-Endpunkt reserviert haben, IPv4 ist, geben Sie für diesen Parameter
Aan. Andernfalls, wenn die IP-Adresse für den Endpunkt IPv6 ist, geben SieAAAAan. - TTL ist die Gültigkeitsdauer (TTL) für den Datensatz in Sekunden, z. B.
300 - RR_DATAdie IP-Adresse, die dem Private Service Connect-Endpunkt zugewiesen ist (z. B.
198.51.100.5) Sie können auch mehrere Werte eingeben, z. B.rrdata1 rrdata2 rrdata3(Beispiel:10.1.2.3 10.2.3.4 10.3.4.5)
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
HTTP-Methode und URL:
GET https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten in etwa folgende JSON-Antwort erhalten:
{
...
"dnsName": "INSTANCE_ID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog."
}
Im Feld dnsName wird der DNS-Name der Cloud SQL-Instanz angezeigt. DNS-Namen enden immer mit einem Punkt (.).
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
HTTP-Methode und URL:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones
JSON-Text anfordern:
{
"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"
}
]
}
}
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{
"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"
}
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
HTTP-Methode und URL:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ZONE_NAME
JSON-Text anfordern:
{
"deletions": []
"additions": [
{
"name": "DNS_RECORD",
"type": "RRSET_TYPE",
"ttl": TTL,
"rrdatas": [
"RR_DATA"
]
}
]
}
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{
"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"
}