Visualizzare la configurazione di rete di un'istanza


Segui le istruzioni riportate in questa pagina per visualizzare le interfacce di rete, le reti, le subnet e gli indirizzi IP di un'istanza di calcolo.

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è la procedura mediante la quale la tua identità viene verificata per l'accesso ai servizi e alle API di Google Cloud . Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Per saperne di più, consulta Eseguire l'autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud .

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per visualizzare la configurazione di rete di un'istanza, chiedi all'amministratore di concederti il ruolo IAM Amministratore istanze Compute (v1) (roles/compute.instanceAdmin.v1) o Amministratore rete Compute (roles/compute.networkAdmin) nel progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per visualizzare la configurazione di rete di un'istanza. Per visualizzare le autorizzazioni esatte richieste, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per visualizzare la configurazione di rete di un'istanza sono necessarie le seguenti autorizzazioni:

  • Visualizza la configurazione di rete per un'istanza: compute.instances.get sull'istanza
  • Visualizza gli indirizzi IP di un'istanza: compute.instances.list nel progetto

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Visualizza gli indirizzi IP

Puoi visualizzare gli indirizzi IP interni ed esterni della tua istanza. I indirizzi IP possono essere indirizzi IPv4 o IPv6.

Console

  1. Nella console Google Cloud , vai alla pagina Istanze VM.

    Vai a Istanze VM

  2. (Facoltativo) Utilizza la casella Filtra per limitare il numero di istanze mostrate.

  3. Se l'istanza ha un indirizzo IP esterno, viene visualizzato nella colonna IP esterno.

    Se l'istanza non ha un indirizzo IP esterno, puoi assegnarne uno.

Pagina delle istanze VM che mostra gli IP interni ed esterni.

A seconda delle opzioni di visualizzazione delle colonne, potresti visualizzare più o meno colonne rispetto all'immagine precedente.

gcloud

Esistono due comandi che puoi utilizzare per visualizzare gli indirizzi IP di un'istanza:

  • gcloud compute instances list mostra tutti gli indirizzi IP utilizzati da un'istanza di calcolo, statici o temporanei.
  • gcloud compute addresses list mostra tutti gli indirizzi IP riservati assegnati a un'istanza di calcolo.

Questa attività mostra come visualizzare gli indirizzi IP utilizzando i comandi gcloud compute instances.

  1. Per visualizzare gli indirizzi IP interni ed esterni delle tue istanze, utilizza il comando gcloud compute instances list.

    gcloud compute instances list

    Puoi aggiungere la clausola --filter per limitare il numero di istanze riportate dal comando, ad esempio --filter='zone:us-central1-c'.

    L'output è simile al seguente:

    NAME           ZONE            MACHINE_TYPE    PREEMPTIBLE  INTERNAL_IP                EXTERNAL_IP                     STATUS
    webapp1        us-central1-c   c3-highmem-88   true         192.0.2.11                                                 RUNNING
    my-instance    us-central1-c   n4-standard-2                192.0.2.126                203.0.113.6                     RUNNING
    my-dual-stack  us-central1-a   e2-micro                     192.0.2.54                 203.0.113.7                     RUNNING
                                                                                          2001:db8:2:2:2:2:2:2/96
    new-ipv6-only  us-central1-a   n4-standard-2                2001:db8:1:1:1:1:1:1/96                                    RUNNING
    
  2. Per visualizzare l'indirizzo IP interno o esterno di un'istanza specifica, utilizza il comando gcloud compute instances describe con un flag --format per filtrare l'output.

    Indirizzi interni

    Per visualizzare l'indirizzo IP interno di un'istanza specifica, utilizza uno dei seguenti comandi:

    • Indirizzi IPv4:

         gcloud compute instances describe INSTANCE_NAME \
             --zone=ZONE \
             --format='get(networkInterfaces[0].networkIP)'
        
      192.0.2.11
    • Indirizzi IPv6:

         gcloud compute instances describe INSTANCE_NAME \
             --zone=ZONE \
             --format='get(networkInterfaces[0].ipv6Address)'
        
      2001:db8:2:2:2:2:2:2

    Indirizzi esterni

    Per visualizzare l'indirizzo IP esterno di un'istanza specifica, utilizza uno dei seguenti comandi:

    • Indirizzi IPv4:

         gcloud compute instances describe INSTANCE_NAME \
             --zone=ZONE \
             --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
        
      203.0.113.6
    • Indirizzi IPv6:

         gcloud compute instances describe INSTANCE_NAME \
             --zone=ZONE \
             --format='get(networkInterfaces[0].ipv6AccessConfigs[0].externalIpv6)'
        
      2001:db8:3:3:3:3:3:3

    Sostituisci quanto segue:

    • INSTANCE_NAME: il nome dell'istanza di cui vuoi visualizzare l'IP interno o esterno
    • ZONE: il nome della zona in cui si trova l'istanza.

    Se il comando non restituisce un indirizzo IP, significa che l'istanza non ha un indirizzo IP esterno configurato.

REST

Invia una richiesta GET al metodo instances.get. Se aggiungi un parametro di query $fields alla richiesta, puoi limitare l'output solo ai campi di interesse.

 GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/INSTANCE_NAME$fields=name,networkInterfaces.networkIP,networkInterfaces.accessConfigs.natIP,networkInterfaces.ipv6AccessConfigs.externalIpv6
 

Sostituisci quanto segue:

  • PROJECT_NAME: il nome del progetto che contiene l'istanza.
  • ZONE: la zona dell'istanza per la quale vuoi eseguire query.
  • INSTANCE_NAME: il nome della risorsa istanza da restituire.

Se uno degli indirizzi IP non è configurato, il campo non viene visualizzato nell'output. Per un'istanza di calcolo che utilizza una rete a doppio stack con un indirizzo IPv6 esterno, il corpo della risposta è simile al seguente:

{
  "name": "my-dual-stack-vm",
  "networkInterfaces": [
    {
      "networkIP": "10.0.0.2",
      "accessConfigs": [
        {
          "natIP": "104.155.21.204"
        }
      ],
      "ipv6AccessConfigs": [
        {
          "externalIpv6": "2600:1900:4010:8b2:0:0:0:0"
        }
      ]
    }
  ]
}

I seguenti campi contengono le informazioni richieste:

  • networkIP: l'indirizzo IPv4 interno assegnato.
  • natIP: l'indirizzo IPv4 esterno assegnato.
  • externalIpv6: l'indirizzo IPv6 esterno assegnato.

Python

from enum import Enum
from typing import List

from google.cloud import compute_v1


def get_instance(project_id: str, zone: str, instance_name: str) -> compute_v1.Instance:
    """
    Get information about a VM instance in the given zone in the specified project.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        zone: name of the zone you want to use. For example: “us-west3-b”
        instance_name: name of the VM instance you want to query.
    Returns:
        An Instance object.
    """
    instance_client = compute_v1.InstancesClient()
    instance = instance_client.get(
        project=project_id, zone=zone, instance=instance_name
    )

    return instance


class IPType(Enum):
    INTERNAL = "internal"
    EXTERNAL = "external"
    IP_V6 = "ipv6"


def get_instance_ip_address(
    instance: compute_v1.Instance, ip_type: IPType
) -> List[str]:
    """
    Retrieves the specified type of IP address (ipv6, internal or external) of a specified Compute Engine instance.

    Args:
        instance (compute_v1.Instance): instance to get
        ip_type (IPType): The type of IP address to retrieve (ipv6, internal or external).

    Returns:
        List[str]: Requested type IP addresses of the instance.
    """
    ips = []
    if not instance.network_interfaces:
        return ips
    for interface in instance.network_interfaces:
        if ip_type == IPType.EXTERNAL:
            for config in interface.access_configs:
                if config.type_ == "ONE_TO_ONE_NAT":
                    ips.append(config.nat_i_p)
        elif ip_type == IPType.IP_V6:
            for ipv6_config in getattr(interface, "ipv6_access_configs", []):
                if ipv6_config.type_ == "DIRECT_IPV6":
                    ips.append(ipv6_config.external_ipv6)

        elif ip_type == IPType.INTERNAL:
            # Internal IP is directly available in the network interface
            ips.append(interface.network_i_p)
    return ips

Java


import com.google.cloud.compute.v1.AccessConfig;
import com.google.cloud.compute.v1.AccessConfig.Type;
import com.google.cloud.compute.v1.GetInstanceRequest;
import com.google.cloud.compute.v1.Instance;
import com.google.cloud.compute.v1.InstancesClient;
import com.google.cloud.compute.v1.NetworkInterface;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class GetVmAddress {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project you want to use.
    String projectId = "your-project-id";
    // Instance ID of the Google Cloud project you want to use.
    String instanceId = "your-instance-id";
    // IPType you want to search.
    IpType ipType = IpType.INTERNAL;

    getVmAddress(projectId, instanceId, ipType);
  }

  // Retrieves the specified type of IP address
  // (ipv6, internal or external) of a specified Compute Engine instance.
  public static List<String> getVmAddress(String projectId, String instanceId, IpType ipType)
          throws IOException {
    List<String> result = new ArrayList<>();
    Instance instance = getInstance(projectId, instanceId);

    for (NetworkInterface networkInterface : instance.getNetworkInterfacesList()) {
      if (ipType == IpType.EXTERNAL) {
        for (AccessConfig accessConfig : networkInterface.getAccessConfigsList()) {
          if (accessConfig.getType().equals(Type.ONE_TO_ONE_NAT.name())) {
            result.add(accessConfig.getNatIP());
          }
        }
      } else if (ipType == IpType.IP_V6) {
        for (AccessConfig accessConfig : networkInterface.getAccessConfigsList()) {
          if (accessConfig.hasExternalIpv6()
                  && accessConfig.getType().equals(Type.DIRECT_IPV6.name())) {
            result.add(accessConfig.getExternalIpv6());
          }
        }
      } else if (ipType == IpType.INTERNAL) {
        result.add(networkInterface.getNetworkIP());
      }
    }

    return result;
  }

  private static Instance getInstance(String projectId, String instanceId) throws IOException {
    // 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 (InstancesClient instancesClient = InstancesClient.create()) {
      GetInstanceRequest request = GetInstanceRequest.newBuilder()
              .setInstance(instanceId)
              .setProject(projectId)
              .setZone("us-central1-b")
              .build();
      return instancesClient.get(request);
    }
  }

  public enum IpType {
    INTERNAL("internal"),
    EXTERNAL("external"),
    IP_V6("ipv6");

    private final String type;

    IpType(String type) {
      this.type = type;
    }

    public String getType() {
      return type;
    }
  }
}

Visualizzare le interfacce di rete di un'istanza

Ogni istanza di calcolo ha almeno un'interfaccia di rete. Puoi visualizzare le proprietà configurate delle interfacce di rete per un'istanza nei seguenti modi.

Console

  1. Nella console Google Cloud , vai alla pagina Istanze VM.

    Vai a Istanze VM

  2. (Facoltativo) Utilizza la casella Filtra per limitare il numero di istanze mostrate.

  3. Fai clic sul nome dell'istanza che vuoi ispezionare.

  4. Nella sezione Networking, in Interfacce di rete, puoi vedere le interfacce di rete (NIC) create per l'istanza, la rete e la sottorete associate a ogni NIC e i relativi indirizzi IP assegnati.

  5. Puoi fare clic sul nome di una NIC per aprire la pagina Dettagli interfaccia di rete. In questa pagina puoi vedere i firewall e le route utilizzati dalla NIC nonché eseguire un test di connettività per la NIC.

gcloud

Per visualizzare le interfacce di rete (NIC) di un'istanza di calcolo, utilizza il comando gcloud compute instances describe. Puoi aggiungere un'opzione --format al comando per limitare le informazioni riportate a campi specifici e modificare la modalità di visualizzazione, ad esempio:

gcloud compute instances describe INSTANCE_NAME --zone=ZONE \
    --format="flattened(name,networkInterfaces[].name, networkInterfaces[].network.basename(), networkInterfaces[].stackType, networkInterfaces[].nicType)"

Il comando precedente restituisce un output simile al seguente:

name:                           my-multinic-vm
networkInterfaces[0].name:      nic0
networkInterfaces[0].network:   default
networkInterfaces[0].nicType:   GVNIC
networkInterfaces[0].stackType: IPV4_ONLY
networkInterfaces[1].name:      nic1
networkInterfaces[1].network:   appnet-vpc-0
networkInterfaces[1].nicType:   GVNIC
networkInterfaces[1].stackType: IPV4_IPV6

REST

Crea una richiesta GET al metodo instances.get. Se aggiungi un parametro di query $fields alla richiesta, puoi limitare il risultato solo alla proprietà networkInterfaces.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/INSTANCE_NAME?$fields=networkInterfaces

Sostituisci quanto segue:

  • PROJECT_NAME: il nome del progetto che contiene l'istanza.
  • ZONE: la zona dell'istanza per cui vuoi eseguire la query.
  • INSTANCE_NAME: il nome della risorsa istanza da restituire.

Il corpo della risposta dovrebbe essere simile al seguente:

{
  "networkInterfaces": [
  {
    "kind": "compute#networkInterface",
    "network": "https://www.googleapis.com/compute/v1/projects/my-project/global/networks/network-name-1",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/subnet-name-1",
    "networkIP": "10.128.0.15",
    "name": "nic0",
    "accessConfigs": [
      {
        "kind": "compute#accessConfig",
        "type": "ONE_TO_ONE_NAT",
        "name": "External NAT",
        "networkTier": "PREMIUM"
      }
    ],
    "fingerprint": "mBy9xvkWA9M=",
    "stackType": "IPV4_ONLY",
    "nicType": "GVNIC"
  },
  {
    "kind": "compute#networkInterface",
    "network": "https://www.googleapis.com/compute/v1/projects/my-project/global/networks/network-name-2",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/subnet-name-2",
    "networkIP": "10.0.20.2",
    "name": "nic1",
    "accessConfigs": [
      {
        "kind": "compute#accessConfig",
        "type": "ONE_TO_ONE_NAT",
        "name": "External NAT",
        "networkTier": "PREMIUM"
      }
    ],
    "ipv6AccessConfigs": [
      {
        "kind": "compute#accessConfig",
        "type": "DIRECT_IPV6",
        "name": "external-ipv6",
        "externalIpv6": "2600:1900:4000:8447:0:0:0:0",
        "externalIpv6PrefixLength": 96,
        "publicPtrDomainName": "",
        "networkTier": "PREMIUM"
      }
    ],
    "fingerprint": "rx6hfNA94f4=",
    "stackType": "IPV4_IPV6",
    "ipv6AccessType": "EXTERNAL",
    "nicType": "GVNIC"
  }
  ]
}

Visualizzare tutte le istanze di calcolo all'interno di una rete

Utilizza uno dei seguenti metodi per visualizzare tutte le istanze di calcolo all'interno di una determinata rete.

Console

  1. Nella console Google Cloud , vai alla pagina Reti VPC.

    Vai a Reti VPC

  2. (Facoltativo) Utilizza la casella Filtra per limitare il numero di emittenti visualizzate.

  3. Fai clic sul nome della rete per cui vuoi elencare le istanze di calcolo.

  4. Seleziona la scheda Istanze per visualizzare le istanze all'interno della rete.

gcloud

Per visualizzare le istanze di calcolo che utilizzano una rete specifica, usa il comando gcloud compute instances list.

Utilizza un flag --filter per elencare solo le istanze che utilizzano una rete specifica. Puoi anche utilizzare un flag --format per limitare e formattare i risultati, ad esempio:

gcloud compute instances list \
    --filter 'networkInterfaces[].network:NETWORK_NAME' \
    --format="table(name:sort=1,machineType.basename(),zone.basename(),networkInterfaces[].subnetwork)"

L'output è simile al seguente:

NAME: c2-tier1-multinic
MACHINE_TYPE: c2-standard-30
ZONE: us-central1-c
SUBNETWORK: ['https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/default', 'https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/webapps-external-subnet']
NAME: c3-with-lssd MACHINE_TYPE: c3-standard-4-lssd ZONE: us-central1-a SUBNETWORK: ['https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/default']
NAME: example-instance3 MACHINE_TYPE: n2-custom-2-163840-ext ZONE: us-central1-b SUBNETWORK: ['https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/default']
NAME: n4-test-windows MACHINE_TYPE: n4-standard-2 ZONE: us-central1-c SUBNETWORK: ['https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/default']

Determina se la rete Tier_1 è abilitata

Utilizza uno dei seguenti metodi per determinare se le prestazioni di rete Tier_1 per VM sono attivate per un'istanza.

Console

  1. Nella console Google Cloud , vai alla pagina Istanze VM.

    Vai a Istanze VM

  2. (Facoltativo) Utilizza la casella Filtra per limitare il numero di istanze mostrate.

  3. Fai clic sul nome dell'istanza che vuoi ispezionare.

  4. Nella sezione Networking, controlla il valore per Livello di larghezza di banda in uscita totale:

    • TIER_1: il networking Tier_1 è abilitato.
    • -: la rete Tier_1 non è abilitata.

gcloud

Per visualizzare l'impostazione networkPerformanceConfig per un'istanza, utilizza il comando gcloud compute instances describe. Puoi aggiungere un'opzione --format al comando per limitare le informazioni riportate a campi specifici e modificare la modalità di visualizzazione, ad esempio:

gcloud compute instances describe INSTANCE_NAME \
    --zone=ZONE \
    --format="text(name, networkPerformanceConfig)"

Se la rete Tier_1 non è configurata per l'istanza, il campo networkPerformanceConfig non è incluso nell'output. Se la rete Tier_1 è abilitata per un'istanza, l'output è simile al seguente:

name:                                              c2-tier1-multinic
networkPerformanceConfig.totalEgressBandwidthTier: TIER_1

REST

Crea una richiesta GET al metodo instances.get. Se aggiungi un parametro di query $fields alla richiesta, puoi limitare l'output solo ai campi name, networkPerformanceConfig e nicType.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/INSTANCE_NAME?$fields=name,networkPerformanceConfig,networkInterfaces.nicType

Sostituisci quanto segue:

  • PROJECT_NAME: il nome del progetto che contiene l'istanza.
  • ZONE: la zona dell'istanza per cui vuoi eseguire la query.
  • INSTANCE_NAME: il nome della risorsa istanza da restituire.

Se la rete Tier_1 non è configurata per l'istanza, il campo networkPerformanceConfig non è incluso nell'output. Se la rete Tier_1 è abilitata per un'istanza, l'output è simile al seguente:

{
  "name": "c2-tier1-multinic",
  "networkInterfaces": [
    {
      "nicType": "GVNIC"
    },
    {
      "nicType": "GVNIC"
    }
  ],
  "networkPerformanceConfig": {
    "totalEgressBandwidthTier": "TIER_1"
  }
}