Use trajetos

Esta página descreve como criar e gerir rotas para redes da nuvem virtual privada (VPC) no Trusted Cloud by S3NS. Esta página pressupõe que conhece os diferentes tipos de Trusted Cloud rotas e as respetivas características, conforme descrito em Rotas.

Todas as novas redes têm dois tipos de trajetos gerados pelo sistema: um trajeto predefinido, que pode remover ou substituir, e um trajeto de sub-rede para cada uma das respetivas sub-redes. Não pode remover uma rota de sub-rede, a menos que elimine a própria sub-rede correspondente.

Além das rotas geradas pelo sistema, pode criar outras rotas estáticas personalizadas.

Indique trajetos para uma rede de VPC

Pode usar a CLI Google Cloud ou a API para listar e ver detalhes sobre os seguintes tipos de rotas:

Nem os comandos da CLI gcloud nem os métodos da API mostram os seguintes tipos de trajetos:

Para ver a vista do trajeto completa, use a Trusted Cloud consola. Para listar e descrever rotas baseadas em políticas, consulte o artigo Use rotas baseadas em políticas.

Consola

  1. Na Trusted Cloud consola, aceda à página Rotas.

    Aceda a Trajetos

  2. No separador Rotas eficazes, faça o seguinte:

    • Escolha uma rede de VPC.
    • Escolha uma região.
  3. Clique em Ver.

  4. Pode filtrar por propriedades, incluindo o tipo de trajeto, o intervalo de IPs de destino e o tipo de próximo salto.

  5. Opcional: clique no botão Mostrar trajetos suprimidos para o ativar e ver os trajetos suprimidos. Para ver o motivo pelo qual uma rota foi suprimida, posicione o cursor do rato sobre o ícone na coluna Estado.

gcloud

Para listar e ver detalhes das rotas de sub-rede e das rotas estáticas, use os comandosgcloud compute routes. Estes comandos não mostram outros tipos de trajetos. Para ver todos os trajetos, use a Trusted Cloud consola.

Para listar trajetos, faça o seguinte:

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

Para ver os detalhes de um trajeto, faça o seguinte:

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

Substitua o seguinte:

  • NETWORK_NAME: o nome da rede da VPC
  • PROJECT_ID: o ID do projeto que contém a sua rede VPC
  • ROUTE_NAME: o nome do trajeto

API

Para listar e ver detalhes das rotas de sub-rede e das rotas estáticas, use os métodos routes.list e routes.get. Estes métodos não mostram outros tipos de trajetos. Para ver todos os trajetos, use a Trusted Cloud consola.

Para listar trajetos, faça o seguinte:

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

Para ver os detalhes de um trajeto, faça o seguinte:

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

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto que contém a sua rede VPC
  • NETWORK_URL: o URL da rede VPC
  • ROUTE_NAME: o nome do trajeto

Apresente uma lista de rotas aplicáveis para uma interface de rede de VM

Pode usar a Trusted Cloud consola para ver as rotas aplicáveis à interface de rede de uma VM. Esta vista restringe a lista de rotas que pode usar para o tráfego de saída.

Para ver as rotas aplicáveis a uma interface de rede específica de uma VM, siga estes passos.

Consola

  1. Na Trusted Cloud consola, aceda à página Instâncias de VM.

    Aceder às instâncias de VM

  2. Localize uma instância de VM na lista. No menu Mais ações no final da linha, selecione Ver detalhes da rede.

  3. Se uma instância tiver várias interfaces de rede, na secção Detalhes da interface de rede, selecione a interface de rede que quer ver.

  4. Na secção Detalhes da firewall e das rotas, clique no separador Rotas para ver todas as rotas que se aplicam à interface de rede, ordenadas por nome da rota.

Adicione e remova rotas estáticas

Pode adicionar ou remover rotas estáticas e rotas baseadas em políticas que são locais para a sua rede VPC. Esta secção descreve como adicionar e eliminar rotas estáticas locais. Para mais informações sobre como adicionar e remover rotas baseadas em políticas, consulte o artigo Use rotas baseadas em políticas.

As rotas de sub-rede são adicionadas e eliminadas automaticamente quando adiciona ou elimina uma sub-rede. Para mais informações sobre como adicionar e remover sub-redes, consulte o artigo Trabalhe com sub-redes.

Todas as rotas numa rede VPC que estejam ligadas por VPC Network Peering têm de ser manipuladas na rede VPC que exporta essas rotas. Para mais informações, consulte as opções de troca de rotas.

Antes de adicionar uma rota estática

Antes de adicionar uma rota estática, considere o seguinte:

  • Certifique-se de que compreende os diferentes tipos de saltos seguintes que as rotas estáticas podem usar. Para obter informações sobre os diferentes tipos de saltos seguintes de rotas estáticas, incluindo os que suportam destinos IPv6, consulte o artigo Saltos seguintes e funcionalidades.
  • A menos que use sub-redes híbridas, um trajeto estático não pode ter um intervalo de destino que corresponda ou seja mais específico do que o intervalo de destino de um trajeto de sub-rede ou de sub-rede de peering. Para mais detalhes, consulte as secções Interações com rotas estáticas personalizadas na vista geral das rotas e Interações de sub-redes e rotas estáticas na documentação do peering de redes VPC.
  • Para evitar conflitos quando usar uma rede VPC no modo automático, não crie rotas estáticas cujos destinos se enquadrem em 10.128.0.0/9. Reveja os intervalos IPv4 do modo automático para obter detalhes.
  • Os destinos das rotas estáticas personalizadas não podem sobrepor-se a nenhum intervalo atribuído interno.
  • Certifique-se de que conhece as instâncias como saltos seguintes antes de criar uma rota estática personalizada que use uma VM como salto seguinte. Trusted Cloud Apenas valida se existe uma VM no momento em que cria a rota se escolher uma instância de salto seguinte.
  • Se criar uma rota com uma etiqueta de rede, apenas as VMs com essa etiqueta recebem essa rota. No entanto, as VMs etiquetadas continuam a receber todas as rotas que não têm uma etiqueta de rede.

Adicione um trajeto estático

Adicione uma rota estática a uma rede. Para mais informações sobre os diferentes tipos de saltos seguintes de rotas estáticas, incluindo os que suportam destinos IPv6, consulte Saltos seguintes e funcionalidades.

Consola

  1. Na Trusted Cloud consola, aceda à página Rotas.

    Aceda a Trajetos

  2. Clique no separador Gestão de rotas.

  3. Clique em Criar trajeto.

  4. Especifique um nome e uma descrição para o trajeto.

  5. Na lista Rede, selecione uma rede existente para a rota.

  6. Na lista Tipo de trajeto, selecione Trajeto estático.

  7. Na lista Versão de IP, selecione a versão de IP necessária:

    • Para criar uma rota estática IPv4, selecione IPv4.
    • Para criar uma rota estática IPv6, selecione IPv6.
  8. Especifique um intervalo de IPs de destino. O destino mais amplo possível é 0.0.0.0/0 para IPv4 ou ::/0 para IPv6.

  9. Especifique uma prioridade para o trajeto. A prioridade pode variar entre 0 (a prioridade mais elevada) e 65535 (a prioridade mais baixa).

  10. Para tornar o trajeto aplicável apenas a instâncias selecionadas com etiquetas de rede correspondentes, especifique-as no campo Etiquetas de instâncias. Deixe o campo em branco para tornar a rota aplicável a todas as instâncias na rede.

  11. Selecione um salto seguinte para a rota:

    • Gateway da Internet predefinido: envia pacotes para a Internet e para APIs e serviços Google
    • Especificar uma instância: envia pacotes para a interface de rede de uma instância de VM. Especifique a instância de VM por nome e zona. Se o destino da rota for um endereço IPv6, a instância de VM tem de ser dual-stack ou apenas IPv6.
    • Especificar o endereço IP de uma instância: especifique um endereço IP de uma instância existente na rede de VPC. Para rotas estáticas IPv6, a instância tem de ser de pilha dupla ou apenas IPv6. Para ver restrições importantes para endereços IP de próximo salto válidos, consulte próximos saltos de rotas estáticas.
    • Especificar túnel VPN: envia pacotes para um túnel VPN clássica existente através do encaminhamento estático.
    • Especifique uma regra de encaminhamento de um balanceador de carga de rede de encaminhamento direto interno: envia pacotes para um balanceador de carga de rede de encaminhamento direto interno especificado pelo nome e pela região da respetiva regra de encaminhamento interno. A regra de encaminhamento pode ter um endereço IPv4 ou IPv6. A versão IP da regra de encaminhamento que especificar tem de corresponder à versão IP da rota estática que criar.
  12. Clique em Criar.

gcloud

Crie uma nova rota estática personalizada com o seguinte comando da CLI gcloud:

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

Substitua o seguinte:

  • ROUTE_NAME: o nome do trajeto
  • NETWORK: o nome da rede VPC que contém o trajeto
  • DESTINATION_RANGE: os endereços IPv4 ou IPv6 de destino aos quais esta rota se aplica. O destino mais amplo possível é 0.0.0.0/0 para IPv4 ou ::/0 para IPv6.
  • PRIORITY: a prioridade da rota, que pode variar de 0 (a prioridade mais elevada) a 65535 (a prioridade mais baixa)
  • NEXT_HOP_SPECIFICATION: o salto seguinte para o trajeto estático. Use um dos seguintes parâmetros ou uma combinação de parâmetros:

    • --next-hop-gateway=default-internet-gateway: entregar pacotes à Internet e às APIs e serviços Google.
    • --next-hop-instance=INSTANCE_NAME e --next-hop-instance-zone=ZONE: entregar pacotes à interface de rede de uma instância de VM existente. Especifique a instância de VM por nome e zona. Se o destino da rota for um endereço IPv6, a instância de VM tem de ser de pilha dupla ou apenas IPv6.
    • --next-hop-address=ADDRESS: especifique um endereço IP de uma instância existente na rede de VPC. Para rotas estáticas IPv6, a instância tem de ser de pilha dupla ou apenas IPv6. Para ver restrições importantes para endereços IP de salto seguinte válidos, consulte Saltos seguintes e funcionalidades.
    • --next-hop-vpn-tunnel=VPN_TUNNEL_NAME e --next-hop-vpn-tunnel-region=REGION: enviam pacotes para um túnel VPN clássica existente através do encaminhamento estático.
    • --next-hop-ilb=FORWARDING_RULE e --next-hop-ilb-region=REGION: entregar pacotes a um balanceador de carga de rede de passagem interno. Especifique a regra de encaminhamento pelo respetivo nome (ou endereço IPv4 ou IPv6) e região. A versão IP da regra de encaminhamento que especificar tem de corresponder à versão IP da rota estática que criar. Para mais informações sobre a configuração de rotas estáticas para balanceadores de carga de rede de encaminhamento interno, consulte o artigo Crie rotas estáticas.

    Para que a rota estática personalizada se aplique apenas a VMs selecionadas por etiqueta de rede, adicione a flag --tags e especifique uma ou mais etiquetas de rede. Para mais informações sobre como as etiquetas de rede e as rotas estáticas personalizadas funcionam em conjunto, consulte o artigo Rotas aplicáveis na vista geral das rotas. Pode usar etiquetas com qualquer rota estática personalizada.

Para mais informações sobre a sintaxe da CLI gcloud, consulte a documentação do SDK.

API

Crie uma nova rota estática personalizada.

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

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto onde a sua rota é criada
  • ROUTE_NAME: o nome do trajeto
  • NETWORK: o nome da rede VPC que contém a rota.
  • DESTINATION_RANGE: o intervalo de endereços IPv4 ou IPv6 de destino ao qual esta rota se aplica. O destino mais amplo possível é 0.0.0.0/0 para IPv4 ou ::/0 para IPv6.
  • PRIORITY: a prioridade da rota, que pode variar de 0 (a prioridade mais elevada) a 65535 (a prioridade mais baixa)
  • NEXT_HOP_SPECIFICATION: o próximo salto para a rota estática. Use um dos seguintes parâmetros ou combinação de parâmetros:
    • nextHopGateway: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/gateways/default-internet-gateway: envia pacotes para a Internet e para as APIs e os serviços Google
    • nextHopInstance: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME: envia pacotes para a interface de rede de uma instância de VM. Especifique a instância de VM pelo nome e zona. Se o destino da rota for um endereço IPv6, a instância de VM tem de ser dual-stack ou apenas IPv6.
    • nextHopIp: ADDRESS: especifique um endereço IP de uma instância existente na rede VPC. Para rotas estáticas IPv6, a instância tem de ser de pilha dupla ou apenas IPv6. Para ver restrições importantes para endereços IP de salto seguinte válidos, consulte o artigo Saltos seguintes e funcionalidades.
    • nextHopVpnTunnel: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/vpnTunnels/VPN_TUNNEL_NAME: entrega pacotes a um túnel VPN clássica existente através do encaminhamento estático.
    • nextHopIlb: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE: envia pacotes para um balanceador de carga de rede de encaminhamento interno. Especifique a regra de encaminhamento pelo respetivo nome (ou endereço IPv4 ou IPv6) e região. A versão IP da regra de encaminhamento que especificar tem de corresponder à versão IP da rota estática que criar.

Para fazer com que a rota estática personalizada se aplique apenas a VMs selecionadas por etiqueta de rede, adicione o campo tags e especifique uma ou mais etiquetas de rede. Para mais informações sobre como as etiquetas de rede e as rotas estáticas personalizadas funcionam em conjunto, consulte o artigo Rotas aplicáveis na vista geral das rotas. Pode usar etiquetas com qualquer rota estática personalizada.

Para mais informações, consulte o método routes.insert.

Terraform

Pode criar uma rota estática através de um módulo do Terraform.

Esta rota estática cria uma rota predefinida para a Internet.

module "google_compute_route" {
  source       = "terraform-google-modules/network/google//modules/routes"
  version      = "~> 12.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"
    }
  ]
}

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Ir

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)

Adicione uma rota predefinida IPv4

A rota estática predefinida do IPv4 (0.0.0.0/0) com o next-hop-gateway definido como default-internet-gateway é configurada automaticamente para cada rede VPC. Use estes passos para recriar este trajeto, se necessário.

Consola

  1. Na Trusted Cloud consola, aceda à página Rotas.

    Aceda a Trajetos

  2. Clique no separador Gestão de rotas.

  3. Clique em Criar trajeto.

  4. Especifique um nome e uma descrição para o trajeto.

  5. Selecione uma rede existente para o trajeto.

  6. Para Intervalo de IPs de destino, introduza 0.0.0.0/0.

  7. Especifique uma prioridade para o trajeto. A prioridade pode variar entre 0 (a prioridade mais elevada) e 65535 (a prioridade mais baixa).

  8. Para Próximo salto, selecione Gateway da Internet predefinido.

  9. Clique em Criar.

gcloud

Recrie a rota predefinida IPv4 para uma rede.

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

Substitua o seguinte:

  • ROUTE_NAME: um nome para o trajeto
  • NETWORK: o nome da rede VPC que contém o trajeto

API

Recrie a rota predefinida IPv4 para uma rede.

POST https://compute.s3nsapis.fr/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"
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto onde a sua rota é criada
  • ROUTE_NAME: um nome para o trajeto
  • NETWORK_NAME: o nome da rede VPC que contém o trajeto

Adicione uma rota predefinida IPv6

A rota estática predefinida IPv6 (::/0) com o next-hop-gateway definido como default-internet-gateway é configurada automaticamente para a rede VPC quando cria uma sub-rede com o tipo de acesso IPv6 definido como externo. Pode eliminar a rota para bloquear todo o tráfego IPv6 das VMs para a Internet. Também pode recriar o trajeto, se necessário.

Consola

  1. Na Trusted Cloud consola, aceda à página Rotas.

    Aceda a Trajetos

  2. Clique no separador Gestão de rotas.

  3. Clique em Criar trajeto.

  4. Especifique um nome e uma descrição para o trajeto.

  5. Selecione uma rede existente para o trajeto.

  6. Para Intervalo de IPs de destino, introduza ::/0.

  7. Especifique uma prioridade para o trajeto. A prioridade pode variar entre 0 (a prioridade mais elevada) e 65535 (a prioridade mais baixa).

  8. Para Próximo salto, selecione Gateway da Internet predefinido.

  9. Clique em Criar.

gcloud

Recrie a rota predefinida IPv6 para uma rede.

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

Substitua o seguinte:

  • ROUTE_NAME: um nome para o trajeto.
  • NETWORK: o nome da rede VPC que contém a rota.

API

Recrie a rota predefinida IPv6 para uma rede.

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

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto onde a sua rota é criada
  • ROUTE_NAME: um nome para o trajeto
  • NETWORK_NAME: o nome da rede VPC que contém o trajeto

Modifique um trajeto estático

Não é possível editar nem atualizar uma rota estática depois de a criar. Para modificar uma rota estática, tem de a eliminar e criar uma substituição.

Elimine um trajeto estático

Para eliminar um trajeto, faça o seguinte.

Consola

  1. Na Trusted Cloud consola, aceda à página Rotas.

    Aceda a Trajetos

  2. Clique no separador Gestão de rotas.

  3. Selecione a caixa de verificação junto à regra que quer eliminar.

  4. Clique em Eliminar.

  5. Clique novamente em Eliminar para confirmar.

gcloud

Elimine uma rota estática personalizada através do seguinte comando da CLI gcloud:

gcloud compute routes delete ROUTE_NAME

Substitua ROUTE_NAME pelo nome do trajeto que quer eliminar.

API

Elimine uma rota estática personalizada para a remover da sua rede VPC através do método routes.delete:

DELETE https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/global/routes/ROUTE_NAME

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto onde se encontra a sua rota.
  • ROUTE_NAME: o nome do trajeto a eliminar.

Ir

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

Propagação de alterações de trajetos

Quando adiciona ou elimina uma rota estática, a rota propaga-se a todas as regiões e instâncias de VM na sua rede VPC. Um estado de operação de rota PENDING ou RUNNING indica que a alteração de rota está em fila.

Após a colocação em fila, o estado da operação de rota muda para DONE. Pode demorar mais 30 segundos até que todas as instâncias de VM na sua rede VPC e nas redes de intercâmbio da rede VPC usem uma nova rota ou deixem de usar uma rota antiga.

Se adicionar ou remover várias rotas estáticas em simultâneo, as alterações podem ser aplicadas em qualquer ordem. Não existe garantia de que a ordem pela qual envia as alterações de trajeto seja a ordem pela qual são processadas. As diferentes instâncias podem tomar conhecimento das alterações em momentos diferentes.

Se precisar de fazer alterações de trajeto que dependam umas das outras, tem de fazer essas alterações sequencialmente. Só pode fazer alterações subsequentes depois de o estado da alteração anterior ser DONE e terem decorrido mais 30 segundos.

Ative o encaminhamento de IP para instâncias

Por predefinição, o encaminhamento de IP está desativado e o Trusted Cloud efetua uma verificação rigorosa do endereço de origem. Sujeita à configuração eficaz da firewall de saída, uma VM pode emitir pacotes com as seguintes origens:

  • O endereço IPv4 interno principal da interface de rede (NIC) de uma instância.
  • Qualquer intervalo de IPs de alias configurado na NIC de uma instância.
  • Se um intervalo de endereços IPv6 estiver configurado na sub-rede e a instância for de pilha dupla ou apenas IPv6, qualquer um dos endereços IPv6 atribuídos à NIC.
  • Um endereço IP interno ou externo associado a uma regra de encaminhamento, para balanceamento de carga de passagem ou encaminhamento de protocolos, se a instância for um servidor de back-end para um balanceador de carga de rede de passagem interno, um balanceador de carga de rede de passagem externo ou for referenciado por uma instância de destino.

Para usar uma VM como o próximo salto de uma rota, a VM tem de encaminhar pacotes cujas origens não correspondam a um dos endereços IP ou intervalos na lista anterior. Para encaminhar pacotes com endereços de origem arbitrários, tem de ativar o encaminhamento de IP:

  • Quando cria ou atualiza uma VM, ativa o encaminhamento de IP seguindo as instruções nesta secção. A ativação do encaminhamento de IP aplica-se a todas as NICs na VM.
  • Além dos passos nesta secção, tem de ativar o encaminhamento de IP no sistema operativo convidado da VM. Para o fazer no Linux, defina o valor de um ou ambos os seguintes parâmetros do kernel como 1: net.ipv4.ip_forward (para IPv4) ou net.ipv6.conf.all.forwarding (para IPv6).

Para ativar o encaminhamento de IP quando cria uma VM, conclua os seguintes passos.

Consola

  1. Na Trusted Cloud consola, aceda à página Instâncias de VM.

    Aceder às instâncias de VM

  2. Clique em Criar instância.

  3. Na secção Opções avançadas, expanda Trabalhar em rede, discos, segurança, gestão, arrendamento único.

  4. Expanda a secção Rede.

  5. Na secção Encaminhamento de IP, selecione a caixa de verificação Ativar.

gcloud

Ao criar uma instância, adicione a flag --can-ip-forward ao comando:

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

API

Ao criar uma instância, use o campo canIpForward para ativar o encaminhamento de IP:

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

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto que contém a instância
  • ZONE: a zona Trusted Cloud que contém a instância

Para mais informações, consulte o método instances.insert.

Terraform

Pode usar o recurso Terraform para criar uma instância de VM com o encaminhamento de IP ativado.

Neste exemplo, os argumentos do Terraform têm valores atribuídos que pode alterar.

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
}

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Depois de ativar o encaminhamento de IP, continue com o processo de criação da VM.

Para ativar o encaminhamento de IP numa VM existente, atualize a canIpForward propriedade da instância.

O que se segue?