Mengonfigurasi Traffic keluar VPC langsung untuk fungsi generasi ke-2
Traffic keluar VPC langsung memungkinkan Anda merutekan traffic dari fungsi Cloud Run (generasi ke-2) langsung ke jaringan VPC Anda.
Batasan
- Traffic keluar VPC langsung tidak tersedia untuk fungsi generasi ke-1.
- Anda tidak dapat menggunakan traffic keluar VPC Langsung dan konektor Akses VPC Serverless secara bersamaan. Lihat Membandingkan Traffic keluar VPC langsung dan konektor VPC untuk mengetahui detailnya.
Sebelum memulai
- Aktifkan Cloud Functions API.
- Instal Google Cloud CLI, lalu lakukan inisialisasi dengan menjalankan
gcloud init. Update komponen
gcloudke versi 545.0.0 atau yang lebih baru:gcloud components update
Buat jaringan VPC di project Anda jika belum memilikinya.
Opsional: Jika fungsi Anda perlu mengakses API dan layanan Google menggunakan alamat IP internalnya, aktifkan Akses Google Pribadi di subnet yang Anda gunakan untuk keluar VPC Langsung.
Menyiapkan izin IAM
Untuk mengizinkan traffic egress VPC Langsung, minta administrator Anda untuk memberikan peran Cloud Run Invoker (roles/run.invoker) ke akun layanan fungsi Anda.
Pastikan Cloud Run memiliki akses ke jaringan VPC dengan menggunakan salah satu metode berikut:
Peran Agen Layanan Cloud Run: Secara default, agen layanan Cloud 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.usepada 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 Compute Network User: Jika Anda tidak menggunakan peran Agen Layanan Cloud Run default atau izin kustom, berikan peran Compute Network User (
roles/compute.networkUser) pada akun layanan Agen Layanan Cloud Run. Subnet dengan IPv6 eksternal juga memerlukan peran Compute Public IP Admin (roles/compute.publicIpAdmin).Misalnya, untuk memberikan peran Compute Network User, 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 beta functions deploydengan tanda untuk setelan jaringan Anda.gcloud beta 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 tag jaringan yang dipisahkan
koma 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 egress 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.
Untuk mengonfigurasi traffic keluar VPC Langsung, gunakan penyedia Terraform google-beta.
Dengan menggunakan Contoh traffic egress VPC langsung Cloud Run Functions (generasi ke-2) sebagai titik awal, perbarui kolom berikut:
service_config.network: nama jaringan VPC Anda.service_config.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 egress VPC Langsung.
Buat layanan backend internal
Buat direktori baru untuk layanan backend dan pindah 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}`); });Men-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 pindah 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 beta 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 memanggil layanan backend internal dan menampilkan responsnya.
Langkah berikutnya
- Pelajari Traffic keluar VPC langsung dan alokasi IP.
- Lihat Tips pemecahan masalah.
- Bandingkan metode traffic keluar di Menghubungkan ke jaringan VPC.
- Lihat referensi perintah
gcloud beta functions deploy.