Afficher la configuration réseau d'une instance


Suivez les instructions de cette page pour afficher les interfaces réseau, les réseaux, les sous-réseaux et les adresses IP d'une instance de calcul.

Avant de commencer

  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification est le processus permettant de valider votre identité pour accéder aux services et aux API Google Cloud . Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine en sélectionnant l'une des options suivantes:

    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

      Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.

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

        gcloud init

      Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Google Cloud.

Rôles requis

Pour obtenir les autorisations nécessaires pour afficher la configuration réseau d'une instance, demandez à votre administrateur de vous accorder le rôle IAM Administrateur d'instances Compute (v1) (roles/compute.instanceAdmin.v1) ou Administrateur de réseau Compute (roles/compute.networkAdmin) sur le projet. Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Ce rôle prédéfini contient les autorisations requises pour afficher la configuration réseau d'une instance. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour afficher la configuration réseau d'une instance:

  • Afficher la configuration réseau d'une instance : compute.instances.get sur l'instance
  • Afficher les adresses IP d'une instance : compute.instances.list sur le projet

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Afficher les adresses IP

Vous pouvez afficher les adresses IP interne et externe de votre instance. Les adresses IP peuvent être des adresses IPv4 ou IPv6.

Console

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

    Accéder à la page Instances de VM

  2. (Facultatif) Utilisez la zone Filtre pour limiter le nombre d'instances affichées.

  3. Si l'instance possède une adresse IP externe, celle-ci apparaît dans la colonne Adresse IP externe.

    Si l'instance ne possède pas d'adresse IP externe, vous pouvez en lui en attribuer une.

Page "Instances de VM" affichant les adresses IP interne et externe

En fonction des options d'affichage des colonnes, vous pouvez voir plus ou moins de colonnes que dans l'image précédente.

gcloud

Vous pouvez utiliser deux commandes pour afficher les adresses IP d'une instance:

  • gcloud compute instances list affiche toutes les adresses IP utilisées par une instance de calcul, qu'elles soient statiques ou éphémères.
  • gcloud compute addresses list affiche toutes les adresses IP réservées attribuées à une instance de calcul.

Cette tâche explique comment afficher les adresses IP à l'aide des commandes gcloud compute instances.

  1. Pour afficher les adresses IP interne et externe de vos instances, utilisez la commande gcloud compute instances list.

    gcloud compute instances list

    Vous pouvez ajouter la clause --filter pour limiter le nombre d'instances renvoyées par la commande, par exemple --filter='zone:us-central1-c'.

    Le résultat ressemble à ce qui suit :

    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. Pour afficher l'adresse IP interne ou externe d'une instance spécifique, utilisez la commande gcloud compute instances describe avec l'option --format pour filtrer la sortie.

    Adresses internes

    Pour afficher l'adresse IP interne d'une instance spécifique, utilisez l'une des commandes suivantes:

    • Adresses IPv4:

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

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

    Adresses externes

    Pour afficher l'adresse IP externe d'une instance spécifique, utilisez l'une des commandes suivantes:

    • Adresses IPv4:

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

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

    Remplacez les éléments suivants :

    • INSTANCE_NAME: nom de l'instance dont vous souhaitez afficher l'adresse IP interne ou externe
    • ZONE: nom de la zone où se trouve l'instance

    Si la commande ne renvoie pas d'adresse IP, cela signifie qu'aucune adresse IP externe n'est configurée pour l'instance.

REST

Envoyez une requête GET à la méthode instances.get. En ajoutant un paramètre de requête $fields à la requête, vous pouvez limiter la sortie aux seuls champs qui vous intéressent.

 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
 

Remplacez les éléments suivants :

  • PROJECT_NAME: nom du projet contenant l'instance.
  • ZONE : zone de l'instance sur laquelle vous souhaitez effectuer la requête.
  • INSTANCE_NAME : nom de la ressource d'instance à renvoyer.

Si l'une des adresses IP n'est pas configurée, ce champ n'apparaît pas dans la sortie. Pour une instance de calcul qui utilise un réseau à double pile avec une adresse IPv6 externe, le corps de la réponse ressemble à ceci:

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

Les champs suivants contiennent les informations requises :

  • networkIP: adresse IPv4 interne attribuée.
  • natIP: adresse IPv4 externe attribuée.
  • externalIpv6: adresse IPv6 externe attribuée.

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

Afficher les interfaces réseau d'une instance

Chaque instance de calcul dispose d'au moins une interface réseau. Vous pouvez afficher les propriétés configurées des interfaces réseau d'une instance de la manière suivante.

Console

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

    Accéder à la page Instances de VM

  2. (Facultatif) Utilisez la zone Filtre pour limiter le nombre d'instances affichées.

  3. Cliquez sur le nom de l'instance que vous souhaitez inspecter.

  4. Dans la section Networking (Réseau), sous Network interfaces (Interfaces réseau), vous pouvez voir les interfaces réseau (NIC) créées pour l'instance, le réseau et le sous-réseau associés à chaque NIC, ainsi que les adresses IP qui leur sont attribuées.

  5. Vous pouvez cliquer sur le nom d'une carte réseau pour ouvrir la page Détails de l'interface réseau. Sur cette page, vous pouvez voir les pare-feu et les routes utilisés par la carte réseau, et effectuer un test de connectivité pour la carte réseau.

gcloud

Pour afficher les interfaces réseau (NIC) d'une instance Compute, utilisez la commande gcloud compute instances describe. Vous pouvez ajouter une option --format à la commande pour limiter les informations renvoyées à des champs spécifiques et modifier leur affichage, par exemple:

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

La commande précédente renvoie un résultat semblable à celui-ci:

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

Envoyez une requête GET à la méthode instances.get. En ajoutant un paramètre de requête $fields à la requête, vous pouvez limiter la sortie à la seule propriété networkInterfaces.

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

Remplacez les éléments suivants :

  • PROJECT_NAME: nom du projet contenant l'instance.
  • ZONE : zone de l'instance sur laquelle vous souhaitez effectuer la requête.
  • INSTANCE_NAME : nom de la ressource d'instance à renvoyer.

Le corps de votre réponse doit ressembler à ceci:

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

Afficher toutes les instances de calcul d'un réseau

Utilisez l'une des méthodes suivantes pour afficher toutes les instances de calcul d'un réseau donné.

Console

  1. Dans la console Google Cloud , accédez à la page Réseaux VPC.

    Accéder aux réseaux VPC

  2. Facultatif: Utilisez la zone Filtre pour limiter le nombre de chaînes affichées.

  3. Cliquez sur le nom du réseau pour lequel vous souhaitez lister les instances de calcul.

  4. Sélectionnez l'onglet Instances pour afficher les instances de ce réseau.

gcloud

Pour afficher les instances Compute Engine qui utilisent un réseau spécifique, utilisez la commande gcloud compute instances list.

Utilisez l'option --filter pour n'afficher que les instances qui utilisent un réseau spécifique. Vous pouvez également utiliser un indicateur --format pour limiter et formater les résultats, par exemple:

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

Le résultat ressemble à ce qui suit :

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']

Déterminer si le réseau Tier_1 est activé

Utilisez l'une des méthodes suivantes pour déterminer si les performances réseau Tier_1 par VM sont activées pour une instance.

Console

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

    Accéder à la page Instances de VM

  2. (Facultatif) Utilisez la zone Filtre pour limiter le nombre d'instances affichées.

  3. Cliquez sur le nom de l'instance que vous souhaitez inspecter.

  4. Dans la section Mise en réseau, vérifiez la valeur de Niveau de bande passante de sortie totale:

    • TIER_1: la mise en réseau Tier_1 est activée.
    • -: la mise en réseau Tier_1 n'est pas activée.

gcloud

Pour afficher le paramètre networkPerformanceConfig d'une instance, utilisez la commande gcloud compute instances describe. Vous pouvez ajouter une option --format à la commande pour limiter les informations renvoyées à des champs spécifiques et modifier leur affichage, par exemple:

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

Si la mise en réseau Tier_1 n'est pas configurée pour l'instance, le champ networkPerformanceConfig n'est pas inclus dans la sortie. Si la mise en réseau de niveau 1 est activée pour une instance, la sortie ressemble à ce qui suit:

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

REST

Envoyez une requête GET à la méthode instances.get. En ajoutant un paramètre de requête $fields à la requête, vous pouvez limiter la sortie aux champs name, networkPerformanceConfig et nicType.

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

Remplacez les éléments suivants :

  • PROJECT_NAME: nom du projet contenant l'instance.
  • ZONE : zone de l'instance sur laquelle vous souhaitez effectuer la requête.
  • INSTANCE_NAME : nom de la ressource d'instance à renvoyer.

Si la mise en réseau Tier_1 n'est pas configurée pour l'instance, le champ networkPerformanceConfig n'est pas inclus dans la sortie. Si la mise en réseau de niveau 1 est activée pour une instance, la sortie ressemble à ce qui suit:

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