本文將逐步說明如何使用 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 專案管理員授予您代管 DNS 專案管理員 (
managed-dns-project-admin) 角色。 - 如要使用 gdcloud 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 要求轉送至託管該 DNS 區域的 GDC 名稱伺服器。
擷取您建立的
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資源,建立只能從預設客戶虛擬私有雲存取的 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完全相同。