DNS 바인딩 구성

이 페이지에서는 표준 VMware Engine 네트워크의 DNS 바인딩을 구성하는 방법을 설명합니다.

각 프라이빗 클라우드는 모든 관리 어플라이언스 확인에 사용되는 Cloud DNS 서버를 배포합니다. DNS 바인딩을 설정하여 이 서버를 모든 VMware 워크로드의 DNS 서버로 구성할 수 있습니다. 그러려면 다음 단계를 수행해야 합니다.

  1. 프라이빗 클라우드 DNS 서버의 IP 주소 가져오기
  2. 사용자 주 구성원이 인트라넷 VPC에 바인딩할 수 있도록 DNS 바인딩 권한 설정
  3. VMware 워크로드 또는 NSX-T 세그먼트 DHCP DNS 설정의 DNS 구성

시작하기 전에

gcloud 도구나 API를 사용해서만 DNS 바인딩을 구성할 수 있습니다.

gcloud 및 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의 코드 샘플을 확인하세요.

프라이빗 클라우드 워크로드 DNS 서버 IP 가져오기

콘솔

프라이빗 클라우드 DNS 서버의 IP 주소를 가져오려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에 액세스합니다.
  2. 기본 탐색 메뉴에서 프라이빗 클라우드를 클릭합니다.
  3. 연결할 프라이빗 클라우드의 이름을 클릭합니다.
  4. 프라이빗 클라우드의 요약 페이지에 있는 프라이빗 Cloud DNS 서버에서 복사를 클릭하여 프라이빗 Cloud DNS 서버 IP 주소를 복사합니다.

gcloud

Google Cloud CLI를 사용하여 프라이빗 클라우드 DNS 서버의 IP 주소를 가져오려면 gcloud vmware private-clouds describe 명령어를 사용합니다.

gcloud vmware private-clouds describe \
  --private-cloud=PRIVATE_CLOUD_ID \
  --project=PROJECT_ID \
  --location=REGION

다음을 바꿉니다.

  • PRIVATE_CLOUD_ID: 이 요청의 프라이빗 클라우드 이름입니다.
  • PROJECT_ID: 이 요청의 프로젝트 ID입니다.
  • REGION: 프라이빗 클라우드의 리전입니다. 확장된 프라이빗 클라우드인 경우 이 프라이빗 클라우드의 영역을 지정합니다.

API

VMware Engine API를 사용하여 프라이빗 클라우드 DNS 서버의 IP 주소를 가져오려면 GET 요청을 수행합니다.

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/privateCloud/PRIVATE_CLOUD_ID"

다음을 바꿉니다.

  • PROJECT_ID: 이 요청의 프로젝트 ID입니다.
  • REGION: 프라이빗 클라우드의 리전입니다. 이 프라이빗 클라우드를 확장한 경우 이 프라이빗 클라우드의 영역을 지정합니다.
  • PRIVATE_CLOUD_ID: 이 요청의 프라이빗 클라우드 이름입니다.

DNS 바인딩 권한 설정

gcloud 도구를 사용하거나 REST API를 직접 사용하여 DNS 바인딩 권한만 설정하고 관리할 수 있습니다. 콘솔을 통해 바인딩을 설정할 수는 없습니다.

DNS 바인딩 권한 부여

사용자가 DNS 바인딩을 구성하려면 인트라넷 VPC에 바인딩할 수 있는 권한을 사용자 주 구성원에게 부여해야 합니다. 이 경우 사용자 주 구성원은 비공개 DNS 영역을 인트라넷 VPC와 바인딩할 사용자의 이메일 주소입니다.

gcloud

gcloud vmware dns-bind-permission grant \
  --user=USER

USER를 비공개 DNS 영역을 인트라넷 VPC와 결합하려는 사용자의 이메일로 바꿉니다. 예를 들면 example1@gmail.com입니다.

API

dnsBindPermissions:grant 메서드에 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/global/privateClouds/dnsBindPermission:grant

{
"Principal": {
  "user": "USER"
}
}

다음을 바꿉니다.

  • PROJECT_ID: 이 요청의 프로젝트
  • USER: 권한을 취소하려는 사용자의 이메일. 예를 들면 example1@gmail.com입니다.

DNS 바인딩 권한 취소

이전에 사용자에게 부여된 DNS 바인딩 권한을 취소합니다.

gcloud

gcloud vmware dns-bind-permission revoke \
  --user=USER

USER를 권한을 취소하려는 사용자의 이메일로 바꿉니다. 예를 들면 example1@gmail.com입니다.

API

dnsBindPermissions:revoke에 대해 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/global/privateClouds/dnsBindPermission:revoke

{
"Principal": {
  "user": "USER"
}
}

다음을 바꿉니다.

  • PROJECT_ID: 이 요청의 프로젝트
  • USER: 권한을 취소하려는 사용자의 이메일. 예를 들면 example1@gmail.com입니다.

DNS 바인딩 권한 설명

프로젝트의 DNS 바인딩 권한과 DNS 바인딩을 구성할 수 있는 액세스 권한이 있는 사용자 주 구성원을 설명합니다.

gcloud

gcloud vmware dns-bind-permission describe

API

dnsBindPermissions 리소스에 GET 요청을 수행합니다.

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

PROJECT_ID를 이 요청의 프로젝트로 바꾸세요.

VMware Engine 네트워크 인트라넷 VPC와 프라이빗 Cloud DNS 영역 바인딩

사용자 주 구성원에게 DNS 바인딩을 구성할 수 있는 권한을 부여하면 사용자는 Cloud DNS의 비공개 DNS 영역과 VMware Engine 네트워크의 인트라넷 VPC 간에 바인딩을 만들 수 있습니다. VMware Engine은 DNS 피어링을 사용하여 Cloud DNS 변환을 지원합니다.

인트라넷 VPC URL 찾기

새 바인딩을 만들려면 네트워크 인트라넷 VPC URL이 필요합니다. VMware Engine 네트워크 인트라넷 VPC는 VMware Engine 네트워크의 세부정보를 나열하여 찾을 수 있습니다.

콘솔

Google Cloud 콘솔을 사용하여 인트라넷 VPC URL을 찾으려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에 액세스합니다.
  2. 기본 탐색 메뉴에서 VMware Engine 네트워크를 클릭합니다.
  3. VMware Engine 네트워크를 찾아 작업 옵션을 클릭하고 인트라넷 VPC 네트워크 URL 복사를 선택합니다.

gcloud

gcloud vmware networks describe VMWARE_ENGINE_NETWORK

VMWARE_ENGINE_NETWORK를 설명할 네트워크로 바꿉니다. 응답의 일부로 gcloud는 인트라넷 VPC URL이 포함된 네트워크의 세부정보를 반환합니다.

API

vmwareEngineNetworks 리소스에 대한 GET 요청을 수행하고 네트워크 이름을 제공합니다.

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

다음을 바꿉니다.

  • PROJECT_ID: 이 요청의 프로젝트입니다.
  • NETWORK_ID: 설명할 네트워크입니다.

바인딩

바인딩 권한이 구성되면, 의도된 워크플로우는 VMware Engine 네트워크 인트라넷 VPC를 각 영역에 대한 표준 Cloud DNS 영역 관리 프로세스에 DNS 피어링을 추가하는 것입니다.

gcloud

gcloud dns managed-zones create peering-DOMAIN  \
--dns-name="DOMAIN" \
--visibility="private" \
--networks="INTRANET_VPC_URL" \
--target-project="PROJECT_ID" \
--target-network="EXISTING_VPC" \
--description="DESCRIPTION"

다음을 바꿉니다.

  • DOMAIN: 확장할 도메인(예: zone1.example.com)입니다.
  • INTRANET_VPC_URL: VMware Engine 네트워크의 인트라넷 VPC URL입니다.
  • EXISTING_VPC: DOMAIN이 이미 바인딩된 기존 VPC 네트워크의 URL입니다.
  • PROJECT_ID: 이 요청의 프로젝트 ID입니다.

API

managedZones 리소스에 대한 PATCH 요청을 수행하고 영역 이름을 제공합니다.

curl -X POST -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://dns.googleapis.com/v1/projects/PROJECT_ID/managedZones -d "{
"name": "peering-DOMAIN",
"description": "",
"dnsName": DOMAIN,
"peeringConfig": {
    "targetNetwork": {
        "networkUrl": EXISTING_VPC
    }
  },
  "privateVisibilityConfig": {
    "networks": [
      {
        "networkUrl": INTRANET_VPC_URL
      }
    ]
  }
}"

다음을 바꿉니다.

  • PROJECT_ID: 이 요청의 프로젝트 ID입니다.
  • DOMAIN: 확장할 도메인(예: zone1.example.com)입니다.
  • INTRANET_VPC_URL: VMware Engine 네트워크의 인트라넷 VPC URL입니다.
  • EXISTING_VPC: DOMAIN이 이미 바인딩된 기존 VPC 네트워크의 URL입니다.

DNS 바인딩 예시

다음은 사용할 수 있는 DNS 바인딩의 예시입니다.

권한

gcloud dns managed-zones create zone1 \
  --dns-name="zone1.example.com." \
  --visibility="private" \
  --description="DESCRIPTION" \
  --networks="EXISTING_VPC"
gcloud dns managed-zones create peering-zone1 \
  --dns-name="zone1.example.com." \
  --visibility="private" \
  --networks="INTRANET_VPC_URL" \
  --target-project="PROJECT_ID" \
  --target-network="EXISTING_VPC" \
  --description="DESCRIPTION"

조건부 전달

gcloud dns managed-zones create zone1 \
  --description="DESCRIPTION" \
  --dns-name="zone1.example.com." \
  --visibility="private" \
  --networks=EXISTING_VPC \
  --forwarding-targets="DNS_SERVER_IP1","DNS_SERVER_IP2"
gcloud dns managed-zones create peering-zone1 \
  --dns-name="zone1.example.com." \
  --visibility="private" \
  --networks="INTRANET_VPC_URL" \
  --target-project="PROJECT_ID" \
  --target-network="EXISTING_VPC" \
  --description="DESCRIPTION"

모두 전달

gcloud dns managed-zones create forward-all \
  --description="" --dns-name="." \
  --visibility="private" \
  --networks="EXISTING_VPC" \
  --forwarding-targets="DNS_SERVER_IP1","DNS_SERVER_IP2"
gcloud dns managed-zones create peering-forward-all \
  --dns-name="." \
  --visibility="private" \
  --networks="INTRANET_VPC_URL" \
  --target-project="PROJECT_ID" \
  --target-network="EXISTING_VPC" \
  --description="DESCRIPTION"

Google API 비공개

gcloud dns managed-zones create googleapis \
  --dns-name="googleapis.com." \
  --visibility="private" \
  --description="Direct GCVE traffic to Private IPs for Google API Access" \
  --networks="EXISTING_VPC"
gcloud dns managed-zones create peering-googleapis  \
  --dns-name="googleapis.com." \
  --visibility="private" \
  --networks="INTRANET_VPC_URL" \
  --target-project="PROJECT_ID" \
  --target-network="EXISTING_VPC" \
  --description="DESCRIPTION"
gcloud dns record-sets create private.googleapis.com. \
  --zone="googleapis" \
  --type="A" \
  --ttl="300" \
  --rrdatas="199.36.153.8,199.36.153.9,199.36.153.10,199.36.153.11"
gcloud dns record-sets create *.googleapis.com. \
  --zone="googleapis" \
  --type="CNAME" \
  --ttl="300" \
  --rrdatas="private.googleapis.com."

Google API 제한됨

gcloud dns managed-zones create googleapis \
  --dns-name="googleapis.com." \
  --visibility="private" \
  --description="Direct GCVE traffic to Private IPs for Google API Access" \
  --networks="EXISTING_VPC"
gcloud dns managed-zones create peering-googleapis \
  --dns-name="googleapis.com." \
  --visibility="private" \
  --networks="INTRANET_VPC_URL" \
  --target-project="PROJECT_ID" \
  --target-network="EXISTING_VPC" \
  --description="DESCRIPTION"
gcloud dns record-sets create restricted.googleapis.com. \
  --zone="googleapis" \
  --type="A" \
  --ttl="300" \
  --rrdatas="199.36.153.4, 199.36.153.5, 199.36.153.6, 199.36.153.7"
gcloud dns record-sets create *.googleapis.com. \
  --zone="googleapis" \
  --type="CNAME" \
  --ttl="300" \
  --rrdatas="restricted.googleapis.com."