인스턴스의 네트워크 구성 보기


이 페이지의 안내에 따라 컴퓨팅 인스턴스의 네트워크 인터페이스, 네트워크, 서브넷, IP 주소를 확인하세요.

시작하기 전에

  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음 옵션 중 하나를 선택하여 Compute Engine에 인증하면 됩니다.

    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

      로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.

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

        gcloud init

      자세한 내용은 Google Cloud 인증 문서의 REST 사용을 위한 인증을 참고하세요.

필요한 역할

인스턴스의 네트워크 구성을 보는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 Compute 인스턴스 관리자 (v1) (roles/compute.instanceAdmin.v1) 또는 Compute 네트워크 관리자 (roles/compute.networkAdmin) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

이 사전 정의된 역할에는 인스턴스의 네트워크 구성을 보는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

인스턴스의 네트워크 구성을 보려면 다음 권한이 필요합니다.

  • 인스턴스의 네트워크 구성 보기: 인스턴스의 compute.instances.get
  • 인스턴스의 IP 주소 보기: 프로젝트에 대한 compute.instances.list 권한

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

IP 주소 보기

인스턴스의 내부 및 외부 IP 주소를 볼 수 있습니다. IP 주소는 IPv4 또는 IPv6 주소일 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. 선택사항: 필터 상자를 사용하여 표시되는 인스턴스 수를 제한합니다.

  3. 인스턴스에 외부 IP 주소가 있으면 이 주소가 외부 IP 열에 표시됩니다.

    인스턴스에 외부 IP 주소가 없으면 외부 IP 주소를 할당할 수 있습니다.

내부 및 외부 IP를 보여주는 VM 인스턴스 페이지

열 표시 옵션에 따라 이전 이미지에 표시된 것보다 열이 더 많거나 적을 수 있습니다.

gcloud

인스턴스의 IP 주소를 확인하는 데 사용할 수 있는 명령어는 두 가지가 있습니다.

  • gcloud compute instances list에는 컴퓨팅 인스턴스에서 사용하는 모든 IP 주소(고정 또는 임시)가 표시됩니다.
  • gcloud compute addresses list는 컴퓨팅 인스턴스에 할당된 모든 예약된 IP 주소를 보여줍니다.

이 태스크에서는 gcloud compute instances 명령어를 사용하여 IP 주소를 보는 방법을 보여줍니다.

  1. 인스턴스의 내부 및 외부 IP 주소를 보려면 gcloud compute instances list 명령어를 사용합니다.

    gcloud compute instances list

    --filter 절을 추가하여 명령어에서 반환되는 인스턴스 수를 제한할 수 있습니다(예: --filter='zone:us-central1-c').

    출력은 다음과 비슷합니다.

    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. 특정 인스턴스의 내부 또는 외부 IP 주소를 보려면 --format 플래그가 지정된 gcloud compute instances describe 명령어를 사용하여 출력을 필터링합니다.

    내부 주소

    특정 인스턴스의 내부 IP 주소를 보려면 다음 명령어 중 하나를 사용하세요.

    • IPv4 주소:

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

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

    외부 주소

    특정 인스턴스의 외부 IP 주소를 보려면 다음 명령어 중 하나를 사용하세요.

    • IPv4 주소:

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

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

    다음을 바꿉니다.

    • INSTANCE_NAME: 내부 또는 외부 IP를 확인하려는 인스턴스의 이름입니다.
    • ZONE: 인스턴스가 있는 영역의 이름입니다.

    명령어가 IP 주소를 반환하지 않으면 인스턴스에 외부 IP 주소가 구성되어 있지 않은 것입니다.

REST

instances.get 메서드에 대해 GET 요청을 실행합니다. 요청에 $fields 쿼리 매개변수를 추가하면 관심 있는 필드로만 출력을 제한할 수 있습니다.

 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
 

다음을 바꿉니다.

  • PROJECT_NAME: 인스턴스가 포함된 프로젝트의 이름입니다.
  • ZONE: 쿼리할 인스턴스의 영역
  • INSTANCE_NAME: 반환할 인스턴스 리소스의 이름

IP 주소가 구성되지 않은 경우 해당 필드는 출력에 표시되지 않습니다. 외부 IPv6 주소가 있는 이중 스택 네트워크를 사용하는 컴퓨팅 인스턴스의 경우 응답 본문은 다음과 유사합니다.

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

다음 필드에 필요한 정보가 포함되어 있습니다.

  • networkIP: 할당된 내부 IPv4 주소입니다.
  • natIP: 할당된 외부 IPv4 주소입니다.
  • externalIpv6: 할당된 외부 IPv6 주소입니다.

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

자바


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

인스턴스의 네트워크 인터페이스 보기

각 컴퓨팅 인스턴스에는 하나 이상의 네트워크 인터페이스가 있습니다. 다음과 같은 방법으로 인스턴스의 네트워크 인터페이스에 구성된 속성을 볼 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. 선택사항: 필터 상자를 사용하여 표시되는 인스턴스 수를 제한합니다.

  3. 검사할 인스턴스의 이름을 클릭합니다.

  4. 네트워킹 섹션의 네트워크 인터페이스에서 인스턴스에 생성된 네트워크 인터페이스 (NIC), 각 NIC와 연결된 네트워크 및 서브넷, 할당된 IP 주소를 확인할 수 있습니다.

  5. NIC 이름을 클릭하여 네트워크 인터페이스 세부정보 페이지를 열 수 있습니다. 이 페이지에서는 NIC에서 사용하는 방화벽과 경로를 확인하고 NIC의 연결 테스트를 실행할 수 있습니다.

gcloud

컴퓨팅 인스턴스의 네트워크 인터페이스 (NIC)를 보려면 gcloud compute instances describe 명령어를 사용합니다. 명령어에 --format 옵션을 추가하여 반환된 정보를 특정 필드로 제한하고 표시 방식을 변경할 수 있습니다. 예를 들면 다음과 같습니다.

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

위 명령어는 다음과 유사한 출력을 반환합니다.

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

instances.get 메서드에 대한 GET 요청을 생성합니다. 요청에 $fields 쿼리 매개변수를 추가하면 출력을 networkInterfaces 속성으로만 제한할 수 있습니다.

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

다음을 바꿉니다.

  • PROJECT_NAME: 인스턴스가 포함된 프로젝트의 이름입니다.
  • ZONE: 쿼리할 인스턴스의 영역
  • INSTANCE_NAME: 반환할 인스턴스 리소스의 이름

응답 본문은 다음과 비슷합니다.

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

네트워크 내의 모든 컴퓨팅 인스턴스 보기

다음 방법 중 하나를 사용하여 특정 네트워크 내의 모든 컴퓨팅 인스턴스를 확인합니다.

콘솔

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크로 이동

  2. 선택사항: 필터 상자를 사용하여 표시되는 방송 네트워크 수를 제한합니다.

  3. 컴퓨팅 인스턴스를 표시할 네트워크의 이름을 클릭합니다.

  4. 인스턴스 탭을 선택하여 해당 네트워크 내의 인스턴스를 확인합니다.

gcloud

특정 네트워크를 사용하는 컴퓨팅 인스턴스를 보려면 gcloud compute instances list 명령어를 사용합니다.

--filter 플래그를 사용하여 특정 네트워크를 사용하는 인스턴스만 나열합니다. --format 플래그를 사용하여 결과를 제한하고 형식을 지정할 수도 있습니다. 예를 들면 다음과 같습니다.

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

출력은 다음과 비슷합니다.

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

Tier_1 네트워킹 사용 설정 여부 확인

다음 방법 중 하나를 사용하여 인스턴스에 VM당 Tier_1 네트워킹 성능이 사용 설정되어 있는지 확인합니다.

콘솔

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. 선택사항: 필터 상자를 사용하여 표시되는 인스턴스 수를 제한합니다.

  3. 검사할 인스턴스의 이름을 클릭합니다.

  4. 네트워킹 섹션에서 총 이그레스 대역폭 등급의 값을 확인합니다.

    • TIER_1: Tier_1 네트워킹이 사용 설정되어 있습니다.
    • -: Tier_1 네트워킹이 사용 설정되지 않았습니다.

gcloud

인스턴스의 networkPerformanceConfig 설정을 보려면 gcloud compute instances describe 명령어를 사용합니다. 명령어에 --format 옵션을 추가하여 반환된 정보를 특정 필드로 제한하고 표시 방식을 변경할 수 있습니다. 예를 들면 다음과 같습니다.

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

인스턴스에 Tier_1 네트워킹이 구성되지 않은 경우 networkPerformanceConfig 필드가 출력에 포함되지 않습니다. 인스턴스에 Tier_1 네트워킹이 사용 설정된 경우 출력은 다음과 유사합니다.

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

REST

instances.get 메서드에 대한 GET 요청을 생성합니다. 요청에 $fields 쿼리 매개변수를 추가하면 출력을 name, networkPerformanceConfig, nicType 필드로만 제한할 수 있습니다.

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

다음을 바꿉니다.

  • PROJECT_NAME: 인스턴스가 포함된 프로젝트의 이름입니다.
  • ZONE: 쿼리할 인스턴스의 영역
  • INSTANCE_NAME: 반환할 인스턴스 리소스의 이름

인스턴스에 Tier_1 네트워킹이 구성되지 않은 경우 networkPerformanceConfig 필드가 출력에 포함되지 않습니다. 인스턴스에 Tier_1 네트워킹이 사용 설정된 경우 출력은 다음과 유사합니다.

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