使用脚本部署软件定义的网络基础结构

适用于:Windows Server 2022、Windows Server 2019、Windows Server 2016,Azure Stack HCI 版本 21H2 和 20H2

在本主题中,你将使用脚本部署 Microsoft 软件定义的网络 (SDN) 基础结构。 该基础结构包括高可用性 (HA) 网络控制器、HA 软件负载均衡器 (SLB)/多路复用器、虚拟网络和关联的访问控制列表 (ACL)。 此外,另一个脚本将为你部署租户工作负载以验证 SDN 基础结构。

如果你希望租户工作负载在其虚拟网络之外通信,可以设置 SLB NAT 规则、站点到站点网关隧道或第 3 层转发,以在虚拟和物理工作负载之间进行路由。

还可以使用 Virtual Machine Manager (VMM) 部署 SDN 基础结构。 有关详细信息,请参阅在 VMM 结构中设置软件定义的网络 (SDN) 基础结构

部署前

重要

在开始部署之前,必须规划和配置主机以及物理网络基础结构。 有关详细信息,请参阅计划软件定义的网络基础结构

所有 Hyper-V 主机上必须已安装 Windows Server 2019 或 2016。

部署步骤

首先配置 Hyper-V 主机(物理服务器)的 Hyper-V 虚拟交换机和 IP 地址分配。 可以使用任何与 Hyper-V 兼容的存储类型:共享存储或本地存储。

安装主机网络

  1. 安装适用于你的 NIC 硬件的最新网络驱动程序。

  2. 在所有主机上安装 Hyper-V 角色(有关详细信息,请参阅 Windows Server 2016 上的 Hyper-V 入门)。

    Install-WindowsFeature -Name Hyper-V -ComputerName <computer_name> -IncludeManagementTools -Restart
    
  3. 创建 Hyper-V 虚拟交换机。

    对所有主机使用相同的交换机名称,例如 sdnSwitch。 至少配置一个网络适配器;如果使用 SET,请至少配置两个网络适配器。 使用两个 NIC 可以最大程度地分配入站流量。

    New-VMSwitch "<switch name>" -NetAdapterName "<NetAdapter1>" [, "<NetAdapter2>" -EnableEmbeddedTeaming $True] -AllowManagementOS $True
    

    提示

    如果你有单独的管理 NIC,则可以跳过步骤 4 和 5。

  4. 参阅规划主题(规划软件定义的网络基础结构),并在网络管理员的帮助下获取管理 VLAN 的 VLAN ID。 将新建虚拟交换机的管理 vNIC 连接到管理 VLAN。 如果你的环境未使用 VLAN 标记,则可以省略此步骤。

    Set-VMNetworkAdapterIsolation -ManagementOS -IsolationMode Vlan -DefaultIsolationID <Management VLAN> -AllowUntaggedTraffic $True
    
  5. 参阅规划主题(规划软件定义的网络基础结构),并在网络管理员的帮助下,使用 DHCP 或静态 IP 分配来为新建 vSwitch 的管理 vNIC 分配 IP 地址。 以下示例演示如何创建静态 IP 地址并将其分配到 vSwitch 的管理 vNIC:

    New-NetIPAddress -InterfaceAlias "vEthernet (<switch name>)" -IPAddress <IP> -DefaultGateway <Gateway IP> -AddressFamily IPv4 -PrefixLength <Length of Subnet Mask - for example: 24>
    
  6. [可选] 部署一个虚拟机以托管 Active Directory 域服务(安装 Active Directory 域服务(级别 100))和 DNS 服务器。

    a. 将 Active Directory/DNS 服务器虚拟机连接到管理 VLAN:

    Set-VMNetworkAdapterIsolation -VMName "<VM Name>" -Access -VlanId <Management VLAN> -AllowUntaggedTraffic $True
    

    b. 安装 Active Directory 域服务和 DNS。

    注意

    网络控制器支持使用 Kerberos 和 X.509 证书进行身份验证。 本指南将这两种身份验证机制用于不同的目的(不过用户只需使用其中的一种)。

  7. 将所有 Hyper-V 主机加入域。 确保其 IP 地址已分配到管理网络的网络适配器的 DNS 服务器条目指向可解析域名的 DNS 服务器。

    Set-DnsClientServerAddress -InterfaceAlias "vEthernet (<switch name>)" -ServerAddresses <DNS Server IP>
    

    a. 右键单击“开始”,单击“系统”,然后单击“更改设置”。 b. 单击更改。 c. 单击“域”并指定域名。 """" d. 单击“确定”。e. 出现提示时,键入用户名和密码凭据。 f. 重新启动服务器。

验证

使用以下步骤验证是否已正确设置主机网络。

  1. 确保已成功创建 VM 交换机:

    Get-VMSwitch "<switch name>"
    
  2. 验证 VM 交换机上的管理 vNIC 是否已连接到管理 VLAN:

    注意

    仅当管理和租户流量共享同一 NIC 时才相关。

    Get-VMNetworkAdapterIsolation -ManagementOS
    
  3. 验证所有 Hyper-V 主机和外部管理资源,例如 DNS 服务器。

    确保可以使用其管理 IP 地址和/或完全限定的域名 (FQDN) 通过 ping 访问它们。

    ping <Hyper-V Host IP>
    ping <Hyper-V Host FQDN>
    
  4. 在部署主机上运行以下命令并指定每个 Hyper-V 主机的 FQDN,以确保使用的 Kerberos 凭据提供对所有服务器的访问。

    winrm id -r:<Hyper-V Host FQDN>
    

运行 SDN Express 脚本

  1. 转到 Microsoft SDN GitHub 存储库获取安装文件。

  2. 将存储库中的安装文件下载到指定的部署计算机。 单击“克隆或下载”,然后单击“下载 ZIP”

    注意

    指定的部署计算机必须运行 Windows Server 2016 或更高版本。

  3. 展开 zip 文件,并将 SDNExpress 文件夹复制到部署计算机的 C:\ 文件夹

  4. C:\SDNExpress 文件夹共享为“SDNExpress”,并为“所有人”分配对该文件夹的“读/写”权限

  5. 导航到 C:\SDNExpress 文件夹。

    你将看到以下文件夹:

    文件夹名 说明
    AgentConf 在每个 Windows Server 2016 Hyper-V 主机上保存 SDN 主机代理使用的 OVSDB 架构的最新副本,以设定网络策略。
    证书 NC 证书文件的临时共享位置。
    图像 空,将你的 Windows Server 2016 vhdx 映像放在此处
    工具 用于故障排除和调试的实用工具。 复制到主机和虚拟机。 建议将网络监视器或 Wireshark 放在此处,以便在需要时可以使用它。
    脚本 部署脚本。

    - SDNExpress.ps1
    部署并配置结构,包括网络控制器虚拟机、SLB 多路复用器虚拟机、网关池和与池对应的 HNV 网关虚拟机。
    - FabricConfig.psd1
    SDNExpress 脚本的配置文件模板。 你将根据自己的环境自定义该模板。
    - SDNExpressTenant.ps1
    在使用负载均衡 VIP 的虚拟网络上部署示例租户工作负载。
    另外,在连接到先前创建的租户工作负载的服务提供商边缘网关上预配一个或多个网络连接(IPSec S2S VPN、GRE、L3)。 IPSec 和 GRE 网关可用于通过相应的 VIP IP 地址进行连接,以及通过相应的地址池用作 L3 转发网关。
    还可以结合 Undo 选项使用此脚本删除相应的配置。
    - TenantConfig.psd1
    租户工作负载和 S2S 网关配置的模板配置文件。
    - SDNExpressUndo.ps1
    清理结构环境并将其重置为起始状态。
    - SDNExpressEnterpriseExample.ps1
    使用一个远程访问网关和(可选)每个站点的一个相应企业虚拟机预配一个或多个企业站点环境。 IPSec 或 GRE 企业网关连接到服务提供商网关的相应 VIP IP 地址,以建立 S2S 隧道。 L3 转发网关通过相应的对等 IP 地址进行连接。
    还可以结合 Undo 选项使用此脚本删除相应的配置。
    - EnterpriseConfig.psd1
    企业站点到站点网关和客户端 VM 配置的模板配置文件。

    TenantApps 用于部署示例租户工作负载的文件。
  6. 验证 Windows Server 2016 VHDX 文件是否在 Images 文件夹中

  7. 通过将 << Replace >> 标记更改为特定值来自定义 SDNExpress\scripts\FabricConfig.psd1 文件,以符合你的实验室基础结构,这包括更改主机名、域名、用户名和密码,以及“规划网络”主题中列出的网络的网络信息

  8. 在 DNS 中为 NetworkControllerRestName (FQDN) 和 NetworkControllerRestIP 创建主机 A 记录。

  9. 以具有域管理员凭据的用户身份运行脚本:

    SDNExpress\scripts\SDNExpress.ps1 -ConfigurationDataFile FabricConfig.psd1 -Verbose
    
  10. 若要撤消所有操作,请运行以下命令:

 SDNExpress\scripts\SDNExpressUndo.ps1 -ConfigurationDataFile FabricConfig.psd1 -Verbose

验证

如果 SDN Express 脚本运行完成且未报告任何错误,则你可以执行以下步骤,以确保结构资源已正确部署并且可用于租户部署。

使用诊断工具确保网络控制器中的任何结构资源都未出错。

Debug-NetworkControllerConfigurationState -NetworkController <FQDN of Network Controller Rest Name>

使用软件负载均衡器部署示例租户工作负载

部署结构资源后,可以通过部署示例租户工作负载来端到端验证 SDN 部署。 此租户工作负载包含两个虚拟子网(Web 层和数据库层),使用 SDN 分布式防火墙通过访问控制列表 (ACL) 规则对这两个子网进行保护。 可以使用虚拟 IP (VIP) 地址通过 SLB/多路复用器访问 Web 层的虚拟子网。 该脚本自动部署两个 Web 层虚拟机和一个数据库层虚拟机,并将它们连接到虚拟子网。

  1. 通过将 << Replace >> 标记更改为特定值(例如:前面在 FabricConfig.psd1 文件中定义的 VHD 映像名称、网络控制器 REST 名称、vSwitch 名称等)来自定义 SDNExpress\scripts\TenantConfig.psd1 文件

  2. 运行该脚本。 例如:

    SDNExpress\scripts\SDNExpressTenant.ps1 -ConfigurationDataFile TenantConfig.psd1 -Verbose
    
  3. 若要撤消配置,请结合 undo 参数运行该脚本。 例如:

    SDNExpress\scripts\SDNExpressTenant.ps1 -Undo -ConfigurationDataFile TenantConfig.psd1 -Verbose
    

验证

若要验证租户部署是否成功,请执行以下操作:

  1. 登录到数据库层虚拟机,然后尝试 ping 一个 Web 层虚拟机的 IP 地址(确保 Web 层虚拟机中的 Windows 防火墙已关闭)。

  2. 检查网络控制器租户资源是否发生任何错误。 从与网络控制器建立了第 3 层连接的任何 Hyper-V 主机运行以下命令:

    Debug-NetworkControllerConfigurationState -NetworkController <FQDN of Network Controller REST Name>
    
  3. 若要验证负载均衡器是否正常运行,请从任何 Hyper-V 主机运行以下命令:

    wget <VIP IP address>/unique.htm -disablekeepalive -usebasicparsing
    

    其中 <VIP IP address> 是在 TenantConfig.psd1 文件中配置的 Web 层 VIP IP 地址。

    提示

    在 TenantConfig.psd1 中搜索 VIPIP 变量。

    多次运行此命令,查看负载均衡器是否在可用的 DIP 之间切换。 也可以使用 Web 浏览器观察此行为。 浏览到 <VIP IP address>/unique.htm。 关闭浏览器,然后打开一个新实例并再次浏览。 除非浏览器在缓存超时之前缓存了页面,否则你会看到蓝色页面和绿色页面交替出现。