Mengonfigurasi traffic keluar VPC Langsung untuk fungsi generasi ke-2
Traffic keluar VPC Langsung memungkinkan Anda merutekan traffic dari fungsi Cloud Run Functions (generasi ke-2) langsung ke jaringan VPC.
Batasan
- Traffic keluar VPC Langsung tidak tersedia untuk fungsi generasi ke-1.
- Anda tidak dapat menggunakan konektor traffic keluar VPC Langsung dan konektor Akses VPC Serverless secara bersamaan. Lihat Membandingkan traffic keluar VPC Langsung dan konektor VPC untuk mengetahui detailnya.
- Untuk mempelajari batasan umum penggunaan VPC Langsung, lihat VPC Langsung dengan jaringan VPC.
Sebelum memulai
- Aktifkan Cloud Functions API.
- Instal Google Cloud CLI, lalu lakukan inisialisasi dengan menjalankan
gcloud init. Update komponen
gcloudke versi 558.0.0 atau yang lebih baru:gcloud components update
Buat jaringan VPC di project Anda jika belum memilikinya, buat satu.
Opsional: Jika fungsi Anda perlu mengakses Google API dan layanan menggunakan alamat IP internalnya, aktifkan Akses Google Pribadi di subnet yang Anda gunakan untuk traffic keluar VPC Langsung.
Menyiapkan izin IAM
Untuk mengotorisasi traffic keluar VPC Langsung, minta administrator untuk memberikan peran Cloud Run Invoker (roles/run.invoker) ke akun layanan fungsi Anda.
Pastikan Cloud Run memiliki akses ke jaringan VPC menggunakan salah satu metode berikut:
Peran Agen Layanan Cloud Run: Secara default, agen layananCloud Run memiliki peran Agen Layanan Cloud Run (
roles/run.serviceAgent) yang berisi izin yang diperlukan.Izin kustom: Untuk kontrol yang lebih terperinci, berikan izin tambahan berikut kepada agen layanan Cloud Run di project:
compute.networks.getcompute.subnetworks.getcompute.subnetworks.usedi project atau subnet tertentucompute.addresses.getcompute.addresses.listcompute.addresses.create(hanya diperlukan untuk subnet stack ganda dengan IPv6 eksternal)compute.addresses.delete(hanya diperlukan untuk subnet stack ganda dengan IPv6 eksternal)compute.addresses.createInternalcompute.addresses.deleteInternalcompute.regionOperations.get
Peran Pengguna Jaringan Compute: Jika Anda tidak menggunakan peran Agen Layanan Cloud Run default atau izin kustom, berikan peran Pengguna Jaringan Compute (
roles/compute.networkUser) di akun layanan Agen Layanan Cloud Run. Subnet dengan IPv6 eksternal juga memerlukan peran Admin IP Publik Compute (roles/compute.publicIpAdmin).Misalnya, untuk memberikan peran Pengguna Jaringan Compute, jalankan perintah berikut:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \ --role "roles/compute.networkUser"
Ganti kode berikut:
- PROJECT_ID: ID project Anda.
- PROJECT_NUMBER: nomor project tempat Anda men-deploy fungsi Cloud Run.
Mengonfigurasi traffic keluar VPC Langsung
Konfigurasi traffic keluar VPC Langsung untuk fungsi generasi ke-2 yang baru atau yang sudah ada.
gcloud
Untuk mengonfigurasi traffic keluar VPC Langsung saat Anda men-deploy fungsi, gunakan perintah
gcloud functions deploydengan flag untuk setelan jaringan Anda.gcloud functions deploy FUNCTION_NAME \ --source . \ --runtime RUNTIME \ --trigger-http \ --region REGION \ --network=NETWORK \ --subnet=SUBNET \ --network-tags=NETWORK_TAG_NAMES \ --direct-vpc-egress=EGRESS_SETTINGGanti kode berikut:
- FUNCTION_NAME: nama fungsi Anda.
- RUNTIME: runtime untuk fungsi Anda, misalnya,
nodejs20. - REGION: region tempat Anda men-deploy fungsi.
- Opsional: NETWORK dengan nama jaringan VPC Anda. Tentukan jaringan VPC atau subnet, atau keduanya. Jika Anda hanya menentukan jaringan, subnet akan menggunakan nama yang sama dengan jaringan.
- Opsional: SUBNET dengan nama subnet Anda. Tentukan jaringan VPC atau subnet, atau keduanya. Jika Anda hanya menentukan jaringan, subnet akan menggunakan nama yang sama dengan jaringan. Anda dapat men-deploy atau menjalankan beberapa fungsi di subnet yang sama.
- Opsional: NETWORK_TAG_NAMES dengan nama yang dipisahkan koma
dari tag jaringan
yang ingin Anda kaitkan dengan fungsi. Setiap fungsi dapat memiliki tag jaringan yang berbeda, seperti
network-tag-2. - EGRESS_SETTING dengan
nilai setelan traffic keluar:
all: Default. Mengirim semua traffic keluar melalui jaringan VPC.private-ranges-only: Hanya mengirim traffic ke alamat internal melalui jaringan VPC.
Opsional: Untuk menghapus semua setelan traffic keluar VPC Langsung dari fungsi, deploy ulang fungsi dengan flag
--clear-networkdan--clear-network-tags.
Terraform
Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.
Fitur ini (dukungan untuk menggunakan traffic keluar VPC Langsung dengan fungsi Cloud Run Functions generasi ke-2) menambahkan kolom direct_vpc_network_interface.network dan direct_vpc_egress.
Untuk menggunakan fitur ini, ikuti panduan berikut:
- Anda harus menggunakan Terraform versi 7.21.0 atau yang lebih baru.
- Jika Anda men-deploy ulang fungsi yang memiliki VPC Langsung, Anda kini harus menetapkan nilai secara eksplisit dalam konfigurasi.
Dengan menggunakan contoh traffic keluar VPC Langsung Cloud Run Functions (generasi ke-2) sebagai titik awal, perbarui kolom berikut:
service_config.direct_vpc_network_interface.network: nama jaringan VPC Anda.service_config.direct_vpc_network_interface.subnetwork: nama subnetwork VPC Anda.service_config.direct_vpc_egress: traffic mana yang akan dikirim ke jaringan VPC.VPC_EGRESS_ALL_TRAFFICmengirim semua traffic keluar melalui jaringan VPC.VPC_EGRESS_PRIVATE_RANGES_ONLYhanya mengirim traffic ke rentang alamat IP pribadi ke jaringan VPC.
Contoh: Memanggil layanan internal dari fungsi
Contoh ini menunjukkan cara membuat layanan Cloud Run internal, lalu memanggilnya dari fungsi Cloud Run Functions (generasi ke-2) yang menggunakan traffic keluar VPC Langsung.
Membuat layanan backend internal
Buat direktori baru untuk layanan backend dan ubah ke direktori tersebut:
mkdir backend-service cd backend-serviceBuat file
package.jsondengan konten berikut:{ "name": "backend-service", "version": "1.0.0", "description": "", "scripts": { "start": "node index.js" }, "dependencies": { "express": "^4.18.1" } }Buat file
index.jsdengan konten berikut:const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send("hello world"); }); const port = parseInt(process.env.PORT) || 8080; app.listen(port, () => { console.log(`helloworld: listening on port ${port}`); });Deploy layanan ke Cloud Run dengan ingress internal:
gcloud run deploy backend \ --source . \ --no-allow-unauthenticated \ --region=REGION \ --ingress internalGanti
REGIONdengan region Anda, misalnya,us-west1.Simpan URL layanan baru. Anda akan memerlukannya di bagian berikutnya.
Membuat dan men-deploy fungsi
Buat direktori baru untuk fungsi dan ubah ke direktori tersebut:
cd .. mkdir dvpc-function cd dvpc-functionBuat file
package.jsondengan konten berikut:{ "name": "sample-http", "version": "0.0.1", "dependencies": { "axios": "0.21.1", "@google-cloud/functions-framework": "^3.0.0" } }Buat file
index.jsdengan konten berikut. Kode ini membuat permintaan yang diautentikasi ke layanan backend internal.const axios = require('axios'); const functions = require('@google-cloud/functions-framework'); const callVPCService = async (req, res) => { const backendUrl = process.env.BACKEND_URL; if (!backendUrl) { console.error('BACKEND_URL environment variable not set.'); res.status(500).send('BACKEND_URL not configured.'); return; } try { const metadataServerURL = 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience='; const tokenUrl = metadataServerURL + backendUrl; const tokenResponse = await axios.get(tokenUrl, { headers: { 'Metadata-Flavor': 'Google', }, }); const token = tokenResponse.data; const response = await axios.get(backendUrl, { headers: { Authorization: `bearer ${token}`, }, }); res.status(200).send(`Response from backend: ${response.data}`); } catch (error) { console.error(`Error calling backend service: ${error.message}`); res.status(500).send(`Error calling backend: ${error.message}`); } }; functions.http('callVPCService', callVPCService);Deploy fungsi dengan traffic keluar VPC Langsung yang dikonfigurasi untuk merutekan semua traffic ke jaringan VPC default Anda:
gcloud functions deploy my-2ndgen-function \ --source . \ --runtime nodejs20 \ --trigger-http \ --entry-point callVPCService \ --network=default \ --subnet=default \ --direct-vpc-egress=all \ --region=REGION \ --allow-unauthenticated \ --set-env-vars BACKEND_URL=BACKEND_URLGanti kode berikut:
REGION: region tempat Anda men-deploy layanan backend.BACKEND_URL: URL layanan backend yang Anda buat.
Setelah fungsi di-deploy, panggil dengan membuka URL-nya. Fungsi ini memanggil layanan backend internal dan menampilkan responsnya.
Langkah berikutnya
- Pelajari traffic keluar VPC Langsung dan alokasi IP.
- Pelajari tentang penyiapan subnet stack ganda.
- Lihat Tips pemecahan masalah.
- Bandingkan metode traffic keluar di Menghubungkan ke jaringan VPC.
- Lihat referensi perintah
gcloud functions deploy.