Klaim bahwa App Engine Standard tidak dapat menjangkau basis data privat melalui Cloud VPN adalah sisa dari generasi platform sebelumnya. Instans Standard tidak mendapatkan alamat native VPC seperti beberapa runtime lain, tetapi dapat mengirim egress melalui konektor Serverless VPC Access yang berada di jaringan Anda. Setelah jalur itu ada, Cloud VPN dan firewall jarak jauh melihat lalu lintas konektor seperti sumber lain mana pun. Yang gagal jarang adalah kemampuannya sendiri. Ini salah satu dari tiga pengaturan yang tidak pernah diselaraskan.

Dari mana jawaban lama berasal

Sebelum konektor ada, jawaban praktisnya memang bahwa Standard hanya dapat berbicara dengan endpoint publik, dan tim beralih ke VM proksi atau runtime lain untuk menghindarinya. Platform berubah, cerita rakyatnya tidak. Banyak saran daring masih mencerminkan era ketika tidak ada opsi egress sama sekali.

Koreksinya lebih sempit dari kedengarannya. Standard dapat menjangkau jaringan privat, tetapi hanya melalui integrasi egress yang didukung, dan hanya untuk tujuan yang benar-benar ditangkap integrasi itu.

Pilih jalur egress terlebih dahulu

Konektor yang terpasang pada layananlah yang memasukkan lalu lintasnya ke VPC. Dokumentasi konektor mencantumkan prasyarat regional dan pengaturan egress; konektor harus ada di region layanan dan dapat digunakan oleh identitas yang melakukan deploy.

vpc_access_connector:
  name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
  egress_setting: private-ranges-only

private-ranges-only mengirim tujuan privat ke VPC dan membiarkan semua yang lain di jalur internet normal, yang biasanya dibutuhkan koneksi basis data. all-traffic mendorong lalu lintas keluar secara luas melalui VPC, sehingga panggilan internet biasa juga mewarisi postur NAT dan firewall VPC.

Mengedit file secara lokal tidak mengubah apa pun sampai Anda melakukan deploy. Versi yang berjalan mempertahankan konfigurasi saat dibuat.

Alamat sumber adalah konektor, bukan laptop Anda

Di sinilah sebagian besar waktu debugging pergi. Gateway VPN jarak jauh dan firewall basis data harus mengizinkan rentang yang dialokasikan konektor di dalam VPC, bukan alamat kantor Anda dan bukan alamat egress publik layanan. Cari rentang itu di konsol sebelum menulis satu aturan pun.

Dua tempat lain harus sepakat. Tabel rute VPC membutuhkan rute ke jaringan basis data jarak jauh, dan sisi jarak jauh membutuhkan rute balik untuk rentang konektor. Jika tunnel menggunakan pemilih lalu lintas, pastikan rentang konektor berada di dalam cakupan yang dinegosiasikan. Rute yang hanya ada dalam arah jarak jauh ke lokal adalah kelalaian umum, dan rute itu meloloskan ping tanpa pernah menyelesaikan handshake TCP.

Tunnel yang hanya mengizinkan subnet VM akan menjatuhkan paket konektor tanpa pesan kesalahan yang berguna, itulah sebabnya timeout basis data tampak seperti masalah kredensial.

DNS menempuh jalur berbeda

Nama host basis data privat harus diresolusi di dalam jaringan yang dijangkau konektor, melalui peering Cloud DNS atau zona penerusan yang dapat digunakan VPC. Meresolusinya di workstation Anda tidak membuktikan apa pun tentang layanan yang di-deploy, karena laptop Anda tidak menggunakan resolver itu.

Jika nama itu diresolusi ke alamat publik dari dalam VPC, Anda akan men-debug firewall yang salah.

URL Fetch tidak menggunakan konektor

Pengaturan egress mencakup soket keluar normal runtime, dan layanan URL Fetch lama bukan bagian dari jalur itu. Permintaan yang dikeluarkan melalui urlfetch mengabaikan konektor, apa pun kata konfigurasinya. Ketika panggilan yang gagal berada di pustaka lama yang masih menggunakan URL Fetch, perbaikannya adalah memindahkan panggilan itu ke klien HTTP standar.

Bagi driver basis data ini jarang menjadi masalah, tetapi inilah alasan klasik mengapa satu endpoint berfungsi dan yang lain tidak dari layanan yang sama.

Verifikasi dengan satu kueri sempit

Deploy, lalu jalankan satu operasi basis data yang diizinkan dari versi yang di-deploy sambil mengamati sisi jarak jauh. Alamat sumber yang dicatat basis data atau gateway VPN seharusnya milik konektor. Jika bukan, permintaan tidak pernah masuk ke VPC dan tidak ada konfigurasi tunnel yang dapat memperbaikinya. Bandingkan dengan rentang yang Anda cari di konsol; ketidakcocokan biasanya berarti konektor kedua melayani versi tersebut.

Kueri yang berhasil dari VM di dalam VPC membuktikan rute itu ada. Itu tidak membuktikan bahwa layanan memilihnya.

Artikel terkait