Mengonfigurasi DNS di Private Service Connect

Halaman ini menjelaskan cara mengonfigurasi DNS di Private Service Connect.

Ringkasan

DNS adalah cara yang direkomendasikan untuk terhubung ke instance yang telah mengaktifkan Private Service Connect. Nama DNS memungkinkan jaringan yang berbeda terhubung ke instance yang sama, dengan endpoint Private Service Connect di setiap jaringan mungkin memiliki alamat IP yang berbeda. Selain itu, Proxy Auth Cloud SQL dan konektor bahasa memerlukan nama DNS untuk terhubung ke instance ini.

Instance Cloud SQL dengan Private Service Connect yang diaktifkan dapat memiliki dua jenis nama DNS:

  • Nama DNS per instance. Fitur ini tersedia untuk instance di semua edisi Cloud SQL. Instance utama dan setiap instance replika memiliki nama DNS per instance yang berbeda.

  • Nama DNS endpoint tulis global. Fitur ini tersedia untuk instance di edisi Cloud SQL Enterprise Plus, untuk membantu pemulihan dari bencana (DR) tingkat lanjut. Endpoint tulis adalah nama DNS global yang otomatis di-resolve ke alamat IP instance utama saat ini. Dalam kasus operasi failover atau pengalihan replika, endpoint tulis ini akan mengalihkan koneksi masuk ke instance utama baru secara otomatis. Dengan menggunakan endpoint tulis, Anda dapat menghindari perubahan koneksi aplikasi saat melakukan operasi failover atau pengalihan replika untuk pemulihan dari gangguan wilayah atau latihan pemulihan dari bencana.

Otomatisasi DNS di Private Service Connect

Untuk membuat nama DNS per instance, Anda dapat menggunakan fitur otomatisasi DNS Cloud SQL untuk menyiapkan data dan nama DNS bagi Anda. Saat Anda mengaktifkan otomatisasi DNS, Cloud SQL akan otomatis menyediakan dan mengelola data DNS untuk nama DNS per instance di jaringan VPC konsumen yang diberi otorisasi.

Dengan mengaktifkan otomatisasi DNS di instance edisi Cloud SQL Enterprise Plus, Anda juga dapat mengaktifkan nama DNS endpoint tulis global yang selalu otomatis ditetapkan ke alamat IP instance utama saat ini.

Atau, Anda dapat mengonfigurasi data DNS per instance secara manual untuk instance (lihat Mengonfigurasi DNS secara manual), tetapi sebaiknya gunakan otomatisasi DNS. Konfigurasi DNS manual adalah opsi lama.

Prasyarat untuk mengaktifkan otomatisasi DNS

  • Untuk menggunakan otomatisasi DNS atau nama DNS endpoint tulis global, Anda harus mengaktifkan Cloud DNS API.
  • Otomatisasi DNS hanya dapat diaktifkan jika Private Service Connect diaktifkan (gunakan parameter --enable-private-service-connect).
  • Otomatisasi DNS hanya dapat diaktifkan jika ada minimal satu koneksi otomatis Private Service Connect yang ditentukan (gunakan --psc-auto-connections=network).
  • Nama DNS endpoint tulis global hanya dapat diaktifkan untuk instance edisi Cloud SQL Enterprise Plus yang mengaktifkan otomatisasi DNS.

Konfigurasi otomatisasi DNS

Anda dapat mengaktifkan otomatisasi DNS dan nama DNS endpoint tulis global saat membuat instance baru, dengan Private Service Connect diaktifkan, seperti yang ditunjukkan di Membuat instance Cloud SQL.

Anda juga dapat mengaktifkan atau menonaktifkan otomatisasi DNS untuk instance yang ada. Saat Anda melakukannya, Cloud SQL akan otomatis menyediakan atau membersihkan data DNS terkait di jaringan masing-masing.

gcloud

gcloud sql instances patch INSTANCE_NAME \
  --enable-psc-auto-dns=DNS_ENABLEMENT \
  --enable-psc-write-endpoint-dns=GLOBAL_DNS_ENABLEMENT \

REST

Metode HTTP dan URL: akan terlihat seperti ini:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

Isi permintaan JSON akan berbentuk seperti ini:

{
  "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"
  }
}

Lakukan penggantian berikut:

  • DNS_ENABLEMENT: true atau false bergantung pada apakah Anda ingin mengaktifkan atau menonaktifkan otomatisasi DNS.
  • GLOBAL_DNS_ENABLEMENT: true atau false bergantung pada apakah Anda ingin mengaktifkan atau menonaktifkan nama DNS endpoint tulis global. Jika true, maka enable-psc-auto-dns juga harus true.

Melihat nama DNS

Anda dapat menemukan nama DNS per instance untuk instance dan nama DNS endpoint tulis global untuk project menggunakan perintah describe.

gcloud

Nama DNS per instance

Untuk menemukan nama DNS per-instance yang dibuat menggunakan otomatisasi DNS, gunakan perintah gcloud sql instances describe seperti ini:

    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"
  

Outputnya akan terlihat seperti ini (dengan DNS_NAME adalah nama DNS per-instance untuk instance):

INSTANCE,CLOUD_SQL_AUTOMATION,DNS_NAME

Nama DNS akan diakhiri dengan nama region instance, diikuti dengan .sql-psc-goog, seperti ini:
INSTANCE,CLOUD_SQL_AUTOMATION,d73a167a8c3a.2naantchj3tsc.us-central1.sql-psc.goog.
Untuk menampilkan hanya nama DNS yang tidak dihiasi, tambahkan | cut -d, -f3 di akhir perintah.

Nama DNS endpoint tulis global

Demikian pula, Anda dapat menggunakan perintah describe untuk menemukan nama DNS endpoint tulis global untuk cluster replikasi Anda:

    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"
  

Outputnya akan terlihat seperti ini (dengan GLOBAL_DNS_NAME adalah nama DNS endpoint tulis global untuk cluster replikasi Anda):

CLUSTER,CLOUD_SQL_AUTOMATION,GLOBAL_DNS_NAME

Nama DNS endpoint tulis global diakhiri dengan .global.sql-psc-goog, seperti ini:
CLUSTER,CLOUD_SQL_AUTOMATION,d73a167a8c3a.2naantchj3tsc.global.sql-psc.goog. Untuk menampilkan hanya nama DNS yang tidak dihiasi, tambahkan | cut -d, -f3 di akhir perintah.

REST

Metode HTTP dan URL: akan terlihat seperti ini:

GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

Nama DNS per instance dan nama DNS endpoint tulis global akan ditampilkan di kolom dnsNames respons, seperti ini:

{
  "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"
    }
  ],
}

Anda dapat menggunakan nama DNS endpoint tulis global atau nama DNS per-instance untuk terhubung ke instance. Lihat Menghubungkan menggunakan data DNS.

Kolom status otomatisasi DNS

Anda dapat menentukan status DNS untuk instance dan cluster replikasi di dua kolom output ini:

  • instanceAutoDnsStatus: Menampilkan status DNS per instance.
  • writeEndpointAutoDnsStatus: Menampilkan status DNS endpoint tulis global.

Kedua kolom dapat memiliki nilai berikut:

  • AUTO_DNS_STATUS_UNSPECIFIED
  • AUTO_DNS_OK
  • AUTO_DNS_FAILED
  • AUTO_DNS_UNKNOWN

Kolom ini muncul dalam kolom 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"
      }
    ]

Memecahkan masalah otomatisasi DNS

Jika Cloud DNS API tidak diaktifkan, atau kebijakan koneksi Private Service Connect tidak ada, atau jika ada error backend selama pembuatan data DNS, otomatisasi DNS mungkin gagal membuat data DNS per instance atau nama DNS endpoint tulis global.

Ada dua flag yang dapat Anda gunakan dengan update/patch API atau gcloud CLI jika Anda mengalami situasi saat otomatisasi DNS belum disediakan dengan benar:

  • --reconcile-psc-networking (boolean): Jika disetel, Cloud SQL akan mencoba memulihkan bagian otomatisasi DNS yang tidak berfungsi. Flag ini tidak menyebabkan periode nonaktif.
  • --reconcile-psc-networking-force (boolean): Mirip dengan reconcile-psc-networking, tetapi jika disetel, Cloud SQL akan mencoba memulihkan semua otomatisasi DNS sepenuhnya dengan biaya waktu henti singkat pada bagian otomatisasi DNS PSC yang ada dan berfungsi. Hal ini dapat membantu dalam beberapa kasus saat reconcile-psc-networking tidak dapat membantu.

Menetapkan nama DNS kustom

Anda dapat mengonfigurasi nama DNS kustom untuk instance Cloud SQL Private Service Connect. Cukup buat data CNAME dengan nama DNS instance Private Service Connect sebagai nilainya. Misalnya, jika Anda ingin mengonfigurasi aplikasi menggunakan nama DNS database sample-db.mycompany.example.com untuk merujuk ke instance database dengan nama DNS Private Service Connect abcdef123456.987654321fedcb.us-central1.sql-psc.goog, Anda harus mengonfigurasi instance dengan nama DNS kustom terlebih dahulu, lalu membuat data DNS CNAME menggunakan penyedia DNS:

NAMA JENIS TTL NILAI
sample-db.mycompany.example.com CNAME 600 abcdef123456.987654321fedcb.us-central1.sql-psc.goog

Mengonfigurasi DNS secara manual

Sebaiknya gunakan otomatisasi DNS, karena konfigurasi DNS manual adalah opsi lama. Secara opsional, Anda dapat mengonfigurasi data DNS per instance secara manual untuk instance. Nama DNS memberikan cara yang konsisten untuk menggunakan proxy auth atau konektor bahasa untuk terhubung dari berbagai jaringan. Respons API pencarian instance memberikan nama DNS yang disarankan yang dapat Anda gunakan untuk membuat data DNS di zona DNS pribadi di jaringan VPC yang sesuai.

gcloud

  1. Untuk melihat informasi ringkasan tentang instance Cloud SQL, termasuk nama DNS instance tersebut, gunakan perintah gcloud sql instances describe:

            gcloud sql instances describe INSTANCE_NAME \
              --project=PROJECT_ID
          

    Lakukan penggantian berikut:

    • INSTANCE_NAME: nama instance Cloud SQL
    • PROJECT_ID: ID atau nomor project dari project Google Cloud yang berisi instance

    Dalam respons, pastikan nama DNS muncul. Nama ini memiliki pola berikut: INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.. Contoh: 1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog..

    Jika Anda ingin menggunakan nama DNS kustom untuk terhubung ke instance Cloud SQL, bukan menggunakan nama DNS yang telah ditentukan sebelumnya di bagian ini, konfigurasikan setelan nama alternatif subjek (SAN) kustom saat membuat instance. Nama DNS kustom yang Anda masukkan ke dalam setelan SAN kustom ditambahkan ke kolom SAN sertifikat server instance. Dengan begitu, Anda dapat menggunakan nama DNS kustom dengan validasi nama host secara aman.

    Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi setelan SAN kustom, lihat Membuat instance.

  2. Untuk membuat zona DNS pribadi, gunakan perintah gcloud dns managed-zones create. Zona ini dikaitkan dengan jaringan VPC yang digunakan untuk terhubung ke instance Cloud SQL melalui 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
          

    Lakukan penggantian berikut:

    • ZONE_NAME: nama zona DNS
    • PROJECT_ID: ID atau nomor project dari project Google Cloud yang berisi zona
    • DESCRIPTION: deskripsi zona (misalnya, zona DNS untuk instance Cloud SQL)
    • DNS_NAME: nama akhiran DNS untuk zona, seperti REGION_NAME.sql.goog. (dengan REGION_NAME adalah nama region untuk zona)
    • NETWORK_NAME: nama jaringan VPC
  3. Setelah Anda membuat endpoint Private Service Connect, untuk membuat data DNS di zona, gunakan perintah gcloud dns record-sets create:

       gcloud dns record-sets create DNS_RECORD \
         --project=PROJECT_ID \
         --type=RRSET_TYPE \
         --rrdatas=RR_DATA \
         --zone=ZONE_NAME
          

    Lakukan penggantian berikut:

    • DNS_RECORD: nama catatan DNS. Catatan ini ditetapkan ke nama DNS yang Anda ambil dari instance Cloud SQL sebelumnya dalam prosedur ini (misalnya,
      1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.).
    • RRSET_TYPE: jenis data resource dari set data DNS. Jika alamat IP internal yang Anda cadangkan untuk endpoint Private Service Connect adalah alamat IPv4, tentukan A untuk parameter ini. Jika tidak, jika alamat IP untuk endpoint adalah alamat IPv6, tentukan AAAA.
    • RR_DATA: alamat IP yang dialokasikan untuk endpoint Private Service Connect (misalnya, 198.51.100.5). Anda juga dapat memasukkan beberapa nilai seperti rrdata1 rrdata2 rrdata3 (misalnya,
      10.1.2.3 10.2.3.4 10.3. 4.5).

REST

  1. Dapatkan nama DNS instance Cloud SQL.
  2. Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID atau nomor project dari project Google Cloud yang berisi instance
    • INSTANCE_NAME: nama instance

    Metode HTTP dan URL:

    GET https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan melihat respons JSON seperti berikut:

    {
      ...
      "dnsName": "INSTANCE_ID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog."
    }
    

    Kolom dnsName menampilkan nama DNS instance Cloud SQL. Nama DNS selalu diakhiri dengan titik (.).

  3. Buat zona DNS pribadi. Zona ini dikaitkan dengan jaringan VPC yang digunakan untuk terhubung ke instance Cloud SQL melalui endpoint Private Service Connect.
  4. Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID atau nomor project dari Google Cloud project yang berisi zona DNS
    • ZONE_NAME: nama zona
    • DESCRIPTION: deskripsi zona (misalnya, zona DNS untuk instance Cloud SQL)
    • DNS_NAME: nama akhiran DNS untuk zona, seperti REGION_NAME.sql.goog. (dengan REGION_NAME adalah nama region untuk zona)
    • NETWORK_NAME: nama jaringan VPC

    Metode HTTP dan URL:

    POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones

    Meminta isi JSON:

    {
      "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"
          }
        ]
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan melihat respons JSON seperti berikut:

    {
      "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"
    }
    
  5. Setelah Anda membuat endpoint Private Service Connect, buat data DNS di zona.
  6. Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID atau nomor project dari project Google Cloud yang berisi zona DNS.
    • ZONE_NAME: nama zona.
    • DNS_RECORD: nama catatan DNS. Data ini disetel ke nama DNS yang Anda ambil dari instance Cloud SQL sebelumnya dalam prosedur ini (misalnya, 1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.).
    • RRSET_TYPE: jenis data resource dari set data DNS. Jika alamat IP internal yang Anda cadangkan untuk endpoint Private Service Connect adalah IPv4, tentukan A untuk parameter ini. Jika tidak, jika alamat IP untuk endpoint adalah IPv6, tentukan AAAA.
    • TTL: time to live (TTL) untuk set data dalam jumlah detik (misalnya, 300).
    • RR_DATA: alamat IP yang dialokasikan untuk endpoint Private Service Connect (misalnya, 198.51.100.5). Anda juga dapat memasukkan beberapa nilai seperti rrdata1 rrdata2 rrdata3 (misalnya, 10.1.2.3 10.2.3.4 10.3.4.5).

    Metode HTTP dan URL:

    POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ZONE_NAME

    Meminta isi JSON:

    {
      "deletions": []
      "additions": [
        {
          "name": "DNS_RECORD",
          "type": "RRSET_TYPE",
          "ttl": TTL,
          "rrdatas": [
            "RR_DATA"
          ]
        }
      ]
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan melihat respons JSON seperti berikut:

    {
      "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"
    }