本文將逐步說明如何使用 DNS 區域,在 Google Distributed Cloud (GDC) 氣隙環境中設定新網域的 DNS 解析。使用 DNS 區域將一組 DNS 記錄歸類在一起,並控管這些記錄是否在 GDC 的虛擬私有雲 (VPC) 外部顯示。
本文適用於負責管理機構 DNS 解析的平台管理員和應用程式運營商。
您可以在 GDC 環境中建立公開或私人 DNS 區域,以符合服務的顯示和存取需求:
- 對於需要外部網路可視性和存取的服務:設定公開 DNS 區域,允許網路外部的使用者和系統存取您的服務。如果您有網站、面向大眾的 API,或任何需要從 GDC Cloud 環境外部連線的服務,您需要公開 DNS 區域,將網域名稱對應至適當的 IP 位址。
- 需要安全且受限地存取內部系統的服務:設定私人 DNS 區域,隱藏內部網域名稱,並限制內部服務的存取權。如果您有內部應用程式、資料庫或微服務,需要僅使用安全通訊協定和私人 IP 位址與其他內部服務通訊,則需要私人 DNS 區域,將網域名稱對應至適當的 IP 位址。私人 DNS 區域可確保這些服務能使用內部網域名稱互相尋找,而不會向外部網路公開其存在或 IP 位址。這項功能可提升安全性,並簡化內部網路。
如要進一步瞭解公開和私人 DNS 區域之間的差異,請參閱「Cloud DNS 的區域類型」。
事前準備
如要在 GDC 中設定 DNS 區域並新增記錄,您必須具備下列條件:
- 現有專案。詳情請參閱「建立專案」一文。
- 必要的身分與存取權角色。如要管理專案的 DNS 區域,請要求專案 IAM 管理員授予您「Managed DNS Project Admin」(受管理 DNS 專案管理員) (
managed-dns-project-admin) 角色。 - 如要使用 gdcloud CLI,請確認已安裝該 CLI。詳情請參閱「安裝 gdcloud CLI」。
- 如果您使用
kubectl,則為全域 API 伺服器的 kubeconfig 檔案。如果尚未產生這個檔案,請參閱「登入」。詳情請參閱「全球和區域 API 伺服器」。
建立公開 DNS 區域
建立公開 DNS 區域後,您必須設定網路的 DNS 解析器,將要求轉送至適當的名稱伺服器。
建立區域
您可以使用 gdcloud CLI 或 Kubernetes API 建立公開 DNS 區域。
gdcloud
如要建立公開 DNS 區域,請使用 gdcloud dns managed-zones create 指令:
gdcloud dns managed-zones create DNS_ZONE_NAME \
--dns-name=DOMAIN_NAME \
--visibility=PUBLIC \
--description="DESCRIPTION" \
[--project=PROJECT_NAMESPACE] \
[--async]
更改下列內容:
DNS_ZONE_NAME:DNS 區域的名稱。DOMAIN_NAME:公開 DNS 區域的網域名稱,例如example.com。DESCRIPTION:DNS 區域的說明。 例如,Public DNS zone for example.com。這是選填欄位。PROJECT_NAMESPACE:專案的命名空間。 如果您已使用gdcloud config set project全域設定預設專案,則不一定要使用這個標記。--async:如果您希望指令立即傳回,而不是等待作業完成,請指定此旗標。您可以使用describe檢查作業狀態。
API
在 GDC 中使用 Kubernetes API 建立公開 DNS 區域:
建立及套用
ManagedDNSZone資源,建立可從 GDC 外部存取的 DNS 區域:kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ManagedDNSZone metadata: name: DNS_ZONE_NAME namespace: PROJECT_NAMESPACE spec: dnsName: DOMAIN_NAME description: DESCRIPTION visibility: PUBLIC EOF更改下列內容:
GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全域和區域 API 伺服器」。如果尚未產生 API 伺服器的 kubeconfig 檔案,請參閱登入瞭解詳情。DNS_ZONE_NAME:DNS 區域的名稱。PROJECT_NAMESPACE:專案的命名空間。DOMAIN_NAME:公開 DNS 區域的網域名稱,例如example.com。DESCRIPTION:DNS 區域的說明。 例如,Public DNS zone for example.com。這是選填欄位。
請注意,
visibility會區分大小寫,且必須具有確切值PUBLIC。
設定 DNS 解析器
如果是公開 DNS 區域,您必須在網路中設定 DNS 解析器,將該 DNS 區域的 DNS 要求轉送至 GDC 中託管該 DNS 區域的名稱伺服器。
擷取您建立的
ManagedDNSZone名稱伺服器。這個步驟需要使用kubectl。kubectl --kubeconfig GLOBAL_API_SERVER get manageddnszones DNS_ZONE_NAME -n PROJECT_NAMESPACE -oyaml更改下列內容:
GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全域和區域 API 伺服器」。如果尚未產生 API 伺服器的 kubeconfig 檔案,請參閱登入瞭解詳情。DNS_ZONE_NAME:DNS 區域的名稱。PROJECT_NAMESPACE:專案的命名空間。 如果您已使用gdcloud config set project全域設定預設專案,則不一定要使用這個標記。
狀態輸出內容會列出名稱伺服器:
apiVersion: networking.global.gdc.goog/v1 kind: ManagedDNSZone metadata: name: DNS_ZONE_NAME namespace: PROJECT_NAMESPACE spec: dnsName: example.com description: "Public DNS zone for example.com" visibility: PUBLIC status: … nameServers: - ns.managed-dns-public.gdc1.staging.gpcdemolabs.com更新網路中的 DNS 解析器,轉送新區域的 DNS 要求。在本範例中,DNS 解析器需要更新,才能將
example.com的要求轉送至ns.managed-dns-public.gdc1.staging.gpcdemolabs.com。這項設定假設解析器已具備適當轉送 GDC 基礎架構 DNS 區域gdc1.staging.gpcdemolabs.com的 DNS 要求所需的設定。
建立私人 DNS 區域
您可以使用 gdcloud CLI 或 Kubernetes API 建立私人 DNS 區域。
gdcloud
如要建立私人 DNS 區域,請使用 gdcloud dns managed-zones create 指令:
gdcloud dns managed-zones create DNS_ZONE_NAME \
--dns-name=DOMAIN_NAME \
--visibility=PRIVATE \
--description="DESCRIPTION" \
[--project=PROJECT_NAMESPACE] \
[--async]
更改下列內容:
DNS_ZONE_NAME:DNS 區域的名稱。DOMAIN_NAME:私人 DNS 區域的網域名稱,例如example.com。DESCRIPTION:DNS 區域的說明。 例如,Private DNS zone for example.com。這是選填欄位。PROJECT_NAMESPACE:專案的命名空間。 如果您已使用gdcloud config set project全域設定預設專案,則不一定要使用這個標記。--async:如果您希望指令立即傳回,而不是等待作業完成,請指定此旗標。您可以使用describe檢查作業狀態。
API
使用 Kubernetes API 建立私人 DNS 區域:
建立並套用
ManagedDNSZone資源,建立只能從預設客戶 VPC 存取的 DNS 區域:kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ManagedDNSZone metadata: name: DNS_ZONE_NAME namespace: PROJECT_NAMESPACE spec: dnsName: DOMAIN_NAME description: DESCRIPTION visibility: PRIVATE EOF更改下列內容:
GLOBAL_API_SERVER:全域 API 伺服器的 kubeconfig 路徑。詳情請參閱「全域和區域 API 伺服器」。如果尚未產生 API 伺服器的 kubeconfig 檔案,請參閱登入瞭解詳情。DNS_ZONE_NAME:DNS 區域的名稱。PROJECT_NAMESPACE:專案的命名空間。DOMAIN_NAME:私人 DNS 區域的網域名稱,例如example.com。DESCRIPTION:DNS 區域的說明。 例如,Private DNS zone for example.com。這是選填欄位。
請注意,
visibility會區分大小寫,且必須具有確切值PRIVATE。