Alamat IP keluar statis

Secara default, layanan Cloud Run terhubung ke endpoint eksternal di internet menggunakan kumpulan alamat IP dinamis. Setelan default ini tidak cocok jika Cloud Run terhubung ke endpoint eksternal yang memerlukan koneksi dari alamat IP statis, seperti database atau API yang menggunakan firewall berbasis alamat IP. Untuk koneksi tersebut, Anda harus mengonfigurasi layanan Cloud Run Anda untuk merutekan permintaan melalui alamat IP statis.

Panduan ini menjelaskan cara mengaktifkan layanan Cloud Run untuk mengirim permintaan menggunakan alamat IP statis.

Ringkasan tugas

Untuk mengaktifkan layanan Cloud Run guna merutekan permintaan melalui permintaan statis mengonfigurasi alamat IP layanan Cloud Run Traffic keluar VPC untuk merutekan semua traffic keluar melalui jaringan VPC yang memiliki Gateway Cloud NAT yang dikonfigurasi dengan alamat IP statis.

Mengarahkan traffic Anda melalui Cloud NAT tidak menyebabkan hop tambahan pada stack jaringan Anda karena gateway Cloud NAT dan Cloud Router hanya menyediakan bidang kontrol dan paketnya tidak melewati gateway Cloud NAT atau Cloud Router.

Perhatikan bahwa semua layanan Cloud Run terhubung ke jaringan Jaringan VPC memiliki alamat IP keluar yang sama. Untuk menggunakan alamat IP keluar yang berbeda untuk layanan Cloud Run terpisah, ikuti panduan ini untuk membuat subnet terpisah dan, secara opsional, Konektor Akses VPC serverless.

Membuat subnet

Anda harus membuat subnet /28 khusus untuk menghosting konektor. Jika Anda menggunakan Traffic keluar VPC langsung, gunakan subnet yang sudah ada atau buat subnet lain. Jika Anda menggunakan konektor, subnet khusus akan mencegah resource komputasi lainnya di VPC Anda, seperti VM Compute Engine atau Google Kubernetes Engine cluster secara tidak sengaja, dengan menggunakan IP statis secara tidak sengaja, Akses VPC Serverless untuk mengakses internet.

gcloud

  1. Temukan nama jaringan VPC Anda.

    gcloud compute networks list

    Anda akan melihat output seperti berikut:

    NAME     SUBNET_MODE  BGP_ROUTING_MODE
    default  AUTO         REGIONAL

    Identifikasi jaringan yang akan Anda pasangkan ke Konektor Akses VPC Serverless.

  2. Buat subnet di VPC untuk Konektor Akses VPC Serverless.

    gcloud compute networks subnets create SUBNET_NAME \
    --range=RANGE --network=NETWORK_NAME --region=REGION

    Ganti nilai berikut dengan perintah ini:

    • SUBNET_NAME dengan nama yang ingin Anda berikan ke subnet.
    • RANGE dengan rentang IP dalam format CIDR yang ingin Anda tetapkan ke subnet ini (misalnya 10.124.0.0/28)
    • NETWORK_NAME dengan nama jaringan VPC.
    • REGION dengan region tempat Anda ingin membuat konektor Akses VPC Tanpa Server.

Terraform

  1. Buat jaringan VPC yang akan digunakan.

    resource "google_compute_network" "default" {
      provider = google-beta
      name     = "cr-static-ip-network"
    }

    Ganti cr-static-ip-network dengan nama subnet.

  2. Buat subnet di VPC untuk Konektor Akses VPC Serverless.

    resource "google_compute_subnetwork" "default" {
      provider      = google-beta
      name          = "cr-static-ip"
      ip_cidr_range = "10.124.0.0/28"
      network       = google_compute_network.default.id
      region        = "us-central1"
    }

    Ganti

    • cr-static-ip dengan nama subnet Anda
    • 10.124.0.0/28 dengan rentang CIDR Anda
    • us-central1 dengan region Google Cloud Anda

Membuat konektor Akses VPC Serverless

Anda tidak perlu membuat konektor jika menggunakan integrasi traffic keluar VPC Langsung. Jika tidak menggunakan traffic keluar VPC Langsung, Anda memerlukan Akses VPC Serverless untuk merutekan traffic keluar layanan Cloud Run Anda ke Jaringan VPC.

Untuk membuat konektor Akses VPC Tanpa Server:

gcloud

  1. Buat konektor Akses VPC Serverless dengan yang telah dibuat sebelumnya di subnet yang berbeda.

    gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
      --region=REGION \
      --subnet-project=PROJECT_ID \
      --subnet=SUBNET_NAME

    Ganti nilai berikut dengan perintah ini:

    • CONNECTOR dengan nama yang ingin Anda berikan ke resource ini.
    • PROJECT_ID dengan nama yang menghosting subnet.
    • SUBNET_NAME dengan nama subnet yang Anda buat.
    • REGION dengan region tempat Anda ingin membuat gateway NAT.

Terraform

  1. Buat konektor Akses VPC Tanpa Server:

    resource "google_project_service" "vpc" {
      provider           = google-beta
      service            = "vpcaccess.googleapis.com"
      disable_on_destroy = false
    }
    
    resource "google_vpc_access_connector" "default" {
      provider = google-beta
      name     = "cr-conn"
      region   = "us-central1"
    
      subnet {
        name = google_compute_subnetwork.default.name
      }
    
      # Wait for VPC API enablement
      # before creating this resource
      depends_on = [
        google_project_service.vpc
      ]
    }

    Ganti cr-conn dengan nama konektor Akses VPC Tanpa Server Anda

Mengonfigurasi penafsiran alamat jaringan (NAT)

Jika Anda menggunakan traffic keluar VPC Langsung atau Akses VPC Serverless konektor, permintaan dari layanan Cloud Run Anda akan diterima Jaringan VPC. Jika Anda ingin mengarahkan permintaan keluar ke endpoint eksternal melalui IP statis, konfigurasikan gateway Cloud NAT.

gcloud

  1. Buat Cloud Router baru untuk memprogram gateway NAT:

    gcloud compute routers create ROUTER_NAME \
      --network=NETWORK_NAME \
      --region=REGION

    Ganti nilai berikut dengan perintah ini:

    • ROUTER_NAME dengan nama untuk resource Cloud Router yang ingin Anda buat.
    • NETWORK_NAME dengan nama jaringan VPC yang Anda temukan sebelumnya.
    • REGION dengan region tempat Anda ingin membuat gateway NAT.
  2. Sediakan alamat IP statis. Resource alamat IP yang dicadangkan mempertahankan alamat IP dasar saat resource yang terkait dengannya dihapus dan dibuat ulang.

    gcloud compute addresses create ORIGIN_IP_NAME --region=REGION

    Ganti nilai berikut dengan perintah ini:

    • ORIGIN_IP_NAME dengan nama yang ingin Anda tetapkan ke resource alamat IP.
    • REGION dengan region yang akan menjalankan router Cloud NAT. Idealnya, region yang sama dengan layanan Cloud Run Anda untuk meminimalkan latency dan biaya jaringan.
  3. Buat konfigurasi gateway Cloud NAT di router ini untuk mengarahkan traffic yang berasal dari jaringan VPC menggunakan alamat IP statis yang Anda buat:

    gcloud compute routers nats create NAT_NAME \
      --router=ROUTER_NAME \
      --region=REGION \
      --nat-custom-subnet-ip-ranges=SUBNET_NAME \
      --nat-external-ip-pool=ORIGIN_IP_NAME

    Ganti nilai berikut dengan perintah ini:

    • NAT_NAME dengan nama untuk resource gateway Cloud NAT yang ingin Anda buat.
    • ROUTER_NAME dengan nama Cloud Router Anda.
    • REGION dengan region tempat Anda ingin membuat gateway NAT.
    • ORIGIN_IP_NAME dengan nama resource alamat IP yang dicadangkan yang telah Anda buat di langkah sebelumnya.

Terraform

  1. Buat Cloud Router baru untuk memprogram gateway NAT:

    resource "google_compute_router" "default" {
      provider = google-beta
      name     = "cr-static-ip-router"
      network  = google_compute_network.default.name
      region   = google_compute_subnetwork.default.region
    }

    Ganti cr-static-ip-router dengan nama subnet Anda.

  2. Sediakan alamat IP statis. Resource alamat IP yang dicadangkan mempertahankan alamat IP dasar saat resource yang terkait dengannya dihapus dan dibuat ulang:

    resource "google_compute_address" "default" {
      provider = google-beta
      name     = "cr-static-ip-addr"
      region   = google_compute_subnetwork.default.region
    }

    Ganti cr-static-ip-addr dengan nama subnet Anda.

  3. Buat konfigurasi gateway Cloud NAT di router ini untuk mengarahkan traffic yang berasal dari jaringan VPC menggunakan alamat IP statis yang Anda buat:

    resource "google_compute_router_nat" "default" {
      provider = google-beta
      name     = "cr-static-nat"
      router   = google_compute_router.default.name
      region   = google_compute_subnetwork.default.region
    
      nat_ip_allocate_option = "MANUAL_ONLY"
      nat_ips                = [google_compute_address.default.self_link]
    
      source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS"
      subnetwork {
        name                    = google_compute_subnetwork.default.id
        source_ip_ranges_to_nat = ["ALL_IP_RANGES"]
      }
    }

    Ganti cr-static-nat dengan nama gateway Cloud NAT Anda.

Merutekan traffic Cloud Run melalui jaringan VPC

Setelah NAT dikonfigurasi, deploy atau update Cloud Run Anda layanan dengan traffic keluar VPC Langsung Akses VPC Serverless dan menetapkan traffic keluar VPC arahkan semua traffic melalui jaringan VPC:

gcloud

  • Traffic keluar VPC langsung

    Untuk men-deploy atau mengupdate layanan Cloud Run agar dapat menggunakan VPC Langsung traffic keluar dan arahkan semua traffic keluar melaluinya, jalankan perintah berikut:

    gcloud run deploy SERVICE_NAME \
    --image=IMAGE_URL \
    --network=NETWORK \
    --subnet=SUBNET \
    --region=REGION \
    --vpc-egress=all-traffic

    Ganti nilai berikut dengan perintah ini:

    • SERVICE_NAMEdengan nama layanan Cloud Run yang ingin Anda deploy.
    • IMAGE_URLdengan referensi ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL memiliki bentuk LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • NETWORK dengan nama jaringan VPC Anda.
    • SUBNET dengan nama subnet Anda.
    • REGION dengan region untuk layanan Anda.
  • Konektor Akses VPC Serverless

    Untuk men-deploy atau mengupdate layanan Cloud Run agar dapat menggunakan Konektor Akses VPC Serverless dan merutekan semua traffic keluar lalu lintas yang melewatinya, jalankan perintah berikut:

    gcloud run deploy SERVICE_NAME \
    --image=IMAGE_URL \
    --vpc-connector=CONNECTOR_NAME \
    --region=REGION \
    --vpc-egress=all-traffic

    Ganti nilai berikut dengan perintah ini:

    • SERVICE_NAMEdengan nama layanan Cloud Run yang ingin Anda deploy.
    • IMAGE_URLdengan referensi ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL memiliki bentuk LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • CONNECTOR_NAME dengan nama Konektor Akses VPC Serverless.
    • REGION dengan region untuk layanan Anda.

Terraform

Layanan Cloud Run ini menggunakan konektor VPC dan juga merutekan semua traffic keluar melaluinya:

resource "google_cloud_run_v2_service" "default" {
  provider = google-beta
  name     = "cr-static-ip-service"
  location = google_compute_subnetwork.default.region

  template {
    containers {
      # Replace with the URL of your container
      #   gcr.io/<YOUR_GCP_PROJECT_ID>/<YOUR_CONTAINER_NAME>
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    scaling {
      max_instance_count = 5
    }
    vpc_access {
      connector = google_vpc_access_connector.default.id
      egress    = "ALL_TRAFFIC"
    }
  }
  ingress = "INGRESS_TRAFFIC_ALL"

}

Ganti us-docker.pkg.dev/cloudrun/container/hello dengan referensi ke image container Anda.

Memverifikasi IP eksternal statis

Setelah menyelesaikan langkah-langkah sebelumnya, Anda harus menyiapkan Cloud NAT di jaringan VPC Anda dengan alamat IP statis yang telah ditetapkan, dan telah merutekan semua traffic keluar layanan Cloud Run ke jaringan VPC Anda. Permintaan dari layanan Cloud Run berpindah melalui jaringan VPC Anda dan menjangkau endpoint eksternal menggunakan menggunakan alamat IP statis.

Untuk memverifikasi tindakan ini dan mengonfirmasi asal alamat IP yang digunakan layanan, Anda dapat membuat permintaan ke API atau situs seperti curlmyip.org yang menunjukkan alamat IP berasal.

Menghapus IP eksternal statis

Jika Anda tidak lagi memerlukan alamat IP eksternal statis, lihat Merilis alamat IP eksternal statis.