1. 簡介

本程式碼研究室將逐步說明如何使用完整網域名稱 (FQDN) 做為轉送目標,設定 Cloud DNS 傳出轉送區域。這項功能可讓您將 DNS 流量導向從 DNS 名稱解析的 IP 位址,而不是在轉送區域的設定中硬式編碼 IP 位址。當後端 DNS 解析器 IP 位址變更時,這項功能特別實用,因為您可以更新 FQDN 的 DNS 記錄,Cloud DNS 會自動擷取變更。
完成本程式碼研究室後,您將能夠設定使用下列項目的 Cloud DNS 轉送區域:
- 與具有 A/AAAA 記錄的不公開區域相符的 FQDN 目標。
- 由 Cloud DNS 路由政策 (地理位置或加權 round robin) 支援的 FQDN 目標,用於區域親和性或流量分配。
FQDN 轉送總覽
透過 Cloud DNS 轉送功能,您可以從 Google Cloud Platform 資源解析 Google Cloud Platform 外部 (例如地端部署或其他雲端) 託管的私人 DNS 名稱。傳統上,這項功能支援轉送至目標 IP 位址清單。FQDN 轉送功能可讓您在轉送區域中指定 FQDN 做為轉送目標,進一步擴充這項功能。
指定 FQDN 時,Cloud DNS 會使用內部查閱將其解析為 IP 位址,而內部查閱會使用來源網路的解析邏輯。也就是說,FQDN 目標可以比對私人區域、DNS 路由政策 (地理位置或加權輪詢),甚至是網際網路公開網域名稱。接著,Cloud DNS 會將查詢轉送至已解析的目的地 IP。
建構項目
使用新的私人區域轉送區域 FQDN
您將建構可實現 DNS 流量區域親和性的設定。具體做法是在私人 DNS 區域中建立地理位置轉送政策,然後將轉送區域連結至這個 FQDN 目標。這樣一來,來自特定區域 (例如 us-east1) 的流量就會轉送至對應的區域 DNS 伺服器。
使用現有私人區域轉送 FQDN
您將學會建立轉送區域,以現有私人 DNS 區域中的 A/AAAA 記錄支援的 FQDN 為目標。這項範例會將查詢轉送至使用 FQDN 轉送目標解析的靜態定義 IP 位址。
課程內容
FQDN 轉送概念
您會瞭解 FQDN 轉送功能擴充了 DNS 轉送功能,可讓您指定 FQDN 轉送目標,而不只是將 IP 位址做為傳出查詢的轉送目標。
轉送 FQDN 的優點
您會瞭解,當後端 DNS 解析器 IP 位址變更時,這項功能可免除手動更新的需要,因為 Cloud DNS 會自動從 FQDN 的 DNS 記錄中擷取變更。此外,這項功能還允許 DNS 伺服器位於共用名稱後方或動態調整規模,進而更彈性地擴充 DNS 基礎架構。
與 Cloud DNS 路由政策整合
您將瞭解如何結合使用 FQDN 轉送和 Cloud DNS 路由政策 (地理位置或加權 round robin),實現區域親和性、針對地理位置分散的部署作業提高效能,以及根據設定的權重分配流量。
Google Cloud CLI 指令語法
您將熟悉 gcloud dns managed-zones create 指令及其相關標記 (--forwarding-targets、--private-forwarding-targets),以便設定 FQDN 轉送區域。
必要條件
如要完成本程式碼研究室,請務必符合以下條件:
- Google 帳戶
- 已啟用計費功能的 Google Cloud 專案
- 已安裝並設定 gcloud 指令列工具
- 對 Cloud DNS 和 DNS 概念有基本瞭解
2. 開始設定
瞭解 FQDN 轉送情境
Cloud DNS FQDN 轉送支援多種使用情境:
- 具有 A/AAAA 記錄的不公開區域:如果 FQDN 符合不公開區域中的 A/AAAA 記錄,解析的 IP 位址會新增至轉送清單,且行為與直接轉送至目標 IP 位址相同。
- 含地理位置政策的私人區域:地理位置政策可讓您指定來源地理位置並提供相應答案,根據地理位置驗證流量分配情形。這對區域 DNS 轉送和親和性至關重要。
- 採用加權 round robin (WRR) 政策的私人區域:WRR 政策可為 DNS 名稱的每個 IP 位址指定不同權重,並驗證流量是否根據設定的權重分配。
- 含有 A/AAAA 記錄的公開區域:如果 FQDN 與同一個網路中可見的任何私人名稱都不相符,Cloud DNS 會嘗試使用公開網際網路解析該 FQDN。
瞭解 FQDN 轉送的 Google Cloud CLI 指令
如要使用 gcloud CLI 指令建立具有 FQDN 轉送目標的轉送區域,請使用 gcloud dns managed-zones create 指令。指定 FQDN 目標的金鑰旗標為 --forwarding-targets 或 --private-forwarding-targets。如要進一步瞭解標準和私人轉送方法,請參閱文件。
--forwarding-targets:IPv4/IPv6 位址清單,或區網將查詢轉送至的目標名稱伺服器網域名稱。公開顯示設定會忽略這項設定。非 RFC1918 位址會透過網際網路轉送至目標。RFC1918 位址會透過 VPC 轉送。--private-forwarding-targets:IPv4/IPv6 位址清單,或區網將查詢轉送至的目標名稱伺服器網域名稱。公開顯示設定會忽略這項設定。系統會透過 VPC 連線至這個參數指定的所有地址。
語法範例:
gcloud dns managed-zones create NAME \
--description=DESCRIPTION \
--dns-name=DNS_SUFFIX \
--networks=VPC_NETWORK_LIST \
--forwarding-targets=DEFAULT_FQDN_TARGET \
--visibility=private
請注意,您可以指定 --private-forwarding-targets,而非 --forwarding-targets。
設定 Google Cloud Platform 專案
登入 gcloud CLI。
gcloud auth login
建立專案。
gcloud projects create my-codelab-project
啟用 Cloud DNS API。這項設定可能需要幾分鐘才會生效。
gcloud services enable dns.googleapis.com
本程式碼研究室會使用新專案建立的 default 虛擬私有雲網路。你也可以建立新的網路來使用。
3. 設定區域 FQDN 轉送 (使用新的私人區域)
這個情境說明如何實現區域 DNS 轉送,確保來自特定區域的流量會轉送至該區域內的 DNS 伺服器。
建立私人 DNS 區域
首先,請建立私人 DNS 區域 (例如 foo.com.),用於代管 FQDN 和相關聯的地理位置轉送政策。這個可用區必須對預設網路顯示。
gcloud dns managed-zones create my-zone \
--description="Private Zone for FQDN outbound DNS forwarding." \
--dns-name=foo.com. \
--networks=default \
--visibility=private
在私人區域中建立地理位置轉送政策記錄集
接下來,在 my-zone 中建立記錄集 (例如 geo.foo.com.),並套用地理位置轉送政策。這個範例會為 asia-east1 和 asia-west1 設定 IP 位址。
gcloud dns record-sets create geo.foo.com. \
--ttl="30" \
--type="A" \
--zone="my-zone" \
--routing-policy-type="GEO" \
--routing-policy-data="asia-east1=192.168.0.1;us-central1=192.168.0.2"
注意:如果停用地理圍欄 (預設設定,建議使用),當原始區域中的目標不正常時,查詢會導向最近的正常區域。
使用 FQDN 目標建立轉送區域
建立轉送區域 (geo.test.com.),該區域會顯示在同一個預設網路中,並將 geo.foo.com. (具有地理位置轉送政策的 FQDN) 設為轉送目標。
gcloud dns managed-zones create my-geo-fwd-zone \
--description="Forwarding zone for FQDN outbound DNS forwarding for routing policy." \
--dns-name=geo.test.com. \
--networks=default \
--private-forwarding-targets=geo.foo.com. \
--visibility=private
現在,任何與 geo.test.com 相符的 DNS 查詢,都會根據查詢的來源區域,轉送至 geo.foo.com 的已解析 IP (例如 192.168.0.1 或 192.168.0.2)。
4. 設定 FQDN 轉送 (使用現有私人區域)
擁有現有的私人 DNS 區域
假設您已有一個名為 my-zone (foo.com.) 的私人 DNS 區域,且該區域可供 default 網路存取。
在這個私人區域中建立 DNS 資源記錄
在現有的 my-zone 中,為 a.foo.com 建立 A 類型記錄。
gcloud dns record-sets create a.foo.com. \
--ttl="30" \
--type="A" \
--zone="my-zone" \
--rrdatas=1.2.3.4
建立轉送可用區並指定 FQDN 目標
與區域 FQDN 情況類似,請建立轉送區域,並將 a.foo.com. 指定為轉送目標。
gcloud dns managed-zones create my-a-fwd-zone \
--description="Forwarding zone for FQDN outbound DNS forwarding for A record." \
--dns-name=a.test.com. \
--networks=default \
--private-forwarding-targets=a.foo.com. \
--visibility=private
任何符合 a.test.com. 的 DNS 查詢都會轉送至 a.foo.com. 的已解析 IP 位址 1.2.3.4。
5. 清除所用資源
如要刪除私有區域,請先刪除私有區域中的所有 ResourceRecordSets (NS 和 SOA 記錄除外,這類記錄會自動產生,且必須一律存在於私有區域中)。
刪除私人區域中的地理位置路由政策。
gcloud dns record-sets delete "geo.foo.com." --type="A" --zone="my-zone"
刪除不公開區域中的 A 記錄。
gcloud dns record-sets delete "a.foo.com." --type="A" --zone="my-zone"
刪除私有區域。
gcloud dns managed-zones delete "my-zone"
刪除地理位置路由政策的轉送區域。
gcloud dns managed-zones delete "my-geo-fwd-zone"
刪除 A 記錄的轉送區域。
gcloud dns managed-zones delete "my-a-fwd-zone"
6. 恭喜
恭喜!您已成功學會使用 FQDN 傳出 DNS 轉送!