Contoh: Konektivitas pribadi untuk instance MySQL

Halaman ini menjelaskan cara menggunakan Private Service Connect (PSC) untuk membuat koneksi antara sistem backend MySQL Anda yang berada di jaringan pribadi dan runtime Integration Connectors.

Pertimbangan

Saat Anda membuat lampiran layanan PSC, pertimbangkan poin-poin penting berikut:

  • Lampiran layanan PSC dan load balancer harus berada di subnet yang berbeda dalam VPC yang sama. Dan secara khusus, lampiran layanan harus berada dalam subnet NAT.
  • Software yang berjalan di VM backend Anda harus merespons traffic load balanced dan pemeriksaan health check yang dikirim ke setiap alamat IP aturan penerusan (software harus memproses di 0.0.0.0:<port> dan bukan pada alamat IP tertentu yang ditetapkan ke antarmuka jaringan). Untuk mengetahui informasi selengkapnya, lihat Health check.
  • Konfigurasikan aturan firewall untuk memfasilitasi alur traffic.

    Aturan masuk

    • Traffic dari subnet lampiran layanan PSC akan mencapai subnet ILB.
    • Dalam subnet ILB, ILB harus dapat mengirim traffic ke sistem backend Anda.
    • Pemeriksaan health check harus dapat mengakses sistem backend Anda. Pemeriksaan health check Google Cloud memiliki rentang IP tetap (35.191.0.0/16, 130.211.0.0/22). Jadi, IP ini dapat diizinkan untuk mengirim traffic ke server backend Anda.

    Aturan keluar

    Traffic keluar diaktifkan secara default dalam project Google Cloud, kecuali jika aturan penolakan tertentu dikonfigurasi.

  • Semua komponen Google Cloud Anda, seperti lampiran layanan PSC dan load balancer, harus berada di region yang sama.
  • Sistem backend Anda tidak boleh terbuka untuk jaringan publik, karena ini bisa menjadi masalah keamanan. Namun, pastikan sistem backend Anda menerima traffic dalam skenario berikut:
    • Load balancer pass-through (L4 TCP/UDP ILB): Permintaan dari IP NAT lampiran layanan PSC harus dapat menjangkau backend Anda. IP NAT ini dihasilkan secara otomatis. Oleh karena itu, Anda harus mengizinkan seluruh rentang IP subnet NAT tempat lampiran layanan Anda berada. Untuk mengetahui informasi selengkapnya, lihat Subnet Private Service Connect.
    • Load balancer berbasis proxy/HTTP(s) (proxy L4 ILB, L7 ILB): Semua permintaan baru berasal dari load balancer. Oleh karena itu, backend Anda harus menerima permintaan dari subnet proxy jaringan VPC Anda. Untuk mengetahui informasi selengkapnya, lihat Subnet khusus proxy untuk load balancer berbasis Envoy.

Contoh

Anggaplah Anda memiliki instance MySQL yang dihosting di Google Cloud pada jaringan VPC pribadi, dan Anda ingin mengekspos instance MySQL ke runtime Konektor Integrasi.

Ilustrasi berikut menunjukkan tampilan contoh project Google Cloud setelah lampiran layanan PSC dikonfigurasi.

ilustrasi contoh

Sebelum memulai

Sebelum membuat lampiran layanan PSC untuk contoh skenario, lakukan tugas berikut:

  • Instal gcloud CLI.
  • Aktifkan Compute Engine API untuk project Google Cloud Anda.
  • Agar perintah CLI lebih sederhana, Anda dapat menetapkan nilai untuk PROJECT_ID, WILAYAH, dan ZONE menggunakan perintah berikut:
    gcloud config set project PROJECT_ID
    gcloud config set compute/region REGION
    gcloud config set compute/zone ZONE
  • Untuk perintah dalam tutorial ini, ganti BACKEND_SERVER_PORT dengan 3306 yang merupakan port default yang menjalankan server MySQL.
  • Sebaiknya buat jaringan VPC baru dan gunakan jaringan tersebut saat mencoba contoh skenario ini. Setelah menguji skenario, Anda dapat menghapus jaringan VPC dan resource lainnya.
  • Setidaknya harus ada satu koneksi yang telah Anda buat. Koneksi dapat berupa jenis apa pun. Jika sudah memiliki koneksi, Anda dapat mengambil project ID direktori layanan dari runtime Integration Connectors. Project ID ini diperlukan untuk membuat lampiran layanan PSC.

Membuat lampiran layanan PSC

Untuk membuat lampiran layanan PSC sebagai contoh skenario, lakukan tugas berikut:

  1. Buat jaringan VPC dan subnet yang diperlukan.
    1. Buat jaringan VPC.
      gcloud compute networks create VPC_NETWORK --project=PROJECT_NAME --subnet-mode=custom --mtu=1460 --bgp-routing-mode=regional
    2. Tambahkan Subnet-1.
      gcloud compute networks subnets create SUBNET_NAME_1 --network=VPC_NETWORK --range=SUBNET_RANGE_1 --purpose=PRIVATE_SERVICE_CONNECT

      Perintah ini membuat Subnet-1 sebagai subnet NAT yang akan digunakan secara eksklusif untuk menghosting lampiran layanan PSC. Anda tidak dapat menghosting layanan lain di subnet NAT ini.

    3. Tambahkan Subnet-2.
      gcloud compute networks subnets create SUBNET_NAME_2 --network=VPC_NETWORK --range=SUBNET_RANGE_2
  2. Membuat instance VM.

    Untuk membuat instance VM di VPC yang baru dibuat, jalankan perintah berikut:

    gcloud compute instances create \
    --image-family debian-10 \
    --image-project debian-cloud \
    --network-interface=network-tier=PREMIUM,subnet=SUBNET_NAME_2,no-address \
    mysql-test
    

    Perintah ini membuat instance VM dengan nama mysql-test.

  3. Konfigurasikan Cloud NAT.
    1. Membuat router sederhana.
      gcloud compute routers create NAT_ROUTER_NAME \
          --network=VPC_NETWORK
      
    2. Konfigurasikan penafsiran alamat jaringan.
      gcloud compute routers nats create NAT_GATEWAY_NAME \
          --router=NAT_ROUTER_NAME \
          --auto-allocate-nat-external-ips \
          --nat-all-subnet-ip-ranges
      
  4. SSH ke instance VM Anda.
    1. Buat aturan firewall untuk mengizinkan SSH.
      gcloud compute firewall-rules create VPC_NETWORK-allow-ssh --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:22
      
    2. SSH ke instance VM Anda.
      gcloud compute ssh \
          --tunnel-through-iap \
          mysql-test
      
  5. Instal server MySQL. Untuk petunjuk mendetail, lihat Menginstal MySQL.
  6. Hubungkan ke instance MySQL dan buat data sampel.
    1. Terhubung ke MySQL menggunakan klien MySQL.
      sudo mysql -u root -p
    2. Buat pengguna baru dan berikan akses untuk terhubung dari alamat host mana pun.
      CREATE USER 'test-user'@'%' IDENTIFIED BY 'test-pass';
      GRANT ALL PRIVILEGES ON * . * TO 'test-user'@'%';
      FLUSH PRIVILEGES;
      

      Perintah ini akan membuat pengguna dengan nama pengguna test-user dan sandi sebagai test-pass.

    3. Buat database beserta contoh data.
      CREATE DATABASE test-db;
      USE test-db;
      CREATE TABLE Singers (SingerId int, FirstName varchar(255), LastName varchar(255));
      INSERT INTO Singers (SingerId, FirstName, LastName) VALUES (1, 'Marc', 'Richards');
      
    4. Keluar dari klien MySQL.
      mysql> exit
    5. Keluar dari instance VM.
      exit
  7. Siapkan grup instance yang tidak dikelola.
    1. Membuat grup instance yang tidak dikelola.
      gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME
    2. Tambahkan instance VM yang dibuat di langkah 2 ke grup.
      gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME --instances=mysql-test
  8. Buat pemeriksaan health check dan izinkan traffic dari pemeriksaan.
    1. Membuat pemeriksaan health check.
      gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port BACKEND_SERVER_PORT --region=REGION

      Di perintah ini, tetapkan BACKEND_SERVER_PORT ke 3306 yang merupakan port default tempat server MySQL berjalan.

    2. Buat aturan firewall untuk mengizinkan traffic dari pemeriksaan.
      gcloud compute firewall-rules create VPC_NETWORK-allow-health-check --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT --source-ranges=35.191.0.0/16,130.211.0.0/22
  9. Membuat load balancer internal L4 lalu mengizinkan traffic dari load balancer.
    1. Buat layanan backend.
      gcloud compute backend-services create BACKEND_SERVICE --load-balancing-scheme=internal --protocol=tcp --health-checks=HEALTH_CHECK_NAME --health-checks-region=REGION 
    2. Tambahkan grup instance ke layanan backend.
      gcloud compute backend-services add-backend BACKEND_SERVICE --instance-group=INSTANCE_GROUP_NAME --instance-group-zone=ZONE
    3. Membuat aturan penerusan.
      gcloud compute forwarding-rules create FORWARDING_RULE_NAME --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE --backend-service-region=REGION
    4. Buat aturan firewall untuk mengizinkan traffic internal dari load-balancer ke grup instance.
      gcloud compute firewall-rules create VPC_NETWORK-allow-internal --direction=INGRESS --priority=1000 --network=VPC_NETWORK --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2
  10. Buat lampiran layanan PSC.
    1. Buat aturan firewall untuk mengizinkan traffic dari lampiran layanan PSC ke load balancer internal yang dibuat pada langkah sebelumnya.
      gcloud compute firewall-rules create VPC_NETWORK-allow-sa --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT --source-ranges=SUBNET_RANGE_1
    2. Buat lampiran layanan dengan persetujuan eksplisit.
      gcloud compute service-attachments create SERVICE_ATTACHMENT_NAME --producer-forwarding-rule=FORWARDING_RULE_NAME  --connection-preference=ACCEPT_MANUAL --consumer-accept-list=SERVICE_DIRECTORY_PROJECT_ID=LIMIT --nat-subnets=SUBNET_NAME_1

      Dalam perintah ini, LIMIT adalah batas koneksi untuk project. Batas koneksi adalah jumlah endpoint Private Service Connect konsumen yang dapat terhubung ke layanan ini. Untuk memahami cara mendapatkan SERVICE_DIRECTORY_PROJECT_ID, lihat Mendapatkan project ID direktori layanan.

  11. Buat lampiran endpoint.

    Anda dapat menganggap lampiran endpoint sebagai antarmuka ke lampiran layanan PSC. Anda tidak dapat menggunakan lampiran layanan PSC secara langsung untuk mengonfigurasi konektivitas pribadi. Lampiran layanan PSC hanya dapat diakses melalui lampiran endpoint. Anda juga dapat membuat lampiran endpoint sebagai alamat IP atau nama host. Setelah membuat lampiran endpoint, Anda dapat menggunakannya saat mengonfigurasi konektor untuk konektivitas pribadi. Untuk mengetahui informasi selengkapnya, lihat Membuat lampiran endpoint.

  12. Verifikasi penyiapan PSC. Anda dapat memverifikasi konektivitas lampiran layanan PSC dengan membuat koneksi MySQL ke database test-db yang Anda buat untuk tutorial ini. Untuk langkah-langkah mendetail tentang cara membuat koneksi MySQL, lihat Membuat koneksi MySQL. Saat membuat koneksi, di bagian Destinations (lihat langkah 5 di Membuat koneksi MySQL), pilih Destination type sebagai Hostname, lalu masukkan alamat IP atau nama host endpoint yang sesuai. Jika pembuatan koneksi berhasil, status koneksi yang baru dibuat adalah Active di halaman Koneksi Anda di Cloud Console.

Mendapatkan project ID direktori layanan

Sebagai praktik terbaik, Anda dapat membuat lampiran layanan PSC sehingga hanya menerima permintaan dari project Google Cloud yang ditentukan. Namun, untuk melakukannya, Anda memerlukan project ID dari direktori layanan yang terkait dengan project Google Cloud Anda. Untuk mendapatkan project ID direktori layanan, Anda dapat menggunakan List Connections API seperti yang ditunjukkan dalam contoh berikut.

Sintaksis

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"

Ganti kode berikut:

  • CONNECTORS_PROJECT_ID: ID project Google Cloud tempat Anda membuat koneksi.

Contoh

Contoh ini mendapatkan project ID dari direktori layanan untuk project Google Cloud connectors-test.

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"

Menjalankan perintah ini di terminal akan menampilkan output yang mirip dengan berikut ini:

.....
{
  "connections": [
    {
      "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa",
      "createTime": "2022-10-07T09:02:31.905048520Z",
      "updateTime": "2022-10-07T09:22:39.993778690Z",
      "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1",
      "status": {
        "state": "ACTIVE"
      },
      "configVariables": [
        {
          "key": "project_id",
          "stringValue": "connectors-test"
        },
        {
          "key": "dataset_id",
          "stringValue": "testDataset"
        }
      ],
      "authConfig": {},
      "serviceAccount": "564332356444-compute@developer.gserviceaccount.com",
      "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime",
      "nodeConfig": {
        "minNodeCount": 2,
        "maxNodeCount": 50
      }
    },
....

Dalam contoh output, untuk project Google Cloud connectors-test, project ID direktori layanan adalah abcdefghijk-tp.

Lampiran layanan PSC untuk sistem backend lain

Anda dapat mengikuti langkah-langkah dalam contoh sebelumnya untuk menyiapkan lampiran layanan PSC bagi sistem backend lain. Namun, Anda harus memodifikasi langkah 5 dan 6 agar sesuai dengan sistem backend yang diinginkan. Setelah Anda menginstal sistem backend di instance VM, tambahkan sistem backend ke grup instance dan ikuti langkah-langkah selanjutnya apa adanya.