创建 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 区域与专用 DNS 区域之间的区别,请参阅 Cloud DNS 的区域类型

准备工作

如需在 GDC 中配置 DNS 区域并添加记录,您必须具备以下条件:

  • 现有项目。如需了解详情,请参阅创建项目
  • 必要的身份和访问权限角色。如需管理项目的 DNS 区域,请让您的 Project IAM Admin 为您授予 Managed DNS Project Admin (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 请求转发到托管该 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 区域

您可以使用 gcloud 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

后续步骤