1. 소개
최종 업데이트: 2021년 1월 6일
Cloud DNS란 무엇인가요?
홈페이지를 확인하세요.
빌드할 항목
이 Codelab에서는 gcloud를 사용하여 일부 VM 인스턴스의 이름 확인을 관리하는 Cloud DNS ManagedZone 및 관련 ResourceRecordSets를 만듭니다.
학습할 내용
개별 ResourceRecordSets를 생성, 읽기, 삭제, 업데이트하는 방법
필요한 항목
2. 설정
Google Cloud Platform 프로젝트 설정
gcloud에 로그인
gcloud auth login
프로젝트 만들기
gcloud projects create my-codelab-project
Cloud DNS API 사용 설정
gcloud services enable dns.googleapis.com
적용되는 데 몇 분 정도 걸릴 수 있습니다.
3. 비공개 ManagedZone 만들기
ManagedZone에는 ResourceRecordSets가 포함됩니다.
DNS 레코드를 추가하려는 도메인 이름을 기록해 둡니다. 이 예에서는 'my-domain.com'을 사용합니다. VM 인스턴스가 기본 네트워크에 있다고 가정합니다
gcloud dns managed-zones create my-zone \
--description="ManagedZone for Cloud DNS ResourceRecordSets codelab." \
--dns-name=my-domain.com. \
--networks=default \
--visibility=private
4. ResourceRecordSets 관리
이 섹션이 끝나면 도메인의 가상 사설망(VPN)을 통한 DNS 요청이 VM의 IP 주소로 확인됩니다.
예를 들어 VM의 IP 주소가 '1.2.3.4'이고 'my-domain.com'을 사용하려는 경우 해당 IP 주소로 확인하려면 'A 레코드'를 만들어야 합니다.
A 레코드 만들기
gcloud dns record-sets create "my-domain.com." --type="A" --ttl="60" --rrdatas="1.2.3.4" --zone="my-zone"
- 위치 인수 'my-domain.com' dnsName은 DNS 확인을 정의하려는 이름입니다.
- –type: 만들려는 DNS 레코드 유형을 나타냅니다.
- –ttl: 이 레코드의 TTL(수명)을 나타냅니다.
- –rrdatas: 쿼리에 대한 실제 답변을 보유합니다.
- –zone: 이 레코드를 만들어야 하는 ManagedZone을 지정하는 데 필요합니다.
DNS 개념에 대한 자세한 내용은 여기를 참조하세요.
A 레코드를 만들었으므로 이제 DNS 변환을 테스트할 수 있습니다.
SSH를 통해 머신에 연결합니다. 이 예시에서는 이름이 'dns-codelab'인 VM 인스턴스를 사용합니다. 'us-central1-a'에서
gcloud compute ssh codelab --zone=us-central1-a
‘dig’ 명령어를 사용할 수 있도록 dnsutils를 설치합니다. 명령어
sudo apt install dnsutils
도메인 검색
dig my-domain.com.
그러면 다음과 비슷한 출력이 표시됩니다.
...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19979
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
...
;; QUESTION SECTION:
;my-domain.com. IN A
;; ANSWER SECTION:
my-domain.com. 60 IN A 1.2.3.4
...
CNAME 레코드 생성, 패치, 가져오기
이제 my-domain.com을 매핑했습니다. 1.2.3.4로 바꾸려면 www.my-domain.com이 1.2.3.4로 확인됩니다. 'www.' 프리픽스는 자동으로 생성되지 않습니다
www.my-domain.com.
dig www.my-domain.com.
다음과 비슷한 출력이 표시됩니다.
...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 61964
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
...
해당 도메인에 대한 DNS 레코드가 없음을 나타냄
다른 A 레코드를 만드는 대신 다른 레코드를 가리키는 CNAME 레코드를 만들어야 합니다. 이렇게 하면 다른 IP 주소를 사용하려는 경우에 두 레코드를 모두 변경할 필요가 없습니다.
VM 인스턴스 종료
exit
CNAME 레코드 만들기
gcloud dns record-sets create "www.my-domain.com." --type="CNAME" --ttl="60" --rrdatas="my-domin.com." --zone="my-zone"
CNAME 레코드를 만들었으므로 이제 DNS 변환을 테스트할 수 있습니다.
SSH를 통해 머신에 다시 연결
gcloud compute ssh codelab --zone=us-central1-a
도메인 검색
dig www.my-domain.com.
다음과 비슷한 출력이 표시됩니다
...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 61964
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
...
이런! '–rrdatas'에 CNAME 레코드를 만들 때 오타가 있었던 것 같습니다. 플래그. 레코드를 삭제하고 다시 만드는 대신 올바른 변경사항을 패치할 수 있습니다.
VM 인스턴스 종료
exit
CNAME 레코드 패치 적용
gcloud dns record-sets update "www.my-domain.com." --type="CNAME" --rrdatas="my-domain.com." --zone="my-zone"
여기서 '–ttl'은 생략할 수 있습니다. 플래그는 변경되지 않지만 다른 모든 플래그는 ResourceRecordSet의 범용 고유 식별자의 일부이므로 포함되어야 합니다.
또한 gcloud 명령어를 사용하여 레코드가 예상대로 작동하는지 확인할 수도 있습니다.
gcloud dns record-sets describe "www.my-domain.com." --type="CNAME" --zone="my-zone"
이 함수는 출력을 생성하고
NAME TYPE TTL DATA
www.my-domain.com. CNAME 60 "my-domain.com."
CNAME 레코드가 올바르게 변경되는지 확인
gcloud compute ssh codelab --zone=us-central1-a
dig www.my-domain.com.
다음과 비슷한 출력이 표시됩니다
...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7471
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
...
;; QUESTION SECTION:
;www.my-domain.com. IN A
;; ANSWER SECTION:
www.my-domain.com. 60 IN CNAME my-domain.com..
...
DELETE로 정리
ManagedZone을 삭제하려면 먼저 ManagedZone 내의 모든 ResourceRecordSet를 삭제해야 합니다. 단, NS 및 SOA 레코드는 예외적으로 자동으로 생성되고 ManagedZone에 항상 존재해야 합니다.
VM 인스턴스 종료
exit
CNAME 레코드 삭제
gcloud dns record-sets delete "www.my-domain.com." --type="CNAME" --zone="my-zone"
A 레코드 삭제
gcloud dns record-sets delete "my-domain.com." --type="A" --zone="my-zone"
ManagedZone 삭제
gcloud dns managed-zones delete "my-zone"
5. 축하합니다
축하합니다. ResourceRecordSets를 관리하는 방법을 배웠습니다.