VMware Engine 프라이빗 클라우드 만들기

프라이빗 클라우드는 ESXi 호스트, vCenter, vSAN, NSX-T, HCX로 구성된 격리된 VMware 스택입니다. Google Cloud 콘솔을 통해 프라이빗 클라우드를 관리합니다. 프라이빗 클라우드를 만들면 하나의 vSphere 클러스터와 해당 클러스터에서 생성된 모든 관리 VM을 얻게 됩니다.

VMware Engine은 vSphere/vSAN 서브넷에 대해 선택한 네트워크에 관리 구성요소를 배포합니다. 네트워크 IP 주소 범위는 배포 중 여러 서브넷으로 구분됩니다.

시작하기 전에

이 페이지에서 작업을 수행하기 전에 다음 기본 요건 단계를 수행합니다.

vSphere/vSAN 서브넷 주소 공간은 온프레미스 네트워크 및 Google Cloud Virtual Private Cloud(VPC) 네트워크와 같이 프라이빗 클라우드와 통신하는 네트워크와 겹쳐서는 안 됩니다. vSphere 또는 vSAN 서브넷에 대한 자세한 내용은 VMware Engine의 VLAN 및 서브넷을 참조하세요.

Google Cloud CLI 및 API 요구사항

gcloud 명령줄 도구나 API를 사용하여 VMware Engine 리소스를 관리하려면 다음 설명대로 도구를 구성하는 것이 좋습니다.

gcloud

  1. 기본 프로젝트 ID를 설정합니다.

    gcloud config set project PROJECT_ID
    
  2. 기본 리전 및 영역을 설정합니다.

    gcloud config set compute/region REGION
    
    gcloud config set compute/zone ZONE
    

gcloud vmware 도구에 대한 자세한 내용은 Cloud SDK 참조 문서를 검토하세요.

API

이 문서 집합의 API 예시는 cURL 명령줄 도구를 사용하여 API를 쿼리합니다. cURL 요청의 일부로 유효한 액세스 토큰이 필요합니다. 유효한 액세스 토큰을 가져오는 방법에는 여러 가지가 있습니다. 다음 단계에서는 gcloud 도구를 사용하여 액세스 토큰을 생성합니다.

  1. Google Cloud에 로그인합니다.

    gcloud auth login
    
  2. 액세스 토큰을 생성하여 TOKEN으로 내보냅니다.

    export TOKEN=`gcloud auth print-access-token`
    
  3. TOKEN이 제대로 설정되었는지 확인합니다.

    echo $TOKEN
    

이제 API에 대한 요청에 승인 토큰을 사용합니다. 예를 들면 다음과 같습니다.

curl -X GET -H "Authorization: Bearer \"$TOKEN\"" -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations

Python

이 문서의 Python 코드 샘플은 VMware Engine 라이브러리를 사용하여 API와 통신합니다. 이 접근 방식을 사용하려면 라이브러리를 설치해야 하며 애플리케이션 기본 사용자 인증 정보를 구성해야 합니다.

  1. Python 라이브러리를 다운로드하고 설치합니다.

    pip install google-cloud-vmwareengine
    
  2. 셸에서 명령어를 실행하여 ADC 정보를 구성합니다.

    gcloud auth application-default login
    

    또는 서비스 계정 키 파일을 사용합니다.

    export GOOGLE_APPLICATION_CREDENTIALS="FILE_PATH"
    

라이브러리에 대한 자세한 내용은 참조 페이지를 확인하거나 GitHub의 코드 샘플을 확인하세요.

프라이빗 클라우드 만들기

콘솔

Google Cloud 콘솔을 사용하여 프라이빗 클라우드를 만들려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에 액세스합니다.
  2. 기본 탐색 메뉴에서 프라이빗 클라우드를 클릭합니다.
  3. 만들기를 클릭합니다.
  4. 프라이빗 클라우드를 배포할 위치를 선택합니다.
  5. 기본 클러스터의 노드 유형을 선택합니다.
  6. 프라이빗 클라우드의 노드 수를 선택합니다. 프로덕션 워크로드의 경우 노드가 최소 3개 이상 있는 프라이빗 클라우드를 만듭니다. VMware Engine에서는 60일 후에 노드가 1개뿐인 프라이빗 클라우드를 삭제합니다.
  7. (선택사항) 관리 클러스터의 각 노드에서 사용 가능한 코어 수를 줄이려면 코어 맞춤설정 전환 버튼을 클릭합니다. 자세한 내용은 커스텀 코어 수를 참조하세요.
  8. VMware 관리 네트워크의 CIDR 범위를 입력합니다. 이 범위의 제한사항에 대한 자세한 내용은 시작하기 전에 섹션을 참조하세요.
  9. HCX 구성요소를 배포하는 데 사용되는 HCX 배포 네트워크의 CIDR 범위를 입력합니다. CIDR 범위가 온프레미스 또는 클라우드 서브넷과 겹치지 않는지 확인합니다. CIDR 범위는 /27 이상이어야 합니다.
  10. 검토 및 만들기를 클릭합니다.
  11. 설정을 검토합니다. 설정을 변경하려면 뒤로를 클릭합니다.
  12. 만들기를 클릭하여 프라이빗 클라우드 프로비저닝을 시작합니다.

다음 목록은 프라이빗 클라우드 생성 시 각 필드를 자세히 설명합니다.

  • 이름: 프라이빗 클라우드의 영구 고유 식별자입니다.
  • 설명: 프라이빗 클라우드의 세부정보 페이지에 표시되는 추가 정보입니다.
  • 리전: VMware Engine이 프라이빗 클라우드를 호스팅하는 지리적 리전입니다.
  • 영역: 같은 리전의 다른 영역과 물리적으로 격리된 리전의 하위 집합입니다. 영역은 리전 내에 있는 단일 장애 도메인입니다.
  • 기본 클러스터 이름: 프라이빗 클라우드의 초기 vSphere 클러스터에 부여되는 이름입니다. 프라이빗 클라우드의 VMware 관리 어플라이언스는 이 클러스터에서 실행됩니다.
  • 노드 유형: 기본 클러스터에 있는 노드의 하드웨어 구성입니다.
  • 노드: 기본 클러스터의 노드 수입니다.

  • 관리 IP 주소 범위: vCenter Server, NSX Manager, ESXi 호스트, 프라이빗 클라우드 인프라의 기타 부분에 사용되는 IP 주소 범위입니다. 이 범위는 워크로드 VM에 사용되지 않으므로 프라이빗 클라우드를 연결할 VPC 네트워크 또는 다른 네트워크의 어느 부분과도 겹치지 않아야 합니다.
  • VMware Engine 네트워크: 네트워크 정책에 따라 프라이빗 클라우드 연결을 처리하는 네트워크 리소스입니다. 이 VMware Engine 네트워크에 연결된 사용자와 리소스는 Google Cloud 내에서 프라이빗 클라우드에 액세스할 수 있습니다.

gcloud

Google Cloud CLI를 사용하여 확장된 프라이빗 클라우드를 만들려면 다음 단계를 따르세요.

  1. 선택사항: gcloud vmware locations list 명령어를 실행하여 프로젝트에 사용 가능한 리전과 영역을 나열합니다.

    gcloud vmware locations list \
        --project=PROJECT_ID
    

    다음을 바꿉니다.

    • PROJECT_ID: 이 요청의 프로젝트 ID입니다.
  2. gcloud vmware networks create 명령어를 실행하여 프라이빗 클라우드 네트워크를 만듭니다.

    gcloud vmware networks create NETWORK_NAME \
        --type=LEGACY \
        --location=REGION \
        --description="DESCRIPTION"

    다음을 바꿉니다.

    • NETWORK_NAME: 프라이빗 클라우드의 네트워크 이름입니다.
    • REGION: 프라이빗 클라우드의 리전입니다.
    • DESCRIPTION: 프라이빗 클라우드에 대한 설명입니다.

    요청이 작업 ID를 반환합니다.

  3. gcloud vmware operations describe 명령어를 실행하여 작업 상태를 확인합니다. 작업이 DONE으로 반환되면 응답을 확인하여 작업이 성공했는지 확인합니다.

    gcloud vmware operations describe OPERATION_ID \
        --location REGION

    다음을 바꿉니다.

    • OPERATION_ID: 이전 단계의 ID입니다.
    • REGION: 프라이빗 클라우드의 리전입니다.
  4. gcloud vmware private-clouds create 명령어를 실행하여 3노드 프라이빗 클라우드를 만듭니다.

    gcloud vmware private-clouds create PRIVATE_CLOUD_ID \
      --location=ZONE \
      --cluster=CLUSTER_ID \
      --node-type-config=type=standard-72,count=NODE_COUNT \
      --management-range=`IP_ADDRESS` \
      --vmware-engine-network=NETWORK_NAME
    

    다음을 바꿉니다.

    • PRIVATE_CLOUD_ID: 프라이빗 클라우드의 이름입니다.
    • ZONE: 프라이빗 클라우드의 영역입니다.
    • CLUSTER_ID: 이 프라이빗 클라우드의 새 클러스터 이름입니다.
    • NODE_COUNT: 노드 수입니다. 값을 3개 이상 지정합니다.
    • IP_ADDRESS: 이 요청의 IP 주소(예: 192.168.0.0/24)입니다.
    • NETWORK_NAME: 이 클라우드의 네트워크 이름입니다.

    요청에서 작업 진행 상태를 확인하는 데 사용할 수 있는 작업 ID를 반환합니다.

  5. gcloud vmware operations describe 명령어를 실행하여 작업 상태를 확인합니다. 작업이 DONE으로 반환되면 응답을 확인하여 작업이 성공했는지 확인합니다.

    gcloud vmware operations describe OPERATION_ID \
        --location REGION
    

    다음을 바꿉니다.

    • OPERATION_ID: 이전 단계의 ID입니다.
    • REGION: 프라이빗 클라우드의 리전입니다.
  6. 비공개 서비스 액세스를 설정하여 VMware Engine 네트워크를 VPC에 연결합니다.

  7. gcloud vmware private-clouds vcenter credentials describegcloud vmware private-clouds nsx credentials describe 명령어를 각각 실행하여 vCenter 및 NSX-T 사용자 인증 정보를 검색합니다.

    gcloud vmware private-clouds vcenter credentials describe \
        --private-cloud=PRIVATE_CLOUD_ID \
        --location=ZONE
    gcloud vmware private-clouds nsx credentials describe \
        --private-cloud=PRIVATE_CLOUD_ID \
        --location=ZONE

    다음을 바꿉니다.

    • PRIVATE_CLOUD_ID: 프라이빗 클라우드의 ID입니다.
    • ZONE: 프라이빗 클라우드의 영역입니다.

API

VMware Engine API를 사용하여 확장된 프라이빗 클라우드를 만들려면 다음 단계를 따르세요.

  1. POST 요청을 수행하여 레거시 네트워크를 만듭니다.

    curl -X POST -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/vmwareEngineNetworks?vmwareEngineNetworkId=NETWORK_NAME -d "{"type": "legacy"}"
    

    다음을 바꿉니다.

    • TOKEN: 이 요청의 승인 토큰입니다.
    • PROJECT_ID: 이 요청의 프로젝트입니다.
    • REGION: 이 네트워크를 만들 리전입니다.
    • NETWORK_NAME: 프라이빗 클라우드의 네트워크 이름입니다.

    요청에서 작업 진행 상태를 확인하는 데 사용할 수 있는 작업 ID를 반환합니다.

  2. GET 요청을 하여 작업 상태를 확인합니다. 작업이 DONE으로 반환되면 응답을 확인하여 작업이 성공했는지 확인합니다.

    curl -X GET -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
    

    OPERATION_ID를 이전 단계의 ID로 바꿉니다.

  3. POST 요청을 수행하여 3노드 프라이빗 클라우드를 만듭니다.

    curl -X POST -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/privateClouds?privateCloudId=PRIVATE_CLOUD_ID -d "{
    "networkConfig":{
      "vmwareEngineNetwork":"projects/PROJECT_ID/locations/REGION/vmwareEngineNetworks/NETWORK_NAME",
      "managementCidr":"10.241.0.0/22"
       },
    "managementCluster":{
      "clusterId": "CLUSTER_ID",
      "nodeTypeConfigs": {
      "standard-72": {
        "nodeCount": NODE_COUNT
       }
      }
     }
    }"
    

    다음을 바꿉니다.

    • TOKEN: 이 요청의 승인 토큰입니다.
    • PROJECT_ID: 이 요청의 프로젝트 ID입니다.
    • ZONE: 프라이빗 클라우드의 영역입니다.
    • PRIVATE_CLOUD_ID: 프라이빗 클라우드의 ID입니다.
    • REGION: 이 프라이빗 클라우드의 네트워크 리전입니다.
    • NETWORK_NAME: 프라이빗 클라우드의 네트워크 이름입니다.
    • CLUSTER_ID: 이 프라이빗 클라우드의 새 클러스터 ID입니다.
    • NODE_COUNT: 노드 수입니다. 값을 3개 이상 지정합니다.

    요청에서 작업 진행 상태를 확인하는 데 사용할 수 있는 작업 ID를 반환합니다.

  4. GET 요청을 하여 작업 상태를 확인합니다. 작업이 DONE으로 반환되면 응답을 확인하여 작업이 성공했는지 확인합니다.

    curl -X GET -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
    

    다음을 바꿉니다.

    • PROJECT_ID: 이 요청의 프로젝트 ID입니다.
    • REGION: 프라이빗 클라우드의 리전입니다.
    • OPERATION_ID: 이전 단계의 ID입니다.
  5. 비공개 서비스 액세스를 설정하여 VMware Engine 네트워크를 VPC에 연결합니다.

  6. GET 요청을 수행하여 vCenter 및 NSX-T 사용자 인증 정보를 검색합니다.

    curl -X GET -H "Authorization: Bearer \"TOKEN"\"  -H "Content-Type: application/json; charset=utf-8" "https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/privateClouds/PRIVATE_CLOUD_ID:showVcenterCredentials"
    
    curl -X GET -H "Authorization: Bearer \"TOKEN"\"  -H "Content-Type: application/json; charset=utf-8" "https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/privateClouds/PRIVATE_CLOUD_ID:showNsxCredentials"
    

    다음을 바꿉니다.

    • PROJECT_ID: 이 요청의 프로젝트 ID입니다.
    • ZONE: 프라이빗 클라우드의 영역입니다.
    • PRIVATE_CLOUD_ID: 프라이빗 클라우드의 ID입니다.

Python

  1. 기존 네트워크를 만듭니다.

    from google.cloud import vmwareengine_v1
    
    TIMEOUT = 1200  # 20 minutes
    
    def create_legacy_network(
        project_id: str, region: str
    ) -> vmwareengine_v1.VmwareEngineNetwork:
        """
        Creates a new legacy network.
    
        Args:
            project_id: name of the project you want to use.
            region: name of the region you want to use. I.e. "us-central1"
    
        Returns:
            The newly created VmwareEngineNetwork object.
        """
        network = vmwareengine_v1.VmwareEngineNetwork()
        network.description = (
            "Legacy network created using vmwareengine_v1.VmwareEngineNetwork"
        )
        network.type_ = vmwareengine_v1.VmwareEngineNetwork.Type.LEGACY
    
        request = vmwareengine_v1.CreateVmwareEngineNetworkRequest()
        request.parent = f"projects/{project_id}/locations/{region}"
        request.vmware_engine_network_id = f"{region}-default"
        request.vmware_engine_network = network
    
        client = vmwareengine_v1.VmwareEngineClient()
        result = client.create_vmware_engine_network(request, timeout=TIMEOUT).result()
    
        return result
    
    
  2. 노드가 3개인 프라이빗 클라우드를 만듭니다.

    from google.api_core import operation
    from google.cloud import vmwareengine_v1
    
    DEFAULT_MANAGEMENT_CIDR = "192.168.0.0/24"
    DEFAULT_NODE_COUNT = 3
    
    def create_private_cloud(
        project_id: str, zone: str, network_name: str, cloud_name: str, cluster_name: str
    ) -> operation.Operation:
        """
        Creates a new Private Cloud using VMWare Engine.
    
        Creating a new Private Cloud is a long-running operation and it may take over an hour.
    
        Args:
            project_id: name of the project you want to use.
            zone: the zone you want to use, i.e. "us-central1-a"
            network_name: name of the VMWareNetwork to use for the new Private Cloud
            cloud_name: name of the new Private Cloud
            cluster_name: name for the new cluster in this Private Cloud
    
        Returns:
            An operation object representing the started operation. You can call its .result() method to wait for it to finish.
        """
        request = vmwareengine_v1.CreatePrivateCloudRequest()
        request.parent = f"projects/{project_id}/locations/{zone}"
        request.private_cloud_id = cloud_name
    
        request.private_cloud = vmwareengine_v1.PrivateCloud()
        request.private_cloud.management_cluster = (
            vmwareengine_v1.PrivateCloud.ManagementCluster()
        )
        request.private_cloud.management_cluster.cluster_id = cluster_name
    
        node_config = vmwareengine_v1.NodeTypeConfig()
        node_config.node_count = DEFAULT_NODE_COUNT
    
        # Currently standard-72 is the only supported node type.
        request.private_cloud.management_cluster.node_type_configs = {
            "standard-72": node_config
        }
    
        request.private_cloud.network_config = vmwareengine_v1.NetworkConfig()
        request.private_cloud.network_config.vmware_engine_network = network_name
        request.private_cloud.network_config.management_cidr = DEFAULT_MANAGEMENT_CIDR
    
        client = vmwareengine_v1.VmwareEngineClient()
        return client.create_private_cloud(request)
    
    

    create_private_cloud 함수는 작업 진행 상태를 확인하는 데 사용할 수 있는 작업 객체를 반환합니다.

  3. 작업 상태를 확인합니다. 작업에 대한 현재 정보를 가져옵니다.

    from google.cloud import vmwareengine_v1
    from google.longrunning.operations_pb2 import GetOperationRequest
    
    def get_operation_by_name(operation_name: str) -> Operation:
        """
        Retrieve detailed information about an operation.
    
        Args:
            operation_name: name identifying an operation you want to check.
                Expected format: projects/{project_id}/locations/{region}/operations/{operation_id}
    
        Returns:
            Operation object with details.
        """
        client = vmwareengine_v1.VmwareEngineClient()
        request = GetOperationRequest()
        request.name = operation_name
        return client.get_operation(request)
    
    def get_operation(project_id: str, region: str, operation_id: str) -> Operation:
        """
        Retrieve detailed information about an operation.
    
        Args:
            project_id: name of the project running the operation.
            region: name of the region in which the operation is running.
            operation_id: identifier of the operation.
    
        Returns:
            Operation object with details.
        """
        return get_operation_by_name(
            f"projects/{project_id}/locations/{region}/operations/{operation_id}"
        )
    
    

    작업 객체의 .result() 구성원 메서드를 사용하여 완료될 때까지 기다릴 수 있습니다.

  4. 비공개 서비스 액세스를 설정하여 VMware Engine 네트워크를 VPC에 연결합니다.

  5. vCenter 및 NSX-T 사용자 인증 정보를 가져옵니다.

    from google.cloud import vmwareengine_v1
    
    def get_vcenter_credentials(
        project_id: str, zone: str, private_cloud_name: str
    ) -> vmwareengine_v1.Credentials:
        """
        Retrieves VCenter credentials for a Private Cloud.
    
        Args:
            project_id: name of the project hosting the private cloud.
            zone: name of the zone hosting the private cloud.
            private_cloud_name: name of the private cloud.
    
        Returns:
            A Credentials object.
        """
        client = vmwareengine_v1.VmwareEngineClient()
        credentials = client.show_vcenter_credentials(
            private_cloud=f"projects/{project_id}/locations/{zone}/privateClouds/{private_cloud_name}"
        )
        return credentials
    
    
    from google.cloud import vmwareengine_v1
    
    def get_nsx_credentials(
        project_id: str, zone: str, private_cloud_name: str
    ) -> vmwareengine_v1.Credentials:
        """
        Retrieves NSX credentials for a Private Cloud.
    
        Args:
            project_id: name of the project hosting the private cloud.
            zone: name of the zone hosting the private cloud.
            private_cloud_name: name of the private cloud.
    
        Returns:
            A Credentials object.
        """
        client = vmwareengine_v1.VmwareEngineClient()
        credentials = client.show_nsx_credentials(
            private_cloud=f"projects/{project_id}/locations/{zone}/privateClouds/{private_cloud_name}"
        )
        return credentials
    
    

VMware Engine은 새 프라이빗 클라우드를 만들 때 다양한 VMware 구성요소를 배포하고 제공된 IP 주소 범위를 서브넷으로 나눕니다. 프라이빗 클라우드를 만드는 데 30분~2시간 정도 걸릴 수 있습니다. 프로비저닝이 완료되면 이메일이 전송됩니다.

다음 단계