Menggunakan rute

Halaman ini menjelaskan cara membuat dan mengelola rute untuk jaringan Virtual Private Cloud (VPC) di Google Cloud. Halaman ini mengasumsikan bahwa Anda telah memahami berbagai jenis rute Google Cloud dan karakteristiknya seperti yang dijelaskan di Rute.

Setiap jaringan baru memiliki dua jenis rute yang dihasilkan sistem: rute default, yang dapat Anda hapus atau ganti, dan satu rute subnet untuk setiap subnetnya. Anda tidak dapat menghapus rute subnet kecuali Anda juga menghapus subnetnya.

Selain rute yang dihasilkan sistem, Anda dapat membuat rute statis kustom lainnya.

Menampilkan daftar rute untuk jaringan VPC

Anda dapat menggunakan Google Cloud CLI atau API untuk menampilkan dan melihat detail tentang jenis rute berikut:

Baik perintah gcloud CLI maupun metode API tidak menampilkan jenis rute berikut:

Untuk melihat tampilan rute lengkap, gunakan Konsol Google Cloud. Untuk menampilkan dan menjelaskan rute berbasis kebijakan, lihat Menggunakan rute berbasis kebijakan.

Konsol

  1. Di Konsol Google Cloud, buka halaman Routes.

    Buka Rute

  2. Pada tab Effective routes, lakukan hal berikut:

    • Pilih jaringan VPC.
    • Pilih region.
  3. Klik View.

  4. Anda dapat memfilter berdasarkan properti, termasuk jenis rute, rentang IP tujuan, dan jenis next hop.

  5. Opsional: Klik tombol Tampilkan rute yang disembunyikan ke posisi aktif untuk melihat rute yang disembunyikan. Untuk melihat alasan rute dihilangkan, arahkan kursor ke ikon di kolom Status.

gcloud

Untuk mencantumkan dan melihat detail rute, gunakan perintah gcloud compute routes. Rute subnet dan rute statis dari jaringan VPC lokal dan jaringan VPC yang di-peering akan ditampilkan. Jenis rute lainnya tidak ditampilkan. Untuk melihat semua rute, gunakan konsol Google Cloud.

Untuk mencantumkan rute, lakukan tindakan berikut:

gcloud compute routes list \
    --filter="network=NETWORK_NAME" \
    --project=PROJECT_ID

Untuk mendapatkan detail rute, lakukan langkah berikut:

gcloud compute routes describe ROUTE_NAME \
    --format="flattened()" \
    --project=PROJECT_ID

Ganti kode berikut:

  • NETWORK_NAME: Nama jaringan VPC.
  • PROJECT_ID: project ID yang berisi jaringan VPC Anda.
  • ROUTE_NAME: nama rute.

API

Untuk menampilkan dan melihat detail rute, gunakan metode routes.list dan routes.get. Rute subnet dan rute statis dari jaringan VPC lokal dan jaringan VPC yang di-peering akan ditampilkan. Jenis rute lainnya tidak ditampilkan. Untuk melihat semua rute, gunakan konsol Google Cloud.

Untuk mencantumkan rute, lakukan tindakan berikut:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes?filter=network="NETWORK_URL

Untuk mendapatkan detail rute, lakukan langkah berikut:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes/ROUTE_NAME

Ganti kode berikut:

  • PROJECT_ID: project ID yang berisi jaringan VPC Anda.
  • NETWORK_URL: URL jaringan VPC.
  • ROUTE_NAME: nama rute.

Menampilkan daftar rute yang berlaku untuk antarmuka jaringan VM

Anda dapat menggunakan Konsol Google Cloud untuk melihat rute yang berlaku untuk antarmuka jaringan VM. Tampilan ini mempersempit daftar rute yang dapat Anda gunakan untuk traffic keluar.

Untuk melihat rute yang berlaku bagi antarmuka jaringan VM tertentu, ikuti langkah-langkah berikut.

Konsol

  1. Di konsol Google Cloud, buka halaman Instance VM.

    Buka instance VM

  2. Temukan instance VM dalam daftar. Pada menu More actions di akhir baris, pilih View network details.

  3. Jika sebuah instance memiliki beberapa antarmuka jaringan, di bagian Network interface details, pilih antarmuka jaringan yang ingin Anda lihat.

  4. Di bagian Detail firewall dan rute, klik tab Routes untuk melihat semua rute yang berlaku untuk antarmuka jaringan, yang diurutkan berdasarkan nama rute.

Menambahkan dan menghapus rute statis

Anda dapat menambahkan atau menghapus rute statis dan rute berbasis kebijakan yang bersifat lokal untuk jaringan VPC Anda. Bagian ini menjelaskan cara menambahkan dan menghapus rute statis lokal. Untuk mengetahui informasi selengkapnya tentang cara menambahkan dan menghapus rute berbasis kebijakan, lihat Menggunakan rute berbasis kebijakan.

Rute subnet ditambahkan dan dihapus secara otomatis saat Anda menambah atau menghapus subnet. Untuk mengetahui informasi selengkapnya tentang cara menambahkan dan menghapus subnet, lihat Menggunakan subnet.

Semua rute di jaringan VPC yang terhubung oleh Peering Jaringan VPC harus dimanipulasi di jaringan VPC yang mengekspor rute tersebut. Untuk mengetahui informasi selengkapnya, lihat Opsi pertukaran rute.

Sebelum menambahkan rute statis

Sebelum menambahkan rute statis, pertimbangkan hal berikut:

  • Pastikan Anda memahami berbagai jenis next hop yang dapat digunakan rute statis. Untuk mengetahui informasi tentang berbagai jenis next hop rute statis, termasuk yang mendukung tujuan IPv6, lihat Next hop dan fitur.
  • Kecuali Anda menggunakan subnet hybrid, rute statis tidak boleh memiliki rentang tujuan yang cocok atau lebih spesifik daripada rentang tujuan subnet atau rute subnet peering. Untuk detail selengkapnya, lihat Interaksi dengan rute statis kustom di Ringkasan rute dan Interaksi rute subnet dan statis dalam dokumentasi Peering Jaringan VPC.
  • Untuk menghindari konflik saat menggunakan jaringan VPC mode otomatis, jangan membuat rute statis yang tujuannya "berada" dalam 10.128.0.0/9. Tinjau rentang IPv4 mode otomatis untuk mengetahui detailnya.
  • Tujuan untuk rute statis kustom tidak boleh tumpang tindih denganrentang internal yang dialokasikan.
  • Pastikan Anda telah memahami instance sebagai next hop sebelum membuat rute statis kustom yang menggunakan VM sebagai next hop-nya. Google Cloud hanya memvalidasi bahwa VM ada pada saat Anda membuat rute jika Anda memilih instance next-hop.
  • Jika Anda membuat rute menggunakan tag jaringan, hanya VM dengan tag tersebut yang akan menerima rute. Namun, VM yang diberi tag tetap menerima semua rute yang tidak memiliki tag jaringan.

Menambahkan rute statis

Menambahkan rute statis ke jaringan. Untuk mengetahui informasi selengkapnya tentang berbagai jenis next hop rute statis, termasuk yang mendukung tujuan IPv6, lihat Hop dan fitur berikutnya.

Konsol

  1. Di Konsol Google Cloud, buka halaman Routes.

    Buka Rute

  2. Klik tab Route management.

  3. Klik Create route.

  4. Tentukan nama dan deskripsi rute.

  5. Dalam daftar Network, pilih jaringan yang ada untuk rute.

  6. Di daftar Route type, pilih Static route.

  7. Dalam daftar IP version, pilih versi IP yang diperlukan:

    • Untuk membuat rute statis IPv4, pilih IPv4.
    • Untuk membuat rute statis IPv6, pilih IPv6.
  8. Tentukan rentang IP tujuan. Tujuan paling luas adalah 0.0.0.0/0 untuk IPv4 atau ::/0 untuk IPv6.

  9. Tentukan prioritas rute tersebut. Prioritas dapat berupa dari 0 (prioritas tertinggi) ke 65535 (prioritas terendah).

  10. Agar rute hanya berlaku untuk instance tertentu dengan tag jaringan yang cocok, tentukan tag tersebut di kolom Instance tags. Biarkan kolom ini kosong agar rute dapat diterapkan ke semua instance dalam jaringan.

  11. Pilih next hop untuk rute:

    • Default internet gateway: mengirimkan paket ke internet serta ke Google API dan layanan Google
    • Specify an instance: mengirimkan paket ke antarmuka jaringan instance VM. Tentukan instance VM berdasarkan nama dan zona. Jika tujuan rute adalah alamat IPv6, instance VM harus berupa dual-stack.
    • Specify IP address of an instance: tentukan alamat IP dari instance yang ada di jaringan VPC. Untuk rute statis IPv6 (Pratinjau), instance harus berupa stack ganda. Untuk mengetahui batasan penting bagi alamat IP next hop yang valid, lihat next hop rute statis.
    • Specify VPN tunnel: mengirimkan paket ke tunnel VPN Klasik yang ada menggunakan perutean statis.
    • Specify a forwarding rule of an internal passthrough Network Load Balancer: mengirimkan paket ke Load Balancer Jaringan passthrough internal yang ditentukan oleh nama dan region aturan penerusan internalnya. Aturan penerusan dapat memiliki alamat IPv4 atau IPv6 (Pratinjau). Versi IP aturan penerusan yang Anda tentukan harus cocok dengan versi IP rute statis yang Anda buat.
  12. Klik Create.

gcloud

Buat rute statis kustom baru dengan perintah gcloud CLI berikut:

gcloud compute routes create ROUTE_NAME \
    --network=NETWORK \
    --destination-range=DESTINATION_RANGE \
    --priority=PRIORITY \
    NEXT_HOP_SPECIFICATION

Ganti kode berikut:

  • ROUTE_NAME: nama rute
  • NETWORK: nama jaringan VPC yang berisi rute
  • DESTINATION_RANGE: alamat IPv4 atau IPv6 tujuan tempat rute ini diterapkan. Tujuan paling luas adalah 0.0.0.0/0 untuk IPv4 atau ::/0 untuk IPv6.
  • PRIORITY: prioritas rute, yang dapat berupa dari 0 (prioritas tertinggi) ke 65535 (prioritas terendah)
  • NEXT_HOP_SPECIFICATION: next hop untuk rute statis. Gunakan salah satu parameter berikut atau kombinasi parameter:

    • --next-hop-gateway=default-internet-gateway: mengirimkan paket ke internet serta ke Google API dan layanan Google.
    • --next-hop-instance=INSTANCE_NAME dan --next-hop-instance-zone=ZONE: mengirimkan paket ke antarmuka jaringan instance VM yang sudah ada. Tentukan instance VM berdasarkan nama dan zona. Jika tujuan rute adalah alamat IPv6, instance VM harus berupa dual-stack.
    • --next-hop-address=ADDRESS: menentukan alamat IP dari instance yang ada di jaringan VPC. Untuk rute statis IPv6 (Pratinjau), instance harus berupa dual-stack. Untuk mengetahui batasan penting bagi alamat IP next hop yang valid, lihat Next hop dan fitur-fitur.
    • --next-hop-vpn-tunnel=VPN_TUNNEL_NAME dan --next-hop-vpn-tunnel-region=REGION: mengirimkan paket ke tunnel VPN Klasik yang ada menggunakan perutean statis.
    • --next-hop-ilb=FORWARDING_RULE dan --next-hop-ilb-region=REGION: mengirimkan paket ke Load Balancer Jaringan passthrough internal. Tentukan aturan penerusan berdasarkan namanya (atau alamat IPv4 atau IPv6 (Pratinjau)) dan region. Versi IP aturan penerusan yang Anda tentukan harus cocok dengan versi IP rute statis yang Anda buat.

    Agar rute statis kustom hanya berlaku untuk VM tertentu berdasarkan tag jaringan, tambahkan flag --tags dan tentukan satu atau beberapa tag jaringan. Untuk mengetahui informasi selengkapnya tentang cara tag jaringan dan rute statis kustom berfungsi bersama, lihat Rute yang berlaku di ringkasan Rute. Anda dapat memasang tag ke rute statis kustom manapun.

Untuk mengetahui informasi lebih lanjut mengenai sintaks gcloud CLI, lihat dokumentasi SDK.

API

Membuat rute statis kustom baru.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes
{
  "name": "ROUTE_NAME",
  "network": "NETWORK_NAME",
  "destRange": "DESTINATION_RANGE",
  "priority": PRIORITY,
  "NEXT_HOP_SPECIFICATION"
}

Ganti kode berikut:

  • PROJECT_ID: ID project tempat rute Anda dibuat
  • ROUTE_NAME: nama rute
  • NETWORK: nama jaringan VPC yang berisi rute.
  • DESTINATION_RANGE: rentang alamat IPv4 atau IPv6 tujuan tempat rute ini diterapkan. Tujuan paling luas adalah 0.0.0.0/0 untuk IPv4 atau ::/0 untuk IPv6.
  • PRIORITY: prioritas rute, yang dapat berupa dari 0 (prioritas tertinggi) ke 65535 (prioritas terendah)
  • NEXT_HOP_SPECIFICATION: next hop untuk rute statis. Gunakan salah satu parameter atau kombinasi parameter berikut:
    • nextHopGateway: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/gateways/default-internet-gateway: mengirimkan paket ke internet serta ke Google API dan layanan Google
    • nextHopInstance: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME: mengirimkan paket ke antarmuka jaringan instance VM. Tentukan instance VM menurut nama dan zona. Jika tujuan rute adalah alamat IPv6, instance VM harus berupa dual-stack.
    • nextHopIp: ADDRESS: menentukan alamat IP instance yang ada di jaringan VPC. Untuk rute statis IPv6 (Pratinjau), instance harus berupa stack ganda. Untuk mengetahui batasan penting bagi alamat IP next hop yang valid, lihat Next hop dan fitur-fitur.
    • nextHopVpnTunnel: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/vpnTunnels/VPN_TUNNEL_NAME: mengirimkan paket ke tunnel VPN Klasik yang sudah ada menggunakan perutean statis.
    • nextHopIlb: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE: mengirimkan paket ke Load Balancer Jaringan passthrough internal. Tentukan aturan penerusan berdasarkan namanya (atau alamat IPv4 atau IPv6 (Pratinjau)) dan region. Versi IP aturan penerusan yang Anda tentukan harus cocok dengan versi IP rute statis yang Anda buat.

Agar rute statis kustom hanya berlaku untuk VM tertentu dengan tag jaringan, tambahkan kolom tags dan tentukan satu atau beberapa tag jaringan. Untuk mengetahui informasi selengkapnya tentang cara tag jaringan dan rute statis kustom berfungsi bersama, lihat Rute yang berlaku di ringkasan Rute. Anda dapat memasang tag ke rute statis kustom manapun.

Untuk informasi selengkapnya, lihat metode routes.insert.

Terraform

Anda dapat membuat rute statis menggunakan modul Terraform.

Rute statis ini membuat rute default ke internet.

module "google_compute_route" {
  source       = "terraform-google-modules/network/google//modules/routes"
  version      = "~> 9.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "default"

  routes = [
    {
      name              = "egress-internet"
      description       = "route through IGW to access internet"
      destination_range = "0.0.0.0/0"
      tags              = "egress-inet"
      next_hop_internet = "true"
    }
  ]
}

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Go

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
	"google.golang.org/protobuf/proto"
)

// createRoute creates a route with given name inside given project.
func createRoute(w io.Writer, projectID, name string) error {
	// projectID := "your_project_id"
	// name := "testname"

	ctx := context.Background()
	client, err := compute.NewRoutesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewRoutesRESTClient: %w", err)
	}
	defer client.Close()

	route := &computepb.Route{
		Name:           proto.String(name),
		Network:        proto.String("global/networks/default"),
		DestRange:      proto.String("0.0.0.0/0"),
		NextHopGateway: proto.String("global/gateways/default-internet-gateway"),
	}

	req := &computepb.InsertRouteRequest{
		Project:       projectID,
		RouteResource: route,
	}
	op, err := client.Insert(ctx, req)

	if err != nil {
		return fmt.Errorf("unable to insert a route: %w", err)
	}

	if err := op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Route created\n")

	return nil
}

Java


import com.google.cloud.compute.v1.InsertRouteRequest;
import com.google.cloud.compute.v1.Operation;
import com.google.cloud.compute.v1.Route;
import com.google.cloud.compute.v1.RoutesClient;
import java.io.IOException;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateRoute {

  public static void main(String[] args)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Cloud project you want to use.
    String projectId = "your-project-id";
    // Route name you want to use.
    String routeName = "your-route-name";
    createRoute(projectId, routeName);
  }

  // Create route for a project.
  public static Operation.Status createRoute(String projectId, String routeName)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (RoutesClient routesClient = RoutesClient.create()) {
      String nextHopGateway =
              String.format("projects/%s/global/gateways/default-internet-gateway", projectId);

      Route route = Route.newBuilder()
              .setName(routeName)
              .setDestRange("10.0.0.0/16")
              .setNetwork("global/networks/default")
              .setNextHopGateway(nextHopGateway)
              .build();

      InsertRouteRequest request = InsertRouteRequest.newBuilder()
              .setProject(projectId)
              .setRequestId(UUID.randomUUID().toString())
              .setRouteResource(route)
              .build();

      return routesClient.insertCallable().futureCall(request)
              .get(30, TimeUnit.SECONDS).getStatus();
    }
  }
}

Python

from __future__ import annotations

import sys
from typing import Any

from google.api_core.extended_operation import ExtendedOperation
from google.cloud import compute_v1


def wait_for_extended_operation(
    operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
) -> Any:
    """
    Waits for the extended (long-running) operation to complete.

    If the operation is successful, it will return its result.
    If the operation ends with an error, an exception will be raised.
    If there were any warnings during the execution of the operation
    they will be printed to sys.stderr.

    Args:
        operation: a long-running operation you want to wait on.
        verbose_name: (optional) a more verbose name of the operation,
            used only during error and warning reporting.
        timeout: how long (in seconds) to wait for operation to finish.
            If None, wait indefinitely.

    Returns:
        Whatever the operation.result() returns.

    Raises:
        This method will raise the exception received from `operation.exception()`
        or RuntimeError if there is no exception set, but there is an `error_code`
        set for the `operation`.

        In case of an operation taking longer than `timeout` seconds to complete,
        a `concurrent.futures.TimeoutError` will be raised.
    """
    result = operation.result(timeout=timeout)

    if operation.error_code:
        print(
            f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
            file=sys.stderr,
            flush=True,
        )
        print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
        raise operation.exception() or RuntimeError(operation.error_message)

    if operation.warnings:
        print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
        for warning in operation.warnings:
            print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)

    return result


def create_route(
    project_id: str,
    network: str,
    route_name: str,
    destination_range: str,
    *,
    next_hop_gateway: str | None = None,
    next_hop_ip: str | None = None,
    next_hop_instance: str | None = None,
    next_hop_vpn_tunnel: str | None = None,
    next_hop_ilb: str | None = None,
) -> compute_v1.Route:
    """
    Create a new route in selected network by providing a destination and next hop name.

    Note: The set of {next_hop_gateway, next_hop_ip, next_hop_instance, next_hop_vpn_tunnel,
        next_hop_ilb} is exclusive, you and only specify one of those parameters.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        network: name of the network the route will be created in. Available name formats:
            * https://www.googleapis.com/compute/v1/projects/{project_id}/global/networks/{network}
            * projects/{project_id}/global/networks/{network}
            * global/networks/{network}
        route_name: name of the new route.
        destination_range: range of destination IPs this route should be applied to. E.g. 10.0.0.0/16.
        next_hop_gateway: name of the gateway the traffic should be directed to.
        next_hop_ip: IP address the traffic should be directed to.
        next_hop_instance: name of the instance the traffic should be directed to. Name format:
            "projects/{project}/zones/{zone}/instances/{instance_name}"
        next_hop_vpn_tunnel: name of the VPN tunnel the traffic should be directed to. Name format:
            "projects/{project}/regions/{region}/vpnTunnels/{vpn_tunnel_name}"
        next_hop_ilb: name of a forwarding rule of the Internal Load Balancer the traffic
            should be directed to. Name format:
            "projects/{project}/regions/{region}/forwardingRules/{forwarding_rule_region}"

    Returns:
        A new compute_v1.Route object.
    """
    excl_args = {
        next_hop_instance,
        next_hop_ilb,
        next_hop_vpn_tunnel,
        next_hop_gateway,
        next_hop_ip,
    }
    args_set = sum(1 if arg is not None else 0 for arg in excl_args)

    if args_set != 1:
        raise RuntimeError("You must specify exactly one next_hop_* parameter.")

    route = compute_v1.Route()
    route.name = route_name
    route.network = network
    route.dest_range = destination_range

    if next_hop_gateway:
        route.next_hop_gateway = next_hop_gateway
    elif next_hop_ip:
        route.next_hop_ip = next_hop_ip
    elif next_hop_instance:
        route.next_hop_instance = next_hop_instance
    elif next_hop_vpn_tunnel:
        route.next_hop_vpn_tunnel = next_hop_vpn_tunnel
    elif next_hop_ilb:
        route.next_hop_ilb = next_hop_ilb

    route_client = compute_v1.RoutesClient()
    operation = route_client.insert(project=project_id, route_resource=route)

    wait_for_extended_operation(operation, "route creation")

    return route_client.get(project=project_id, route=route_name)

Menambahkan rute default IPv4

Rute statis default IPv4 (0.0.0.0/0) dengan next-hop-gateway yang ditetapkan ke default-internet-gateway dikonfigurasi secara otomatis untuk setiap jaringan VPC. Gunakan langkah-langkah ini untuk membuat ulang rute tersebut jika perlu.

Konsol

  1. Di Konsol Google Cloud, buka halaman Routes.

    Buka Rute

  2. Klik tab Route management.

  3. Klik Create route.

  4. Tentukan nama dan deskripsi rute.

  5. Pilih jaringan yang ada untuk rute tersebut.

  6. Untuk Rentang IP tujuan, masukkan 0.0.0.0/0.

  7. Tentukan prioritas rute tersebut. Prioritas dapat berupa dari 0 (prioritas tertinggi) ke 65535 (prioritas terendah).

  8. Untuk Next hop, pilih Default internet gateway.

  9. Klik Create.

gcloud

Membuat ulang rute default IPv4 untuk jaringan.

gcloud compute routes create ROUTE_NAME \
    --destination-range=0.0.0.0/0 \
    --network=NETWORK \
    --next-hop-gateway=default-internet-gateway

Ganti kode berikut:

  • ROUTE_NAME: nama untuk rute
  • NETWORK: nama jaringan VPC yang berisi rute

API

Membuat ulang rute default IPv4 untuk jaringan.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes
{
  "destRange": "0.0.0.0/0",
  "name": "ROUTE_NAME",
  "network": "NETWORK_NAME",
  "nextHopGateway": "projects/PROJECT_ID/global/gateways/default-internet-gateway"
}

Ganti kode berikut:

  • PROJECT_ID: ID project tempat rute Anda dibuat
  • ROUTE_NAME: nama untuk rute
  • NETWORK_NAME: nama jaringan VPC yang berisi rute

Menambahkan rute default IPv6

Rute statis default IPv6 (::/0) dengan next-hop-gateway yang ditetapkan ke default-internet-gateway akan otomatis dikonfigurasi untuk jaringan VPC saat Anda membuat subnet dual-stack dengan jenis akses IP internal. Anda dapat menghapus rute untuk memblokir semua traffic IPv6 dari VM ke internet. Anda juga dapat membuat ulang rute jika perlu.

Konsol

  1. Di Konsol Google Cloud, buka halaman Routes.

    Buka Rute

  2. Klik tab Route management.

  3. Klik Create route.

  4. Tentukan nama dan deskripsi rute.

  5. Pilih jaringan yang ada untuk rute tersebut.

  6. Untuk Rentang IP tujuan, masukkan ::/0.

  7. Tentukan prioritas rute tersebut. Prioritas dapat berupa dari 0 (prioritas tertinggi) ke 65535 (prioritas terendah).

  8. Untuk Next hop, pilih Default internet gateway.

  9. Klik Create.

gcloud

Membuat ulang rute default IPv6 untuk jaringan.

gcloud compute routes create ROUTE_NAME \
    --destination-range=::/0 \
    --network=NETWORK \
    --next-hop-gateway=default-internet-gateway

Ganti kode berikut:

  • ROUTE_NAME: nama untuk rute.
  • NETWORK: nama jaringan VPC yang berisi rute.

API

Membuat ulang rute default IPv6 untuk jaringan.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes
{
  "destRange": "::/0",
  "name": "ROUTE_NAME",
  "network": "NETWORK_NAME",
  "nextHopGateway": "projects/PROJECT_ID/global/gateways/default-internet-gateway"
}

Ganti kode berikut:

  • PROJECT_ID: ID project tempat rute Anda dibuat
  • ROUTE_NAME: nama untuk rute
  • NETWORK_NAME: nama jaringan VPC yang berisi rute

Mengubah rute statis

Anda tidak dapat mengedit atau memperbarui rute statis setelah membuatnya. Untuk mengubah rute statis, Anda harus menghapusnya dan membuat pengganti.

Menghapus rute statis

Untuk menghapus rute, lakukan langkah berikut.

Konsol

  1. Di Konsol Google Cloud, buka halaman Routes.

    Buka Rute

  2. Klik tab Route management.

  3. Centang kotak di samping aturan yang ingin Anda hapus.

  4. Klik Delete.

  5. Klik Delete lagi untuk mengonfirmasi.

gcloud

Hapus rute statis kustom menggunakan perintah gcloud CLI berikut:

gcloud compute routes delete ROUTE_NAME

Ganti ROUTE_NAME dengan nama rute yang ingin Anda hapus.

API

Hapus rute statis kustom untuk menghapusnya dari jaringan VPC Anda menggunakan metode routes.delete:

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes/ROUTE_NAME

Ganti kode berikut:

  • PROJECT_ID: ID project tempat rute Anda berada.
  • ROUTE_NAME: nama rute yang akan dihapus.

Go

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
)

// deleteRoute deletes a route by name in given project.
func deleteRoute(w io.Writer, projectID, name string) error {
	// projectID := "your_project_id"
	// name := "testname"

	ctx := context.Background()
	client, err := compute.NewRoutesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewRoutesRESTClient: %w", err)
	}
	defer client.Close()

	req := &computepb.DeleteRouteRequest{
		Project: projectID,
		Route:   name,
	}
	op, err := client.Delete(ctx, req)

	if err != nil {
		return fmt.Errorf("unable to delete a route: %w", err)
	}

	if err := op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Route deleted\n")

	return nil
}

Java


import com.google.cloud.compute.v1.DeleteRouteRequest;
import com.google.cloud.compute.v1.RoutesClient;
import java.io.IOException;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class DeleteRoute {

  public static void main(String[] args)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Cloud project you want to use.
    String projectId = "your-project-id";
    // Route name you want to delete.
    String routeName = "your-route-name";

    deleteRoute(projectId, routeName);
  }

  // Deletes a route from a project.
  public static void deleteRoute(String projectId, String routeName)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (RoutesClient routesClient = RoutesClient.create()) {
      DeleteRouteRequest request = DeleteRouteRequest.newBuilder()
              .setProject(projectId)
              .setRoute(routeName)
              .setRequestId(UUID.randomUUID().toString())
              .build();
      routesClient.deleteCallable().futureCall(request).get(30, TimeUnit.SECONDS);
    }
  }
}

Python

from __future__ import annotations

import sys
from typing import Any

from google.api_core.extended_operation import ExtendedOperation
from google.cloud import compute_v1


def wait_for_extended_operation(
    operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
) -> Any:
    """
    Waits for the extended (long-running) operation to complete.

    If the operation is successful, it will return its result.
    If the operation ends with an error, an exception will be raised.
    If there were any warnings during the execution of the operation
    they will be printed to sys.stderr.

    Args:
        operation: a long-running operation you want to wait on.
        verbose_name: (optional) a more verbose name of the operation,
            used only during error and warning reporting.
        timeout: how long (in seconds) to wait for operation to finish.
            If None, wait indefinitely.

    Returns:
        Whatever the operation.result() returns.

    Raises:
        This method will raise the exception received from `operation.exception()`
        or RuntimeError if there is no exception set, but there is an `error_code`
        set for the `operation`.

        In case of an operation taking longer than `timeout` seconds to complete,
        a `concurrent.futures.TimeoutError` will be raised.
    """
    result = operation.result(timeout=timeout)

    if operation.error_code:
        print(
            f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
            file=sys.stderr,
            flush=True,
        )
        print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
        raise operation.exception() or RuntimeError(operation.error_message)

    if operation.warnings:
        print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
        for warning in operation.warnings:
            print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)

    return result


def delete_route(project_id: str, route_name: str) -> None:
    """
    Delete a route in project.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        route_name: name of the route to delete.
    """

    route_client = compute_v1.RoutesClient()
    operation = route_client.delete(project=project_id, route=route_name)

    wait_for_extended_operation(operation, "route deletion")

Penerapan perubahan rute

Saat Anda menambahkan atau menghapus rute statis, rute tersebut akan diterapkan ke semua region dan instance VM di jaringan VPC Anda. Status operasi rute PENDING atau RUNNING menunjukkan bahwa perubahan rute sedang dalam antrean.

Setelah masuk dalam antrean, status operasi rute akan berubah menjadi DONE. Perlu waktu tambahan hingga 30 detik sebelum semua instance VM di jaringan VPC dan jaringan Peering Jaringan VPC Anda menggunakan rute baru atau berhenti menggunakan rute lama.

Jika Anda menambahkan atau menghapus beberapa rute statis secara bersamaan, perubahan dapat diterapkan secara acak. Tidak ada jaminan bahwa urutan pengiriman perubahan rute juga digunakan untuk urutan pemrosesannya. Instance yang berbeda mungkin mengetahui perubahan tersebut pada waktu yang berbeda.

Jika perlu membuat perubahan rute yang bergantung satu sama lain, Anda harus membuat perubahan tersebut secara berurutan dengan melakukan perubahan berikutnya hanya setelah status perubahan sebelumnya adalah DONE dan 30 detik tambahan telah berlalu.

Mengaktifkan penerusan IP untuk instance

Secara default, penerusan IP dinonaktifkan, dan Google Cloud melakukan pemeriksaan alamat sumber yang ketat. Tunduk pada konfigurasi firewall keluar yang efektif, VM dapat mengeluarkan paket dengan sumber berikut:

  • Alamat IPv4 internal utama dari antarmuka jaringan (NIC) instance.
  • Rentang IP alias apa pun yang dikonfigurasi pada NIC instance.
  • Jika rentang alamat IPv6 dikonfigurasi pada subnet, dan instance berupa dual-stack, berarti alamat IPv6 apa pun yang ditetapkan ke NIC.
  • Alamat IP internal atau eksternal yang terkait dengan aturan penerusan, untuk load balancing passthrough atau penerusan protokol, jika instance tersebut adalah backend untuk Load Balancer Jaringan passthrough internal, Load Balancer Jaringan passthrough eksternal, atau direferensikan oleh instance target.

Agar dapat menggunakan VM sebagai next hop untuk suatu rute, VM perlu meneruskan paket yang sumbernya tidak cocok dengan salah satu alamat atau rentang IP dalam daftar sebelumnya. Untuk meneruskan paket dengan alamat sumber arbitrer, Anda harus mengaktifkan penerusan IP:

  • Saat membuat atau mengupdate VM, Anda mengaktifkan penerusan IP dengan mengikuti petunjuk di bagian ini. Pengaktifan penerusan IP berlaku untuk semua NIC di VM.
  • Selain langkah-langkah di bagian ini, Anda harus mengaktifkan penerusan IP dalam sistem operasi tamu VM. Untuk melakukannya di Linux, tetapkan nilai salah satu atau kedua parameter kernel berikut ke 1: net.ipv4.ip_forward (untuk IPv4) atau net.ipv6.conf.all.forwarding (untuk IPv6).

Untuk mengaktifkan penerusan IP saat Anda membuat VM, selesaikan langkah-langkah berikut.

Konsol

  1. Di konsol Google Cloud, buka halaman Instance VM.

    Buka instance VM

  2. Klik Create instance.

  3. Di bagian Advanced options, luaskan Networking, disks, security, management, sole-tenancy.

  4. Luaskan bagian Networking.

  5. Di bagian IP forwarding, centang kotak Enable.

gcloud

Saat membuat instance, tambahkan flag --can-ip-forward ke perintah Anda:

gcloud compute instances create ... --can-ip-forward

API

Saat membuat instance, gunakan kolom canIpForward untuk mengaktifkan penerusan IP:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
  "canIpForward": true,
  ...other fields
}

Ganti kode berikut:

  • PROJECT_ID: ID project yang berisi instance
  • ZONE: zona Google Cloud yang berisi instance

Untuk mengetahui informasi selengkapnya, lihat metode instances.insert.

Terraform

Anda dapat menggunakan resource Terraform untuk membuat instance VM dengan penerusan IP yang diaktifkan.

Dalam contoh ini, argumen Terraform memiliki nilai yang telah ditetapkan yang dapat Anda ubah.

resource "google_compute_instance" "default" {
  project      = var.project_id # Replace this with your project ID in quotes
  zone         = "southamerica-east1-b"
  name         = "instance-next-hop"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    network = "default"
  }
  can_ip_forward = true
}

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Setelah mengaktifkan penerusan IP, lanjutkan dengan proses pembuatan VM.

Untuk mengaktifkan penerusan IP pada VM yang ada, update properti instance canIpForward.

Langkah selanjutnya