Visualizza 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 computing.

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale la tua identità viene verificata per l'accesso a servizi e API 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. After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

        Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.

          After installing the Google Cloud CLI, initialize it by running the following command:

          gcloud init

          If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

        Per saperne di più, consulta la sezione Autenticarsi 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 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) o Amministratore rete Compute (roles/compute.networkAdmin) nel progetto. Per saperne di più sull'assegnazione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

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

Autorizzazioni obbligatorie

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

  • Visualizzare la configurazione di rete di un'istanza: compute.instances.get sull'istanza
  • Visualizzare gli indirizzi IP di un'istanza: compute.instances.list sul 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 dell'istanza. Gli 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 Filtro per limitare il numero di istanze visualizzate.

  3. Se l'istanza ha un indirizzo IP esterno, questo 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

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

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

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

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

    gcloud compute instances list

    Puoi aggiungere la clausola --filter per limitare il numero di istanze restituite 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 per l'istanza non è stato configurato un indirizzo IP esterno.

REST

Invia una richiesta GET al metodo instances.get. Se aggiungi un parametro di query $fields alla richiesta, puoi limitare l'output ai soli 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 la 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 computing 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 obbligatorie:

  • 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;
    }
  }
}

Visualizza le interfacce di rete di un'istanza

Ogni istanza di computing ha almeno un'interfaccia di rete. Puoi visualizzare le proprietà configurate delle interfacce di rete di 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 Filtro per limitare il numero di istanze visualizzate.

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

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

  5. Puoi fare clic sul nome di una NIC per aprire la pagina Dettagli interfaccia di rete, in cui puoi vedere i firewall e le route utilizzati dalla NIC ed eseguire un test di connettività per la NIC.

gcloud

Per visualizzare le interfacce di rete (NIC) di un'istanza di computing, utilizza il comando gcloud compute instances describe. Puoi aggiungere un'opzione --format al comando per limitare le informazioni restituite a campi specifici e modificare la modalità di visualizzazione delle informazioni, 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 per il metodo instances.get. Se aggiungi un parametro di query $fields alla richiesta, puoi limitare l'output alle sole 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 la quale vuoi eseguire la query.
  • INSTANCE_NAME: il nome della risorsa istanza da restituire.

Il corpo della tua 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"
  }
  ]
}

Visualizza tutte le istanze di computing all'interno di una rete

Utilizza uno dei metodi seguenti per visualizzare tutte le istanze di computing 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 Filtro per limitare il numero di reti visualizzate.

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

  4. Seleziona la scheda Istanze per vedere le istanze che si trovano all'interno della rete.

gcloud

Per visualizzare le istanze di computing 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

Usa uno dei metodi seguenti per determinare se le prestazioni di networking Tier_1 per VM sono abilitate per un'istanza.

Console

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

    Vai a Istanze VM

  2. (Facoltativo) Utilizza la casella Filtro per limitare il numero di istanze visualizzate.

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

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

    • TIER_1: il networking Tier_1 è abilitato.
    • -: il networking Tier_1 non è abilitato.

gcloud

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

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

Se il networking Tier_1 non è configurato per l'istanza, il campo networkPerformanceConfig non è incluso nell'output. Se il networking Tier_1 è abilitato per un'istanza, l'output è simile al seguente:

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

REST

Crea una richiesta GET per il metodo instances.get. Se aggiungi un parametro di query $fields alla richiesta, puoi limitare l'output ai soli 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 la quale vuoi eseguire la query.
  • INSTANCE_NAME: il nome della risorsa istanza da restituire.

Se il networking Tier_1 non è configurato per l'istanza, il campo networkPerformanceConfig non è incluso nell'output. Se il networking Tier_1 è abilitato per un'istanza, l'output è simile al seguente:

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