Utiliser des routes

Cette page explique comment créer et gérer des routes pour les réseaux cloud privés virtuels (VPC) dans Google Cloud. Dans cette page, nous partons du principe que vous connaissez les différents types de routes Google Cloud et leurs caractéristiques (décrites sur la page Routes).

Chaque nouveau réseau comprend deux types de routes générées par le système : une route par défaut que vous pouvez supprimer ou remplacer, et une route de sous-réseau pour chaque sous-réseau. Vous ne pouvez pas supprimer une route de sous-réseau sans supprimer le sous-réseau correspondant.

Outre les routes générées par le système, vous pouvez créer des routes statiques personnalisées.

Répertorier les routes d'un réseau VPC

Vous pouvez utiliser Google Cloud CLI ou l'API pour répertorier et afficher les détails des types de routes suivants :

Ni les commandes de la gcloud CLI, ni les méthodes d'API n'affichent les types de routes suivants :

Pour afficher la vue complète de la route, utilisez la console Google Cloud. Pour répertorier et décrire les routes basées sur des règles, consultez la page Utiliser des routes basées sur des règles.

Console

  1. Dans la console Google Cloud, accédez à la page Routes.

    Accéder à la page Routes

  2. Dans l'onglet Routes effectives, procédez comme suit :

    • Choisissez un réseau VPC.
    • Sélectionnez une région.
  3. Cliquez sur Afficher.

  4. Vous pouvez appliquer un filtre en fonction de propriétés telles que le type de route, la plage d'adresses IP de destination et le type de prochain saut.

  5. Facultatif : Cliquez sur le bouton Afficher les routes supprimées pour afficher les routes supprimées. Pour afficher le motif de la suppression d'un itinéraire, pointez sur l'icône de la colonne État.

gcloud

Pour répertorier et afficher les détails des routes, utilisez les commandes gcloud compute routes. Les routes de sous-réseau et les routes statiques du réseau VPC local et de tous les réseaux VPC associés sont affichées. Les autres types de parcours ne sont pas affichés. Pour afficher tous les itinéraires, utilisez la console Google Cloud.

Pour lister les itinéraires, procédez comme suit:

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

Pour obtenir des informations sur un itinéraire, procédez comme suit:

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

Remplacez les éléments suivants :

  • NETWORK_NAME : nom du réseau VPC.
  • PROJECT_ID : ID du projet contenant votre réseau VPC.
  • ROUTE_NAME : nom de la route.

API

Pour répertorier et afficher les détails des routes, utilisez les méthodes routes.list et routes.get. Les routes de sous-réseau et les routes statiques du réseau VPC local et de tous les réseaux VPC associés sont affichées. Les autres types de parcours ne sont pas affichés. Pour afficher tous les itinéraires, utilisez la console Google Cloud.

Pour lister les itinéraires, procédez comme suit:

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

Pour obtenir des informations sur un itinéraire, procédez comme suit:

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

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet contenant votre réseau VPC.
  • NETWORK_URL : URL du réseau VPC.
  • ROUTE_NAME : nom de la route.

Répertorier les routes applicables à une interface réseau de VM

Vous pouvez utiliser la console Google Cloud pour afficher les routes applicables à l'interface réseau d'une VM. Cette vue réduit la liste des routes que vous pouvez utiliser pour le trafic de sortie.

Pour afficher les routes applicables à une interface réseau spécifique de VM, procédez comme suit.

Console

  1. Dans la console Google Cloud, accédez à la page Instances de VM.

    Accéder à la page "Instances de VM"

  2. Recherchez une instance de VM dans la liste. Dans le menu Autres actions à la fin de la ligne, sélectionnez Afficher les détails du réseau.

  3. Si une instance comporte plusieurs interfaces réseau, sélectionnez celle que vous souhaitez afficher dans la section Informations sur l'interface réseau.

  4. Dans la section Détails des pare-feu et des routes, cliquez sur l'onglet Routes pour afficher toutes les routes qui s'appliquent à l'interface réseau, triées par nom de route.

Ajouter et supprimer des routes statiques

Vous pouvez ajouter ou supprimer des routes statiques et des routes basées sur des règles, qui sont locales sur votre réseau VPC. Cette section explique comment ajouter et supprimer des routes statiques locales. Pour plus d'informations sur l'ajout et la suppression de routes basées sur des règles, consultez la page Utiliser des routes basées sur des règles.

Les routes de sous-réseau sont ajoutées et supprimées automatiquement lorsque vous ajoutez ou supprimez un sous-réseau. Pour plus d'informations sur l'ajout et la suppression de sous-réseaux, consultez la section Utiliser des sous-réseaux.

Toutes les routes d'un réseau VPC connectées par l'appairage de réseaux VPC doivent être manipulées dans le réseau VPC qui exporte ces routes. Pour en savoir plus, consultez la section Options d'échange de routes.

Avant d'ajouter une route statique

Avant d'ajouter une route statique, tenez compte des points suivants:

  • Assurez-vous de bien comprendre les différents types de prochains sauts que les routes statiques peuvent utiliser. Pour obtenir des informations sur les différents types de prochains sauts des routes statiques, y compris ceux qui acceptent les destinations IPv6, consultez Prochains sauts et caractéristiques.
  • À moins que vous n'utilisiez des sous-réseaux hybrides, une route statique ne peut pas avoir de plage de destination identique ou plus spécifique que celle d'une route de sous-réseau ou d'appairage. Pour plus d'informations, consultez la section Interactions avec les routes statiques personnalisées dans la présentation des routes et la section Interactions avec les routes statiques et de sous-réseau dans la documentation de l'appairage de réseaux VPC.
  • Pour éviter les conflits lors de l'utilisation d'un réseau VPC en mode automatique, ne créez pas de routes statiques dont les destinations correspondent à 10.128.0.0/9. Pour en savoir plus, consultez les plages d'adresses IPv4 en mode automatique.
  • Les destinations des routes statiques personnalisées ne peuvent chevaucher aucune plage allouée interne.
  • Assurez-vous de bien connaître les instances utilisées comme prochains sauts avant de créer une route statique personnalisée qui utilise une VM comme prochain saut. Google Cloud vérifie seulement qu'une VM existe au moment où vous créez la route si vous choisissez une instance de prochain saut.
  • Si vous créez une route à l'aide d'un tag réseau, seules les VM dotées de ce tag recevront cette route. Cependant, les VM dotées d'un tag continuent de recevoir toutes les routes qui n'ont pas de tag réseau.

Ajouter une route statique

Ajoutez une route statique à un réseau. Pour en savoir plus sur les différents types de prochains sauts des routes statiques, y compris ceux qui acceptent les destinations IPv6, consultez Prochains sauts et caractéristiques.

Console

  1. Dans la console Google Cloud, accédez à la page Routes.

    Accéder à la page Routes

  2. Cliquez sur l'onglet Gestion des routes.

  3. Cliquez sur Créer une route.

  4. Spécifiez un nom et une description pour la route.

  5. Dans la liste Réseau, sélectionnez un réseau existant pour la route.

  6. Dans la liste Type de route, sélectionnez Route statique.

  7. Dans la liste Version IP, sélectionnez la version d'adresse IP requise :

    • Pour créer une route statique IPv4, sélectionnez IPv4.
    • Pour créer une route statique IPv6, sélectionnez IPv6.
  8. Spécifiez une plage d'adresses IP de destination. La destination la plus large possible est 0.0.0.0/0 pour IPv4 ou ::/0 pour IPv6.

  9. Spécifiez une priorité pour la route. La priorité peut être comprise entre 0 (priorité la plus élevée) et 65535 (priorité la plus basse).

  10. Pour rendre la route applicable uniquement à la sélection d'instances associées aux tags réseau correspondants, spécifiez ces tags dans le champ Tags des instances. Laissez le champ vide pour rendre la route applicable à toutes les instances du réseau.

  11. Sélectionnez un prochain saut pour la route :

    • Passerelle Internet par défaut : envoie les paquets vers Internet et les API et services Google.
    • Spécifier une instance : envoie les paquets à l'interface réseau d'une instance de VM. Spécifiez l'instance de VM par nom et par zone. Si la destination de la route est une adresse IPv6, l'instance de VM doit être de type double pile.
    • Spécifier l'adresse IP d'une instance : indiquez l'adresse IP d'une instance existante dans le réseau VPC. Pour les routes statiques IPv6 (Preview), l'instance doit être de type double pile. Pour connaître les restrictions importantes concernant les adresses IP de saut suivant valides, consultez la section Sauts suivants des routes statiques.
    • Spécifier un tunnel VPN : envoie les paquets à un tunnel VPN classique existant à l'aide d'un routage statique.
    • Spécifier une règle de transfert pour un équilibreur de charge réseau passthrough interne : envoie les paquets à un équilibreur de charge réseau passthrough interne qui est spécifié par le nom et la région de son équilibreur de charge réseau interne. La règle de transfert peut avoir une adresse IPv4 ou IPv6 (Preview). La version IP de la règle de transfert que vous spécifiez doit correspondre à la version IP de la route statique que vous créez.
  12. Cliquez sur Créer.

gcloud

Créez une route statique personnalisée en exécutant la commande suivante de la gcloud CLI :

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

Remplacez les éléments suivants :

  • ROUTE_NAME : nom de la route.
  • NETWORK : nom du réseau VPC contenant la route.
  • DESTINATION_RANGE : adresses IPv4 ou IPv6 de destination auxquelles cette route s'applique. La destination la plus large possible est 0.0.0.0/0 pour IPv4 ou ::/0 pour IPv6.
  • PRIORITY : priorité de la route, qui peut être comprise entre 0 (priorité la plus élevée) et 65535 (priorité la plus basse).
  • NEXT_HOP_SPECIFICATION : prochain saut de la route statique. Utilisez l'un des paramètres suivants ou une combinaison de ces paramètres :

    • --next-hop-gateway=default-internet-gateway : envoyez les paquets vers Internet et les API et services Google.
    • --next-hop-instance=INSTANCE_NAME et --next-hop-instance-zone=ZONE : envoyez les paquets à l'interface réseau d'une instance de VM existante. Spécifiez l'instance de VM par nom et par zone. Si la destination de la route est une adresse IPv6, l'instance de VM doit être de type double pile.
    • --next-hop-address=ADDRESS : spécifie l'adresse IP d'une instance existante dans le réseau VPC. Pour les routes statiques IPv6 (Preview), l'instance doit être de type double pile. Pour connaître les restrictions importantes concernant les adresses IP de prochain saut valides, consultez la section Prochains sauts et caractéristiques.
    • --next-hop-vpn-tunnel=VPN_TUNNEL_NAME et --next-hop-vpn-tunnel-region=REGION : envoyez les paquets à un tunnel VPN classique existant à l'aide d'un routage statique.
    • --next-hop-ilb=FORWARDING_RULE et --next-hop-ilb-region=REGION : envoyez les paquets à un équilibreur de charge réseau passthrough interne. Spécifiez la règle de transfert par son nom (ou adresse IPv4 ou IPv6 (Preview)) et sa région. La version IP de la règle de transfert que vous spécifiez doit correspondre à la version IP de la route statique que vous créez.

    Pour que la route statique personnalisée ne s'applique qu'à certaines VM identifiées par tag réseau, ajoutez l'option --tags et spécifiez un ou plusieurs tags réseau. Pour plus d'informations sur la manière dont les tags réseau et les routes statiques personnalisées fonctionnent ensemble, consultez la section Routes applicables de la page "Présentation des routes". Vous pouvez utiliser des tags avec n'importe quelle route statique personnalisée.

Pour en savoir plus sur la syntaxe de la gcloud CLI, consultez la documentation du SDK.

API

Créez une route statique personnalisée.

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"
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet dans lequel votre route est créée.
  • ROUTE_NAME : nom de la route.
  • NETWORK : nom du réseau VPC contenant la route.
  • DESTINATION_RANGE : plage d'adresses IPv4 ou IPv6 de destination à laquelle cette route s'applique. La destination la plus large possible est 0.0.0.0/0 pour IPv4 ou ::/0 pour IPv6.
  • PRIORITY : priorité de la route, qui peut être comprise entre 0 (priorité la plus élevée) et 65535 (priorité la plus basse).
  • NEXT_HOP_SPECIFICATION : prochain saut de la route statique. Utilisez l'un des paramètres suivants ou une combinaison de ces paramètres :
    • nextHopGateway: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/gateways/default-internet-gateway : envoie les paquets vers Internet et les API et services Google.
    • nextHopInstance: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME : envoie les paquets à l'interface réseau d'une instance de VM. Spécifiez l'instance de VM par nom et par zone. Si la destination de la route est une adresse IPv6, l'instance de VM doit être de type double pile.
    • nextHopIp: ADDRESS : spécifie l'adresse IP d'une instance existante dans le réseau VPC. Pour les routes statiques IPv6 (Preview), l'instance doit être de type double pile. Pour connaître les restrictions importantes concernant les adresses IP de prochain saut valides, consultez la section Prochains sauts et caractéristiques.
    • nextHopVpnTunnel: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/vpnTunnels/VPN_TUNNEL_NAME : envoie les paquets à un tunnel VPN classique existant à l'aide d'un routage statique.
    • nextHopIlb: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE : envoie les paquets à un équilibreur de charge réseau passthrough interne. Spécifiez la règle de transfert par son nom (ou adresse IPv4 ou IPv6 (Preview)) et sa région. La version IP de la règle de transfert que vous spécifiez doit correspondre à la version IP de la route statique que vous créez.

Pour que la route statique personnalisée ne s'applique qu'à certaines VM identifiées par tag réseau, ajoutez le champ tags et spécifiez un ou plusieurs tags réseau. Pour plus d'informations sur la manière dont les tags réseau et les routes statiques personnalisées fonctionnent ensemble, consultez la section Routes applicables de la page "Présentation des routes". Vous pouvez utiliser des tags avec n'importe quelle route statique personnalisée.

Pour plus d'informations, reportez-vous à la méthode routes.insert.

Terraform

Vous pouvez créer une route statique à l'aide d'un module Terraform.

Cette route statique crée une route par défaut vers 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"
    }
  ]
}

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.

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)

Ajouter une route IPv4 par défaut

La route statique IPv4 par défaut (0.0.0.0/0) dont la passerelle de prochain saut (next-hop-gateway) est définie sur default-internet-gateway est automatiquement configurée pour chaque réseau VPC. Suivez la procédure ci-dessous pour recréer cette route si nécessaire.

Console

  1. Dans la console Google Cloud, accédez à la page Routes.

    Accéder à la page Routes

  2. Cliquez sur l'onglet Gestion des routes.

  3. Cliquez sur Créer une route.

  4. Spécifiez un nom et une description pour la route.

  5. Sélectionnez un réseau existant pour la route.

  6. Dans le champ Plage d'adresses IP de destination, saisissez 0.0.0.0/0.

  7. Spécifiez une priorité pour la route. La priorité peut être comprise entre 0 (priorité la plus élevée) et 65535 (priorité la plus basse).

  8. Pour Saut suivant, sélectionnez Passerelle Internet par défaut.

  9. Cliquez sur Créer.

gcloud

Recréez la route IPv4 par défaut pour un réseau.

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

Remplacez les éléments suivants :

  • ROUTE_NAME : nom de la route.
  • NETWORK : nom du réseau VPC contenant la route.

API

Recréez la route IPv4 par défaut pour un réseau.

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"
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet dans lequel votre route est créée.
  • ROUTE_NAME : nom de la route.
  • NETWORK_NAME : nom du réseau VPC contenant la route.

Ajouter une route IPv6 par défaut

La route statique IPv6 par défaut (::/0) dont la passerelle de saut suivant (next-hop-gateway) est définie sur default-internet-gateway est automatiquement configurée pour le réseau VPC lorsque vous créez un sous-réseau à double-pile avec accès aux adresses IP externes. Vous pouvez supprimer la route pour bloquer tout le trafic IPv6 des VM vers Internet. Vous pouvez recréer la route si nécessaire.

Console

  1. Dans la console Google Cloud, accédez à la page Routes.

    Accéder à la page Routes

  2. Cliquez sur l'onglet Gestion des routes.

  3. Cliquez sur Créer une route.

  4. Spécifiez un nom et une description pour la route.

  5. Sélectionnez un réseau existant pour la route.

  6. Dans le champ Plage d'adresses IP de destination, saisissez ::/0.

  7. Spécifiez une priorité pour la route. La priorité peut être comprise entre 0 (priorité la plus élevée) et 65535 (priorité la plus basse).

  8. Pour Saut suivant, sélectionnez Passerelle Internet par défaut.

  9. Cliquez sur Créer.

gcloud

Recréez la route IPv6 par défaut pour un réseau.

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

Remplacez les éléments suivants :

  • ROUTE_NAME : nom pour la route.
  • NETWORK : nom du réseau VPC contenant la route.

API

Recréez la route IPv6 par défaut pour un réseau.

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"
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet dans lequel votre route est créée.
  • ROUTE_NAME : nom de la route.
  • NETWORK_NAME : nom du réseau VPC contenant la route.

Modifier une route statique

Vous ne pouvez pas modifier ou mettre à jour une route statique après l'avoir créée. Pour modifier une route statique, vous devez la supprimer et créer une route de remplacement.

Supprimer une route statique

Pour supprimer une route, procédez comme suit :

Console

  1. Dans la console Google Cloud, accédez à la page Routes.

    Accéder à la page Routes

  2. Cliquez sur l'onglet Gestion des routes.

  3. Cochez la case située à côté de la règle que vous souhaitez supprimer.

  4. Cliquez sur Supprimer.

  5. Cliquez à nouveau sur Supprimer pour confirmer votre choix.

gcloud

Supprimez une route statique personnalisée à l'aide de la commande suivante de la gcloud CLI :

gcloud compute routes delete ROUTE_NAME

Remplacez ROUTE_NAME par le nom du point de la route que vous souhaitez supprimer.

API

Supprimez une route statique personnalisée pour la retirer de votre réseau VPC à l'aide de la méthode routes.delete :

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

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet dans lequel se trouve votre route.
  • ROUTE_NAME : nom de la route à supprimer

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")

Propagation des modifications de route

Lorsque vous ajoutez ou supprimez une route statique, celle-ci se propage à toutes les régions et instances de VM de votre réseau VPC. L'état d'opération de routage PENDING ou RUNNING indique que la modification de la route est mise en file d'attente.

Après mise en file d'attente, l'état de l'opération de routage passe à DONE. Pour utiliser une nouvelle route ou arrêter d'en utiliser une ancienne, la propagation à toutes les instances de VM de votre réseau VPC et de vos réseaux d'appairage de réseaux VPC peut prendre 30 secondes supplémentaires.

Si vous ajoutez ou supprimez simultanément plusieurs routes statiques, les modifications peuvent être appliquées dans n'importe quel ordre. Rien ne garantit que l'ordre dans lequel vous soumettez les modifications de route soit l'ordre dans lequel elles sont traitées. Différentes instances peuvent prendre connaissance des modifications à différents moments.

Si vous devez apporter des modifications de route interdépendantes, vous ne devez effectuer les modifications de manière séquentielle qu'après que l'état de la modification précédente a été défini sur DONE et que 30 secondes supplémentaires sont écoulées.

Activer le transfert IP pour les instances

Par défaut, le transfert IP est désactivé et Google Cloud effectue une vérification stricte de l'adresse source. Sous réserve de la configuration effective du pare-feu de sortie, une VM peut émettre des paquets avec les sources suivantes :

  • Adresse IPv4 interne principale de la carte d'interface réseau (NIC) d'une instance.
  • Toutes les plages d'adresses IP d'alias configurées sur la carte d'interface réseau d'une instance.
  • Si une plage d'adresses IPv6 est configurée sur le sous-réseau et que l'instance est de type double pile, l'une des adresses IPv6 attribuées à la carte d'interface réseau.
  • L'adresse IP interne ou externe associée à une règle de transfert, pour l'équilibrage de charge passthrough ou le transfert de protocole, si l'instance est un backend pour un équilibreur de charge réseau passthrough interne, un équilibreur de charge réseau passthrough externe, ou est référencée par une instance cible.

Pour être utilisable comme prochain saut d'une route, une VM doit transférer des paquets dont les sources ne correspondent pas à l'une des adresses IP ou plages d'adresses IP de la liste précédente. Pour transférer des paquets avec des adresses sources arbitraires, vous devez activer le transfert IP :

  • Lorsque vous créez ou mettez à jour une VM, suivez les instructions de la présente section pour activer le transfert IP. L'activation du transfert IP s'applique à toutes les cartes d'interface réseau (NIC) de la VM.
  • Outre les étapes de la présente section, vous devez activer le transfert IP dans le système d'exploitation invité de la VM. Pour effectuer cette opération sous Linux, définissez la valeur de l'un des paramètres de noyau suivants, ou les deux, sur 1 : net.ipv4.ip_forward (pour IPv4) ou net.ipv6.conf.all.forwarding (pour IPv6).

Pour activer le transfert IP lorsque vous créez une VM, procédez comme suit.

Console

  1. Dans la console Google Cloud, accédez à la page Instances de VM.

    Accéder à la page "Instances de VM"

  2. Cliquez sur Créer une instance.

  3. Dans la section Options avancées, développez la section Mise en réseau, disques, sécurité, gestion, location unique.

  4. Développez la section Mise en réseau.

  5. Dans la section Transfert IP, cochez la case Activer.

gcloud

Lorsque vous créez une instance, ajoutez l'option --can-ip-forward à votre commande :

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

API

Lorsque vous créez une instance, utilisez le champ canIpForward pour activer le transfert IP :

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

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet contenant l'instance
  • ZONE : zone Google Cloud contenant l'instance

Pour en savoir plus, consultez la section sur la méthode instances.insert.

Terraform

Vous pouvez utiliser la ressource Terraform pour créer une instance de VM sur laquelle le transfert IP est activé.

Dans cet exemple, les valeurs des arguments Terraform peuvent être modifiées.

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
}

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.

Après avoir activé le transfert IP, continuez le processus de création de VM.

Pour activer le transfert IP sur une VM existante, mettez à jour la propriété d'instance canIpForward.

Étapes suivantes