建立 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 專案管理員授予您代管 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 區域:

  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 要求轉送至託管該 DNS 區域的 GDC 名稱伺服器。

  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 資源,建立只能從預設客戶虛擬私有雲存取的 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 完全相同。

後續步驟