Conferir a configuração de rede de uma instância


Use as instruções desta página para conferir as interfaces de rede, redes, sub-redes e endereços IP de uma instância de computação.

Antes de começar

  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud . Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine selecionando uma das seguintes opções:

    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

      Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

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

        gcloud init

      Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.

Funções exigidas

Para receber as permissões necessárias para visualizar a configuração de rede de uma instância, peça ao administrador para conceder a você o papel do IAM de administrador da instância do Compute (v1) (roles/compute.instanceAdmin.v1) ou de administrador da rede do Compute (roles/compute.networkAdmin) no projeto. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esse papel predefinido contém as permissões necessárias para visualizar a configuração de rede de uma instância. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

As seguintes permissões são necessárias para visualizar a configuração de rede de uma instância:

  • Conferir a configuração de rede de uma instância: compute.instances.get na instância
  • Conferir endereços IP de uma instância: compute.instances.list no projeto

Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.

Acessar endereços IP

Você pode conferir os endereços IP internos e externos da sua instância. Os endereços IP podem ser IPv4 ou IPv6.

Console

  1. No console do Google Cloud , acesse a página Instâncias de VM.

    Acessar instâncias de VM

  2. Opcional: use a caixa Filtro para restringir o número de instâncias mostradas.

  3. Se a instância tiver um endereço IP externo, ele vai aparecer na coluna IP externo.

    Se a instância não tiver um endereço IP externo, será possível atribuir um.

Página de instâncias de VM que mostra IPs internos e externos.

Dependendo das opções de exibição de colunas, talvez apareçam mais ou menos colunas do que na imagem anterior.

gcloud

Há dois comandos que podem ser usados para conferir os endereços IP de uma instância:

  • gcloud compute instances list mostra todos os endereços IP usados por uma instância de computação, estáticos ou temporários.
  • gcloud compute addresses list mostra todos os endereços IP reservados que são atribuídos a uma instância de computação.

Esta tarefa mostra como conferir endereços IP usando comandos gcloud compute instances.

  1. Para conferir os endereços IP internos e externos das suas instâncias, use o comando gcloud compute instances list.

    gcloud compute instances list

    É possível anexar a cláusula --filter para restringir o número de instâncias retornado pelo comando, por exemplo, --filter='zone:us-central1-c'.

    O resultado será assim:

    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. Para conferir o endereço IP interno ou externo de uma instância específica, use o comando gcloud compute instances describe com uma flag --format para filtrar a saída.

    Endereços internos

    Para conferir o endereço IP interno de uma instância específica, use um destes comandos:

    • Endereços IPv4:

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

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

    Endereços externos

    Para conferir o endereço IP externo de uma instância específica, use um destes comandos:

    • Endereços IPv4:

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

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

    Substitua:

    • INSTANCE_NAME: o nome da instância cujo IP interno ou externo você quer consultar.
    • ZONE: o nome da zona em que a instância está localizada.

    Se o comando não retornar um endereço IP, a instância não terá um endereço IP externo configurado.

REST

Faça uma solicitação GET ao método instances.get. Ao anexar um parâmetro de consulta $fields à solicitação, você pode restringir a saída apenas aos campos de 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
 

Substitua:

  • PROJECT_NAME: o nome do projeto que contém a instância.
  • ZONE: a zona da instância que você quer consultar.
  • INSTANCE_NAME: o nome do recurso da instância a ser retornado.

Se algum dos endereços IP não estiver configurado, esse campo não vai aparecer na saída. Para uma instância de computação que usa uma rede de pilha dupla com um endereço IPv6 externo, o corpo da resposta é semelhante ao seguinte:

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

Os campos a seguir contêm as informações necessárias:

  • networkIP: o endereço IPv4 interno atribuído.
  • natIP: o endereço IPv4 externo atribuído.
  • externalIpv6: o endereço IPv6 externo atribuído.

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

Conferir interfaces de rede de uma instância

Cada instância de computação tem pelo menos uma interface de rede. É possível conferir as propriedades configuradas das interfaces de rede de uma instância das seguintes maneiras.

Console

  1. No console do Google Cloud , acesse a página Instâncias de VM.

    Acessar instâncias de VM

  2. Opcional: use a caixa Filtro para restringir o número de instâncias mostradas.

  3. Clique no nome da instância que você quer inspecionar.

  4. Na seção Rede, em Interfaces de rede, você pode conferir as interfaces de rede (NICs) criadas para a instância, a rede e a sub-rede associadas a cada NIC e os endereços IP atribuídos.

  5. Clique no nome de uma NIC para abrir a página Detalhes da interface de rede. Nesta página, você pode conferir os firewalls e as rotas usados pela NIC e também realizar um teste de conectividade para a NIC.

gcloud

Para conferir as interfaces de rede (NICs) de uma instância de computação, use o comando gcloud compute instances describe. É possível anexar uma opção --format ao comando para restringir as informações retornadas a campos específicos e mudar a forma como elas são exibidas, por exemplo:

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

O comando anterior retorna uma saída semelhante a esta:

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

Crie uma solicitação GET para o método instances.get. Ao anexar um parâmetro de consulta $fields à solicitação, você pode restringir a saída apenas à propriedade networkInterfaces.

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

Substitua:

  • PROJECT_NAME: o nome do projeto que contém a instância.
  • ZONE: a zona da instância que você quer consultar.
  • INSTANCE_NAME: o nome do recurso da instância a ser retornado.

O corpo da resposta deve ser semelhante a este:

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

Conferir todas as instâncias de computação em uma rede

Use um dos métodos a seguir para conferir todas as instâncias de computação em uma determinada rede.

Console

  1. No console do Google Cloud , acesse a página Redes VPC.

    Acessar redes VPC

  2. Opcional: use a caixa Filtro para restringir o número de redes mostradas.

  3. Clique no nome da rede para listar as instâncias de computação.

  4. Selecione a guia Instâncias para conferir as instâncias nessa rede.

gcloud

Para conferir as instâncias de computação que usam uma rede específica, use o comando gcloud compute instances list.

Use uma flag --filter para listar apenas as instâncias que usam uma rede específica. Também é possível usar uma flag --format para restringir e formatar os resultados, por exemplo:

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

O resultado será assim:

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

Determinar se a rede Tier_1 está ativada

Use um dos métodos a seguir para determinar se o desempenho de rede por VM de Tier_1 está ativado para uma instância.

Console

  1. No console do Google Cloud , acesse a página Instâncias de VM.

    Acessar instâncias de VM

  2. Opcional: use a caixa Filtro para restringir o número de instâncias mostradas.

  3. Clique no nome da instância que você quer inspecionar.

  4. Na seção Rede, verifique o valor de Nível de largura de banda de saída total:

    • TIER_1: a rede Tier_1 está ativada.
    • -: a rede Tier_1 não está ativada.

gcloud

Para conferir a configuração networkPerformanceConfig de uma instância, use o comando gcloud compute instances describe. É possível anexar uma opção --format ao comando para restringir as informações retornadas a campos específicos e mudar a forma como elas são exibidas, por exemplo:

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

Se a rede Tier_1 não estiver configurada para a instância, o campo networkPerformanceConfig não será incluído na saída. Se a rede Tier_1 estiver ativada para uma instância, a saída será semelhante a esta:

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

REST

Crie uma solicitação GET para o método instances.get. Ao anexar um parâmetro de consulta $fields à solicitação, é possível restringir a saída apenas aos campos name, networkPerformanceConfig e nicType.

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

Substitua:

  • PROJECT_NAME: o nome do projeto que contém a instância.
  • ZONE: a zona da instância que você quer consultar.
  • INSTANCE_NAME: o nome do recurso da instância a ser retornado.

Se a rede Tier_1 não estiver configurada para a instância, o campo networkPerformanceConfig não será incluído na saída. Se a rede Tier_1 estiver ativada para uma instância, a saída será semelhante a esta:

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