本文档将引导您了解如何通过使用 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 区域:
创建并应用
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 区域
您可以使用 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。