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

Sebelum memulai

  • Aktifkan Cloud Functions API.
  • Instal Google Cloud CLI, lalu lakukan inisialisasi dengan menjalankan gcloud init.
  • Update komponen gcloud ke 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.get
    • compute.subnetworks.get
    • compute.subnetworks.use pada project atau subnet tertentu
    • compute.addresses.get
    • compute.addresses.list
    • compute.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.createInternal
    • compute.addresses.deleteInternal
    • compute.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

  1. Untuk mengonfigurasi traffic keluar VPC Langsung saat Anda men-deploy fungsi, gunakan perintah gcloud beta functions deploy dengan 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_SETTING
    

    Ganti 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.
  2. Opsional: Untuk menghapus semua setelan traffic egress VPC Langsung dari fungsi, deploy ulang fungsi dengan flag --clear-network dan --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_TRAFFIC mengirim semua traffic keluar melalui jaringan VPC. VPC_EGRESS_PRIVATE_RANGES_ONLY hanya 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

  1. Buat direktori baru untuk layanan backend dan pindah ke direktori tersebut:

    mkdir backend-service
    cd backend-service
    
  2. Buat file package.json dengan konten berikut:

    {
        "name": "backend-service",
        "version": "1.0.0",
        "description": "",
        "scripts": {
            "start": "node index.js"
        },
        "dependencies": {
            "express": "^4.18.1"
        }
    }
    
  3. Buat file index.js dengan 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}`);
    });
    
  4. Men-deploy layanan ke Cloud Run dengan ingress internal:

    gcloud run deploy backend \
        --source . \
        --no-allow-unauthenticated \
        --region=REGION \
        --ingress internal
    

    Ganti REGION dengan region Anda, misalnya, us-west1.

  5. Simpan URL layanan baru. Anda akan memerlukannya di bagian berikutnya.

Membuat dan men-deploy fungsi

  1. Buat direktori baru untuk fungsi dan pindah ke direktori tersebut:

    cd ..
    mkdir dvpc-function
    cd dvpc-function
    
  2. Buat file package.json dengan konten berikut:

    {
      "name": "sample-http",
      "version": "0.0.1",
      "dependencies": {
        "axios": "0.21.1",
        "@google-cloud/functions-framework": "^3.0.0"
      }
    }
    
  3. Buat file index.js dengan 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);
    
  4. 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_URL
    

    Ganti kode berikut:

    • REGION: region tempat Anda men-deploy layanan backend.
    • BACKEND_URL: URL layanan backend yang Anda buat.
  5. Setelah fungsi di-deploy, panggil dengan membuka URL-nya. Fungsi memanggil layanan backend internal dan menampilkan responsnya.

Langkah berikutnya