导读:本期聚焦于王柏年创作的《如何部署 Network Controller 并实现租户虚拟网络隔离?》,敬请观看详情。租户虚拟网络出现串流或策略失效时,根因往往不是 Hyper-V 交换机本身,而是 Network Controller 的部署拓扑没有与管理网络正确解耦。控制器既要保存逻辑网络、虚拟子网、访问控制列表等状态,又要通过南向接口持续向各台 Hyper-V 主机下发策略。要理解租户隔离为什么可靠,必须先看清管理平面与数据平面的关系。本文从架构前提、部署步骤、租户网络配置和常见故障四个角度展开,重点说明单租户与多租户场景下如何通过逻辑网络和虚拟子网实现二层隔离,并给出可操作的 PowerShell 命令示例。

Network Controller 是微软软件定义网络体系中的核心管理平面,构建在 Service Fabric 集群之上,北向提供 REST API,南向通过 OData 通道持续控制 Hyper-V 虚拟交换机、软件负载均衡器以及 RAS 网关。在租户虚拟网络场景中,Network Controller 负责把逻辑网络映射到物理 Hyper-V 主机,并维护 NVGRE 或 VXLAN 封装所需的全部策略。如果控制器本身部署不当,租户之间的隔离就会出现随机性失效,而且故障往往难以复盘。

如何部署 Network Controller 并实现租户虚拟网络隔离?

部署之前必须明确一个原则:Network Controller 保存的是期望状态,而 Hyper-V 主机上的虚拟交换机保存的是当前状态。控制器通过周期性同步和事件通知来消除两者之间的偏差。因此部署时不能只关注控制器是否在线,还要确认每台主机都能稳定接收并应用策略。

部署前的架构选择与前提准备

生产环境中,Network Controller 至少需要三个 Service Fabric 节点组成集群。三个节点通过复制状态来保证控制器应用的高可用,任意一个节点故障不会影响租户网络策略的下发。单节点部署只能用于实验,一旦宕机,整个逻辑网络配置将无法变更。

节点可以运行在虚拟机或物理服务器上,建议与管理网络分离,避免策略下发流量和日常管理流量互相抢占。所有 Hyper-V 主机需要加入同一个 Active Directory 域,且必须与 Network Controller 节点之间保证 Kerberos 认证和 HTTPS 连通。如果主机无法通过 443 端口访问控制器节点,后续注册操作会直接失败。

准备内容大致包括以下列表:

  • 三台加入域的服务器用于承载 Network Controller 集群;
  • 一个用于 REST API 的服务器身份验证证书;
  • 具有本地管理员权限的部署账户;
  • 防火墙放行 443 端口以及 Service Fabric 内部通信端口;
  • DNS 正向和反向解析记录完整。

部署前可以先在任意一台 Hyper-V 主机上执行连通性检查,确认到三个控制器节点的 HTTPS 端口可达:

$NCNodes = @("nc-node01.contoso.com","nc-node02.contoso.com","nc-node03.contoso.com")
foreach ($node in $NCNodes) {
    $result = Test-NetConnection -ComputerName $node -Port 443
    Write-Host "$node -> $($result.TcpTestSucceeded)"
}

Network Controller 部署步骤与主机注册

创建 Service Fabric 集群时,需要在三个节点上分别安装 Service Fabric 运行时,然后使用微软提供的部署脚本或通过 Windows Admin Center 完成集群初始化。集群创建成功后,才能安装 Network Controller 应用程序。PowerShell 方式部署更可控,尤其是需要批量操作多个环境时。

下面是一个部署 Network Controller 应用的示意命令,实际参数需要根据证书指纹和节点名称调整:

$nodes = @("nc-node01.contoso.com","nc-node02.contoso.com","nc-node03.contoso.com")
$certThumbprint = "1A2B3C4D5E6F7A8B9C0D1E2F3A4B5C6D7E8F9A0B"
Install-NetworkController -Node $nodes -ClusterAuthentication Kerberos -RestCertificateThumbprint $certThumbprint -RestName "ncrest.contoso.com"

部署完成后,需要把 Hyper-V 主机注册到 Network Controller。注册过程本质上是让主机信任控制器的 REST 端点,并建立双向认证通道。主机注册成功后,控制器才能读取虚拟交换机信息并下发逻辑网络策略。

注册主机可以使用 Add-NetworkControllerHost 或通过 SCVMM 统一接入。注册前要确认主机名与证书中的标识一致,否则会出现“服务器身份无法验证”的错误。

随后需要创建逻辑网络,逻辑网络是物理网络的抽象,供后续虚拟子网引用。一个逻辑网络可以包含多个虚拟子网,每个虚拟子网对应一类租户二层网络。

租户虚拟网络的隔离模型与配置

租户隔离通常使用网络虚拟化技术,常见封装为 NVGRE 或 VXLAN。每个租户虚拟网络拥有独立的路由域 ID,即使两个租户的虚拟机配置了完全相同的 IP 地址,封装头也会让物理网络把它们看作不同的流量。物理网络只负责转发封装后的数据包,完全不需要感知租户内部的 IP 规划。

配置上,逻辑网络与虚拟子网的关系就像物理 VLAN 与逻辑网段的关系,但网络虚拟化没有 4096 个 VLAN 的数量限制。每个虚拟子网可以由租户自主定义地址空间,Network Controller 会把虚拟子网映射到具体的 Hyper-V 虚拟交换机端口上。

下面创建一个逻辑网络和一个虚拟子网,并把租户 VM 的网络接口连接到该虚拟子网:

$uri = "https://ncrest.contoso.com"
$logicalNetwork = New-NetworkControllerLogicalNetwork -ConnectionUri $uri -Name "TenantLogicalNetwork" -VirtualSubnets @()
$virtualSubnet = New-NetworkControllerVirtualSubnet -ConnectionUri $uri -LogicalNetworkId $logicalNetwork.InstanceId -Name "TenantSubnet1" -AddressPrefix "10.10.10.0/24" -NetworkVirtualizationProtocol "VXLAN"
Add-NetworkControllerNetworkInterface -ConnectionUri $uri -Name "TenantVM01-NIC" -VirtualSubnetId $virtualSubnet.InstanceId -MacAddress "00-15-5D-11-22-33"

如果租户规模较小且对隔离要求不高,也可以使用传统 VLAN 隔离。但 VLAN 需要物理交换机全程配合,跨数据中心时配置复杂,而网络虚拟化完全由 Hyper-V 主机完成封装,交换机只看到普通 IP 流量,因此更适合多租户云环境。

还需要注意封装类型的一致性。如果一台主机使用 VXLAN 而另一台主机配置为 NVGRE,即使策略下发成功,租户虚拟机的二层通信也会中断。因此在创建虚拟子网时,务必统一指定 NetworkVirtualizationProtocol 参数。

常见部署问题与排查思路

Network Controller 集群状态异常是比较常见的问题。可以通过 Service Fabric 健康查询命令查看应用状态:

Connect-ServiceFabricCluster -ConnectionEndpoint "nc-node01.contoso.com:19000"
Get-ServiceFabricClusterHealth

如果发现 Network Controller 应用分区副本长时间处于 InBuild 或 Warning 状态,需要检查三个节点之间的网络延迟和时钟偏差。Service Fabric 对节点间通信延迟非常敏感,延迟过高会导致状态同步失败。

Hyper-V 主机注册失败时,优先检查证书信任链和防火墙。主机与控制器之间的 443 端口不仅要通,还要保证主机信任控制器 REST 证书的根 CA。可以使用浏览器或 PowerShell 的 Invoke-WebRequest 访问 REST 端点验证证书。

租户 VM 无法通信时,先在 Network Controller 上查看虚拟网络和虚拟子网是否存在,再检查 Hyper-V 主机是否收到了对应策略。使用 Get-NetworkControllerVirtualNetwork 和 Get-NetworkControllerVirtualSubnet 可以确认控制器侧配置,再在主机上使用 Get-VMNetworkAdapterIsolation 查看封装信息。

物理网络如果启用了访问控制列表,需要放行 VXLAN 使用的 UDP 4789 端口。如果使用 NVGRE,则需要允许 GRE 协议通过。很多环境只放行了 TCP 和 UDP,容易遗漏 GRE 协议,导致封装后的流量被丢弃。

最后,Network Controller 的日志和 Service Fabric 事件日志是排查深度问题的重要依据。遇到策略下发延迟,不要只看控制器界面状态,还应检查主机上的 Hyper-V Network 事件日志,确认策略应用时间与控制器下发时间是否匹配。

Network Controller租户虚拟网络SDN部署修改时间:2026-10-02 17:37:41

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/1002/64764.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。