GCP Cloud DNS

https://cloud.google.com/dns/docs/tutorials/create-domain-tutorial?hl=ko

네트워크 관련된 설정이어서 shared-vpc에 Cloud DNS 구성.

gcloud config set project example-gw-shared-vpc

DNS API 사용설정

gcloud services enable dns.googleapis.com --project=example-gw-shared-vpc

DNS 영역 만들기

DNS 영역만들기

4단계: Cloud DNS를 사용하여 도메인 설정부터 진행을 하면 됨.

영역 유형 : 공개

영역 이름 : gcp

DNS 이름 : gcp.example.co.kr

DNSSEC : 사용 안 함

Cloud Logging : 사용 안 함

gcloud dns managed-zones create gcp \ --description=gcp \ --dns-name=gcp.example.co.kr \ --visibility=public

비공개영역 : VPC 내부에서 사용할 수 있는 비공개 영역을 만들어서 VPC에서 활용할 수 있음.

영역 조회

프로젝트 간 바인딩 영역

https://cloud.google.com/dns/docs/zones/zones-overview#cross-project_binding_zones

프로젝트 간 바인딩 영역을 사용하면 전체 VPC 네트워크의 DNS 네임스페이스 소유권과 관계없이 서비스 프로젝트의 DNS 네임스페이스 소유권을 유지할 수 있습니다.

 

DNS는 네트워크 인프라에 속하지만 해당 서비스의 project에서 직접 권한을 위임받아서 관리하는 것이 편리한 경우가 있다. 이런 경우 프로제트간 바인딩 영역을 만들어 사용한다. 그러면 각 project에서 자신만의 도메인을 관리할 수 있다.

프로젝트간 바인딩 영역을 만드는 부분은 아래에 설명이 있는데 설명이 부실하다.

https://cloud.google.com/dns/docs/zones/cross-project-binding

같은 조직 내 다른 프로젝트에서 소유한 네트워크에 바인딩할 수 있는 관리형 비공개 영역을 만들려면 다음을 수행합니다.

  1. 안내를 따라 비공개 영역을 만듭니다.

  2. 동일한 프로젝트에서 네트워크를 지정하는 대신 동일한 조직의 다른 프로젝트에서 네트워크 URL을 지정합니다. → 이 부분때문에 헷갈렸다.

shared vpc가 아닌 다른 project에서 dns zone을 만들때는 networks 에서 전체 경로(구글 문서에서는 네트워크 URL)를 지정해야 한다.

레크드 세트 추가

https://cloud.google.com/dns/docs/records?hl=ko

“수행할 작업을 지정하는 트랜잭션을 만들고 실행하여 레코드 모음에 DNS 레코드를 추가하거나 삭제할 수 있습니다. 트랜잭션은 함께 전파되어야 하는 하나 이상의 레코드 변경 사항 그룹입니다. 전체 트랜잭션이 성공하거나 실패하므로, 데이터가 중간 상태로 남지 않습니다.”

아래는 gw-was-dev.gcp.example.co.kr 에 대해서 111.111.111.111 가리키는 A 레코드를 추가한 예임.

확인하기

gcp.example.co.kr. zone에 대한 네임서버은 4개가 나온다.

도메인 네임서버 업데이트

이제 새로 만든 영역을 도메인 등록과 연결된 네임서버를 변경하여 Cloud DNS 네임서버를 가리켜야 합니다

https://cloud.google.com/dns/docs/update-name-servers?hl=ko

예를 들어 위에서는 영역을 gcp.example.co.kr 만들었다면 http://seah.co.kr 영역을 관리하는 DNS 서버에서 gcp.example.co.kr. 의 NS 레코드에 4개의 네임서버 정보를 넣어준다. (ns-cloud-e[1234].googledomains.com.)

 

네임서버 확인.

VM에서 비공개 zone 업데이트

VM 시작시 VM의 내부 ip를 비공개 영역에 자동으로 업데이트 하려고 함.

프로젝트간 바인딩 영역을 설정해서 해당 project 에서 비공개 영역을 관리하고 있어야 함.

VM에서 비공개 영역 업데이트를 하려면 IAM role 에서 dns.admin 이 필요하다. 좀 더 세부적으로 제어를 하려면 dns.resourceRecordSets.* 으로 제약을 하면 될 듯 하다. https://cloud.google.com/dns/docs/access-control?hl=ko

필요한 role을 해당 VM의 서비스 계정에 추가해 준다.

 

 

metadata 쿼리 : VM의 메타데이터 쿼리를 해서 hostname, ip 정보 등 가져올 수 있음.

https://cloud.google.com/compute/docs/metadata/default-metadata-values#vm_instance_metadata

https://cloud.google.com/compute/docs/metadata/querying-metadata

 

dns update 스크립트. startup script 에 넣고 테스팅 필요.