GCP Cloud DNS
- 1 DNS API 사용설정
- 2 DNS 영역 만들기
- 2.1 DNS 영역만들기
- 2.2 프로젝트 간 바인딩 영역
- 2.3 레크드 세트 추가
- 2.4 도메인 네임서버 업데이트
- 3 VM에서 비공개 zone 업데이트
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
같은 조직 내 다른 프로젝트에서 소유한 네트워크에 바인딩할 수 있는 관리형 비공개 영역을 만들려면 다음을 수행합니다.
안내를 따라 비공개 영역을 만듭니다.
동일한 프로젝트에서 네트워크를 지정하는 대신 동일한 조직의 다른 프로젝트에서 네트워크 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 에 넣고 테스팅 필요.