教程:使用 Cloud DNS 设置网域


本教程为您演示如何注册域名,设置示例网络服务器以及使用 Cloud DNS 将网域网址指向服务器的流程。

如果您刚开始使用 Terraform for Google Cloud,请参阅 Terraform 使用入门

目标

本教程演示了如何完成以下任务:

  • 使用 Cloud Domains 注册域名
  • 创建 Compute Engine 虚拟机 (VM) 实例
  • 运行基本 Apache 网络服务器
  • 使用 Cloud DNS 设置网域
  • 更新域名服务器
  • 验证设置

费用

注册域名会产生费用。如需了解 Cloud Domains 价格,请参阅 Cloud Domains 价格

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  5. 确保您的 Google Cloud 项目已启用结算功能

  6. 启用 Compute Engine API。

    启用 API

注册域名

如果您已注册域名,请跳过此部分。

您可以使用 Cloud Domains 注册网域。Cloud Domains 可让您使用与准备工作部分中创建的网域相同的结算账号。如需了解如何使用 Cloud Domains 注册网域,请参阅注册网域

创建虚拟机实例

控制台

如需在 Compute Engine 中创建 Linux 虚拟机 (VM) 实例,请按照以下说明操作:

  1. 在 Google Cloud 控制台中,转到创建实例页面。

    转到“创建实例”

  2. 启动磁盘部分中,点击更改开始配置您的启动磁盘。
  3. Public images 标签页上,选择 Debian version 9
  4. 点击选择
  5. 防火墙部分中,选择允许 HTTP 流量
  6. 如需创建虚拟机,请点击创建

实例启动会需要一些时间,请稍等片刻。准备就绪后,实例会列在虚拟机实例页面上,并带有绿色状态图标。

连接到您的实例

  1. 在 Google Cloud 控制台中,转到虚拟机实例页面。

    转到“虚拟机实例”

  2. 在虚拟机实例列表中,点击要连接的实例所在行中的 SSH

    实例名称旁边的 SSH 按钮。

您现在具有一个用来与您的 Linux 实例互动的终端窗口。

如需了解详情,请参阅快速入门:使用 Linux 虚拟机

运行基本 Apache 网络服务器

在本部分中,您将运行并测试 Apache 网络服务器。

  1. 在 SSH 窗口中,使用 Debian 软件包管理器安装 apache2 软件包。

     sudo apt-get update && sudo apt-get install apache2 -y
     

    安装 Apache 后,操作系统会自动启动 Apache 服务器。

  2. 使用以下命令覆盖 Apache Web 服务器的默认网页:

     echo "<!doctype html><html><body><h1>Hello World!</h1></body></html>" 
    | sudo tee /var/www/html/index.html

测试服务器

测试您的实例是否正在处理其外部 IP 地址上的流量。

控制台

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到“虚拟机实例”

  2. 外部 IP 列中,复制您的实例的外部 IP 地址。
  3. 在浏览器中,导航到 http://[EXTERNAL_IP]。请勿使用 https 进行连接,因为服务器会返回 Connection Refused 错误。

现在,您应该会看到 Hello World! 页面。

如需了解详情,请参阅运行基本 Apache 网络服务器

使用 Cloud DNS 设置网域

如果您要从现有提供商进行迁移,则可以将现有区域导入到 Cloud DNS。如需查看相关说明,请参阅从现有提供商导出 DNS 配置。 否则,请按照以下步骤创建新的公开可用区。

控制台

  1. 在 Google Cloud Console 中,转到创建 DNS 可用区页面。

    转到“创建 DNS 可用区”

  2. 对于可用区类型,请选择公开

  3. 对于可用区名称,输入 my-new-zone

  4. 对于 DNS 名称,使用一个您注册的域名输入该地区的 DNS 名称后缀(例如 example.com)。

  5. DNSSEC 部分,确保已选择 Off 设置。

  6. 点击创建以创建填充了 NS 和 SOA 记录的可用区。

  7. 如需将您注册的域名指向托管服务器的 IP 地址,您必须将 A 记录添加到您的可用区。

    1. 区域详情页面上,点击添加标准
    2. 资源记录类型菜单中选择 A
    3. IPv4 地址部分,输入您的实例的外部 IP 地址。
    4. 点击创建为您的可用区创建 A 记录。
  8. (可选)添加 CNAME 记录,以将您的前缀添加到域名,例如 www.

    1. 点击添加标准
    2. DNS 名称字段中,为域名添加前缀 www
    3. 资源记录类型部分,选择 CNAME
    4. 标准名称部分,依次输入域名和一个英文句点(例如 example.com.)。
    5. 点击创建

更新域名服务器

如需更新 Cloud Domains 中的域名服务器,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 Cloud Domains 页面。

    前往 Cloud Domains

  2. 点击您要修改的域名。您还可以点击域名旁边的 更多来查看修改菜单。

  3. 如需修改 DNS 详细信息,请点击 Edit DNS details(修改 DNS 详细信息)。

  4. 选择使用 Cloud DNS(推荐)

  5. Cloud DNS 可用区列表中,选择 my-new-zone

  6. 点击保存

Terraform

您可以使用 Terraform 资源来创建虚拟机 (VM) 实例、运行 Apache Web 服务器、使用 Cloud DNS 设置网域以及更新域名服务器。

您还可以使用 Terraform 模块设置具有公开、专用、对等互连或转发可用区的 Cloud DNS。如需详细了解可用区,请参阅 DNS 可用区概览

# to setup a web-server

resource "random_id" "rnd" {
  byte_length = 4
}

resource "google_compute_instance" "default" {
  name         = "dns-compute-instance"
  machine_type = "g1-small"
  zone         = "us-central1-b"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  network_interface {
    network = "default"
    access_config {
      // Ephemeral public IP
    }
  }
  metadata_startup_script = <<-EOF
  sudo apt-get update && \
  sudo apt-get install apache2 -y && \
  echo "<!doctype html><html><body><h1>Hello World!</h1></body></html>" > /var/www/html/index.html
  EOF
}

# to allow http traffic
resource "google_compute_firewall" "default" {
  name    = "allow-http-traffic"
  network = "default"
  allow {
    ports    = ["80"]
    protocol = "tcp"
  }
  source_ranges = ["0.0.0.0/0"]
}

# to create a DNS zone
resource "google_dns_managed_zone" "default" {
  name          = "example-zone-googlecloudexample"
  dns_name      = "example-${random_id.rnd.hex}.com."
  description   = "Example DNS zone"
  force_destroy = "true"
}

# to register web-server's ip address in DNS
resource "google_dns_record_set" "default" {
  name         = google_dns_managed_zone.default.dns_name
  managed_zone = google_dns_managed_zone.default.name
  type         = "A"
  ttl          = 300
  rrdatas = [
    google_compute_instance.default.network_interface[0].access_config[0].nat_ip
  ]
}

验证设置

如需验证您的配置是否有效,请在更新域名服务器之后,转到您的域名(例如 example.com)。该域名应解析为您的 IP 地址,并指向显示您在运行基本 Apache Web 服务器中创建的 Hello World! 页面的 Compute Engine 虚拟机。

如需验证您的设置是否正确,您还可以在终端窗口上运行 dig +trace example.com 命令。将 example.com 替换为您注册的域名。

dig +trace example.com

输出内容的末尾应包含以下内容。 IP_ADDRESS 是您的网络服务器的 IP 地址。

example.com.    300 IN  A   IP_ADDRESS
;; Received 62 bytes from 216.239.34.109#53(ns-cloud-d2.googledomains.com) in 62 ms

如需验证更改是否成功,请运行以下命令:

example.com IN NS <your Cloud DNS name servers>

等待 DNS 传播完成后,您还可以运行 nslookup 命令来验证设置:

nslookup example.com

输出应包含以下内容。IP_ADDRESS 是您的网络服务器的 IP 地址。

Server:     127.0.0.1
Address:    127.0.0.1#53

Non-authoritative answer:
Name:   example.com
Address: IP_ADDRESS

清理

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud DNS 可用区页面。

    转到“Cloud DNS 可用区”

  2. 点击可用区名称(例如 my-new-zone)以进入可用区详细信息页面。

  3. 选择您创建的 A 和 CNAME 记录。

  4. 点击删除记录集

  5. 如需删除可用区,请针对可用区名称 my-new-zone 点击删除可用区

  6. 转到虚拟机实例页面。

    转到“虚拟机实例”

  7. 选择要删除的实例。

  8. 在实例所在行的 菜单上,点击删除

后续步骤