GCP-114:Cloud DNS 入門——全託管 DNS 服務完全指南
前言
每個上線的服務都離不開 DNS。Cloud DNS 是 GCP 的全託管權威 DNS 服務,跑在 Google 的全球 Anycast 網路上,而且開出業界最高的 100% 可用性 SLA。
這是 GCP 入門系列的第 14 課,我們來把 Cloud DNS 的核心概念和實際操作一次搞懂。
什麼是 Cloud DNS?
Cloud DNS 是 GCP 的全託管權威 DNS 服務,負責將域名(如 example.com)解析為 IP 位址:
使用者輸入 www.example.com
│
▼
Google 全球 Anycast DNS 網路
│
▼
Cloud DNS 查詢 Zone 記錄
│
▼
回傳 IP:203.0.113.1
核心特性
- 100% SLA——所有 Google Cloud 服務中最高的可用性保證
- 全球 Anycast 網路——自動路由到最近的節點以降低查詢延遲
- 自動擴展——支援數百萬 DNS Zone 和記錄
- 完整 API——Console、gcloud CLI、REST API、Terraform 全支援
Zone 類型
Cloud DNS 有好幾種 Zone 類型,各自對應不同的使用情境:
| Zone 類型 | 說明 | 適用場景 |
|---|---|---|
| Public Zone | 對外公開的 DNS 記錄 | 網站、API 對外服務 |
| Private Zone | 僅限指定 VPC 內部存取 | 內部服務、微服務 |
| Forwarding Zone | 將查詢轉發到指定 DNS 伺服器 | 混合雲連接地端 DNS |
| Peering Zone | 跨 VPC 的 DNS 解析 | Shared VPC、跨專案 |
| Managed Reverse Lookup | PTR 記錄(IP → 域名) | 反向 DNS 查詢 |
建立 Zone
# 建立 Public Zone
gcloud dns managed-zones create my-zone \
--dns-name="example.com." \
--description="Production zone" \
--visibility=public
# 建立 Private Zone(綁定到 VPC)
gcloud dns managed-zones create my-private-zone \
--dns-name="internal.example.com." \
--description="Internal services" \
--visibility=private \
--networks=my-vpc-network
DNS 記錄管理
支援的記錄類型
| 記錄類型 | 說明 | 範例 |
|---|---|---|
| A | IPv4 位址 | 203.0.113.1 |
| AAAA | IPv6 位址 | 2001:db8::1 |
| CNAME | DNS 別名 | www → example.com |
| MX | 郵件伺服器 | 10 mail.example.com |
| TXT | 文字記錄 | SPF、DKIM 驗證 |
| SRV | 服務位置 | 主機 + 埠號 |
| CAA | CA 授權 | 限制發行 SSL 的 CA |
| NS | 名稱伺服器 | 委派子域名 |
| PTR | 反向解析 | IP → 域名 |
使用 Transaction 管理記錄
Cloud DNS 使用 Transaction 確保記錄變更的原子性:
# 新增 A 記錄
gcloud dns record-sets transaction start --zone=my-zone
gcloud dns record-sets transaction add "203.0.113.1" \
--name="www.example.com." \
--ttl=300 \
--type=A \
--zone=my-zone
gcloud dns record-sets transaction execute --zone=my-zone
# 新增 MX 記錄
gcloud dns record-sets transaction start --zone=my-zone
gcloud dns record-sets transaction add "10 mail.example.com." \
--name="example.com." \
--ttl=300 \
--type=MX \
--zone=my-zone
gcloud dns record-sets transaction execute --zone=my-zone
# 列出所有記錄
gcloud dns record-sets list --zone=my-zone
DNSSEC
DNSSEC(DNS Security Extensions)防止 DNS 欺騙和快取中毒攻擊。Cloud DNS 提供全託管 DNSSEC:
# 建立時啟用 DNSSEC
gcloud dns managed-zones create secure-zone \
--dns-name="secure.example.com." \
--description="DNSSEC-enabled zone" \
--dnssec-state=on
# 對既有 Zone 啟用 DNSSEC
gcloud dns managed-zones update my-zone --dnssec-state=on
# 取得 DS 記錄(需在域名註冊商設定)
gcloud dns dns-keys list \
--filter='type=keySigning' \
--format='value(ds_record())' \
--zone=my-zone
DNSSEC 金鑰管理
- ZSK(Zone Signing Key):自動建立和輪換
- KSK(Key Signing Key):自動建立,但輪換需手動更新域名註冊商的 DS 記錄
- 支援 ECDSAP256SHA256(建議)、RSASHA256 等演算法
- 支援 NSEC 和 NSEC3 否定存在證明
- 啟用 DNSSEC 不額外收費
Split-Horizon DNS
Split-Horizon DNS 讓同一個域名在內部和外部回傳不同 IP:
外部使用者 → Public Zone → 203.0.113.1(外部 Load Balancer)
內部 VM → Private Zone → 10.128.0.5(內部 Load Balancer)
設定方式
- 建立
example.com的 Public Zone,指向外部 IP - 建立
example.com的 Private Zone,綁定 VPC,指向內部 IP - VPC 內的查詢自動走 Private Zone(Private Zone 優先於 Public Zone)
# Public Zone(對外)
gcloud dns managed-zones create example-public \
--dns-name="example.com." \
--visibility=public
# Private Zone(對內)
gcloud dns managed-zones create example-private \
--dns-name="example.com." \
--visibility=private \
--networks=my-vpc
DNS 路由策略
Cloud DNS 可以直接在 DNS 層級做流量導引:
| 策略 | 說明 | 適用場景 |
|---|---|---|
| 加權輪詢(WRR) | 按權重分配流量 | 金絲雀部署、A/B 測試 |
| 地理位置(Geolocation) | 按來源地理位置路由 | 多區域服務、就近存取 |
| 故障轉移(Failover) | 主要/備用自動切換 | 高可用架構 |
加權輪詢範例
# 90% 流量到 v1(203.0.113.1),10% 到 v2(203.0.113.2)(金絲雀部署)
gcloud dns record-sets create www.example.com. \
--zone=my-zone \
--type=A \
--ttl=300 \
--routing-policy-type=WRR \
--routing-policy-data="0.9=203.0.113.1;0.1=203.0.113.2"
Response Policy
Response Policy 可以在 DNS 層級覆寫解析結果:
# 建立 Response Policy
gcloud dns response-policies create security-policy \
--networks=my-vpc \
--description="Block malicious domains"
# 封鎖惡意域名(回傳 0.0.0.0)
gcloud dns response-policies rules create block-malware \
--response-policy=security-policy \
--dns-name="malicious-site.com." \
--local-data='name=malicious-site.com.,type=A,ttl=300,rrdatas=0.0.0.0'
# 豁免特定域名(passthru)
gcloud dns response-policies rules create allow-safe \
--response-policy=security-policy \
--dns-name="safe-site.com." \
--behavior=passthru
常見用途
- 安全封鎖:阻擋已知惡意域名
- VPC Service Controls:重導
*.googleapis.com到受限 VIP - 內部服務覆寫:自訂特定服務的 DNS 解析
限制:每個 VPC 只能綁定一個 Response Policy。
DNS Server Policy
Server Policy 控制 VPC 內的 DNS 行為:
# 啟用 Inbound Forwarding + 查詢日誌
gcloud dns policies create my-policy \
--networks=my-vpc \
--enable-inbound-forwarding \
--enable-logging
# 設定 Alternative Name Servers(轉發到地端 DNS)
gcloud dns policies create outbound-policy \
--networks=my-vpc \
--alternative-name-servers="10.0.0.53,10.0.0.54"
| 功能 | 說明 |
|---|---|
| Inbound Forwarding | 讓地端 DNS 可以查詢 Cloud DNS(建立進入點 IP) |
| Outbound Forwarding | 將所有 DNS 查詢轉發到指定的名稱伺服器 |
| Query Logging | 記錄每一筆 DNS 查詢到 Cloud Logging |
與其他 GCP 服務整合
| 服務 | 整合方式 |
|---|---|
| GKE | Cloud DNS 可取代 kube-dns 作為叢集 DNS |
| Cloud Run | 自訂域名映射到 Cloud Run 服務 |
| Load Balancer | 路由策略搭配健康檢查做故障轉移 |
| Shared VPC | Cross-Project Binding Zone 支援跨專案 |
| Service Directory | 服務探索,統一微服務端點註冊 |
定價
Zone 費用
| 層級 | 費用(每 Zone / 月) |
|---|---|
| 前 25 個 Zone | $0.20 |
| 第 26~10,000 個 | $0.10 |
| 超過 10,000 個 | $0.03 |
查詢費用
| 類型 | 層級 | 費用(每百萬次查詢) |
|---|---|---|
| 標準查詢 | 前 10 億次 / 月 | $0.40 |
| 標準查詢 | 超過 10 億次 / 月 | $0.20 |
| 路由策略查詢 | 前 10 億次 / 月 | $0.70 |
| 路由策略查詢 | 超過 10 億次 / 月 | $0.35 |
使用 WRR、Geolocation 或 Failover 路由策略的查詢,費用較標準查詢高。
成本估算
10 個 Zone + 1 億次查詢 / 月:
- Zone:10 × $0.20 = $2.00
- 查詢:100 × $0.40 = $40.00
- 合計:~$42 / 月
Cloud DNS 沒有免費層,但 GCP 新帳號有 $300 免費試用額度可折抵。
配額與限制
| 資源 | 預設限制 |
|---|---|
| 每個專案的 Zone 數量 | 10,000 |
| 每個 Zone 的記錄數量 | 10,000 |
| 每個網路的 Peering Zone | 1,000 |
| 每個 VPC 的 Response Policy | 1 |
| 每個 Forwarding Zone 的轉發目標 | 50 |
ACE 考試重點整理
必背知識點
- Cloud DNS 是全託管權威 DNS 服務,跑在 Google Anycast 網路上
- 100% SLA——GCP 所有服務中最高
- Private Zone 優先於 Public Zone(VPC 內查詢)
- Split-Horizon DNS:同一域名內外回傳不同 IP
- DNSSEC:全自動管理 KSK/ZSK 輪換
- Response Policy:DNS 層級封鎖惡意域名
- DNS 路由策略:WRR(加權)、Geolocation(地理)、Failover(故障轉移)
常見陷阱題
Q:需要讓同一域名在公司內部和外部解析到不同 IP,怎麼做? A:Split-Horizon DNS。建立同名的 Public Zone 和 Private Zone,VPC 內查詢自動走 Private Zone。
Q:Cloud DNS 的 SLA 是多少? A:100%。這是 GCP 所有服務中最高的 SLA。
Q:如何在 DNS 層級阻擋員工存取惡意網站? A:使用 Response Policy,建立規則將惡意域名導向 0.0.0.0。
Q:地端伺服器需要查詢 Cloud DNS 的 Private Zone,怎麼設定? A:建立 DNS Server Policy 並啟用 Inbound Forwarding,建立進入點 IP 供地端 DNS 轉發查詢。
Q:Cloud DNS 和 Cloud Domains 有什麼不同? A:Cloud DNS 是 DNS 代管服務(管理 DNS 記錄)。Cloud Domains 是域名註冊服務(購買和管理域名)。兩者是獨立的服務,通常搭配使用。
總結
Cloud DNS 就是 GCP 幫你全託管的 DNS,把幾個重點收一下:
- 定位:全託管權威 DNS,100% SLA,全球 Anycast 網路
- Zone 類型:Public(對外)、Private(對內)、Forwarding(混合雲)、Peering(跨 VPC)
- 安全:DNSSEC 自動管理、Response Policy 封鎖惡意域名
- 路由:WRR、Geolocation、Failover 三種策略
- Split-Horizon:同一域名內外不同解析
- 定價:$0.20 / Zone / 月 + $0.40 / 百萬查詢
下一課 ACE-215:GCP 基礎架構即代碼(IaC)策略,學習 Terraform、Infrastructure Manager 和 Config Connector 的實戰應用。