建立 DNS 區域

本文將逐步說明如何使用 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 區域:

  1. 建立及套用 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 區域的名稱伺服器。

  1. 擷取您建立的 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
    
  2. 更新網路中的 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

後續步驟