使用 Terraform 在 Azure 中创建中心辐射型混合网络拓扑

使用 Terraform 可以定义、预览和部署云基础结构。 使用 Terraform 时,请使用 HCL 语法来创建配置文件。 利用 HCL 语法,可指定 Azure 这样的云提供程序和构成云基础结构的元素。 创建配置文件后,请创建一个执行计划,利用该计划,可在部署基础结构更改之前先预览这些更改。 验证了更改后,请应用该执行计划以部署基础结构。

此系列文章介绍如何使用 Terraform 在 Azure 中实现中心辐射型网络拓扑

使用中心辐射型拓扑可以隔离工作负荷,同时共享公用的服务。 这些服务包括标识和安全性。 中心是一个虚拟网络 (VNet),充当本地网络的中心连接点。 辐射是与中心对等互连的 VNet。 共享服务部署在中心内,而各个工作负荷部署在辐射网络内。

在本文中,学习如何:

  • 排布中心辐射型混合网络参考体系结构资源
  • 创建中心网络设备资源
  • 在 Azure 中创建中心网络,用于充当所有资源的公用连接点
  • 在 Azure 中创建单个工作负载作为分支 VNet
  • 在本地网络和 Azure 网络之间建立网关和连接
  • 创建与分支网络的 VNet 对等互连

1.配置环境

  • Azure 订阅:如果没有 Azure 订阅,请在开始之前创建一个免费帐户。

2. 了解中心辐射型拓扑体系结构

在中心辐射型拓扑中,中心是一个 VNet。 该 VNet 充当本地网络的中心连接点。 分支是与中心对等互连的 VNet,可用于隔离工作负荷。 流量通过 ExpressRoute 或 VPN 网关连接在本地数据中心与中心之间流动。 下图演示了中心辐射型拓扑中的组件:

Hub and spoke topology architecture in Azure

中心辐射型拓扑的优势

使用中心辐射型网络拓扑可以隔离工作负荷,同时共享公用的服务。 这些服务包括标识和安全性。 中心是一个 VNet,充当本地网络的中心连接点。 辐射是与中心对等互连的 VNet。 共享服务部署在中心内,而各个工作负荷部署在辐射网络内。 下面是中心辐射型网络拓扑的某些优势:

  • 成本节省 - 将服务集中到可由多个工作负荷共享的单个位置。 这些工作负荷包括网络虚拟设备和 DNS 服务器。
  • 克服订阅限制 - 通过将不同订阅中的 Vnet 对等互连到中心。
  • 关注点隔离(在中心 IT(SecOps、InfraOps)与工作负荷 (DevOps) 之间)。

中心辐射型体系结构的典型用法

中心辐射型体系结构的某些典型用法包括:

  • 许多客户在不同的环境中部署了工作负荷。 这些环境包括开发、测试和生产。 这些工作负荷经常需要共享 DNS、IDS、NTP 或 AD DS 等服务。 可将这些共享的服务放在中心 VNet 中。 这样,每个环境将部署到辐射网络以保持隔离性。
  • 工作负荷不需要彼此连接,但需要访问共享的服务。
  • 企业需要在安全方面进行集中控制。
  • 企业需要对每个辐射网络中的工作负荷进行隔离式的管理。

3. 预览演示组件

在学习此系列文章中的每篇文章过程中,各个组件将在不同的 Terraform 脚本中定义。 创建并部署的演示体系结构包括以下组件:

  • 本地网络。 组织中运行的专用局域网。 对于中心辐射型参考体系结构,Azure 中的 VNet 将用于模拟本地网络。

  • VPN 设备。 用于与本地网络建立外部连接的 VPN 设备或服务。 VPN 设备可以是硬件设备,也可以是软件解决方案。

  • 中心 VNet。 中心是本地网络的中心连接点,也是服务的托管位置。 这些服务可供辐射 VNet 中托管的不同工作负荷使用。

  • 网关子网。 VNet 网关保留在同一子网中。

  • 辐射 VNet。 辐射可以用来隔离其自己的 VNet 中的工作负荷,独立于其他辐射进行管理。 每个工作负荷可以包括多个层,并具有通过 Azure 负载均衡器连接的多个子网。

  • VNet 对等互连。 可以使用对等互连来连接两个 VNet。 对等互连连接是 VNet 之间的不可传递低延迟连接。 对等互连后,VNet 将使用 Azure 主干交换流量,而无需路由器。 在中心辐射型网络拓扑中,使用 VNet 对等互连将中心连接到每个辐射。 可以对等互连相同区域或不同区域中的 VNet。

4. 实现 Terraform 代码

  1. 创建一个目录,用于包含由多篇文章组成的整个系列文章中的示例代码。

  2. 创建名为 main.tf 的文件并插入下列代码:

    terraform {
    
      required_version = ">=0.12"
    
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>2.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  3. 创建名为 variables.tf 的文件来包含项目变量,并插入以下代码:

    variable "location" {
        description = "Location of the network"
        default     = "eastus"
    }
    
    variable "username" {
        description = "Username for Virtual Machines"
        default     = "azureuser"
    }
    
    variable "password" {
        description = "Password for Virtual Machines"
    }
    
    variable "vmsize" {
        description = "Size of the VMs"
        default     = "Standard_DS1_v2"
    }
    

    要点

Azure 上的 Terraform 故障排除

排查在 Azure 上使用 Terraform 时遇到的常见问题

后续步骤