使用 Windows PowerShell 部署网络控制器

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

本主题提供有关使用 Windows PowerShell 在运行 Windows Server 2019 或 2016 的一台或多台虚拟机 (VM) 上部署网络控制器的说明。

重要

不要将网络控制器服务器角色部署在物理主机上。 若要部署网络控制器,必须在安装在 Hyper-V 主机上的 Hyper-V 虚拟机 (VM) 上安装“网络控制器”服务器角色。 在三个不同 Hyper-V 主机中的 VM 上安装网络控制器之后,必须通过使用 Windows PowerShell 命令 New-NetworkControllerServer 将主机添加到网络控制器,为软件定义网络 (SDN) 启用 Hyper-V 主机。 通过这样做,可以使 SDN 软件负载均衡器正常运行。 有关详细信息,请参阅 New-NetworkControllerServer

本主题包含以下各节:

安装网络控制器服务器角色

可以使用此过程可在虚拟机 (VM) 上安装网络控制器服务器角色。

重要

不要将网络控制器服务器角色部署在物理主机上。 若要部署网络控制器,必须在安装在 Hyper-V 主机上的 Hyper-V 虚拟机 (VM) 上安装“网络控制器”服务器角色。 在三个不同 Hyper-V 主机中的 VM 上安装网络控制器之后,必须通过将主机添加到网络控制器,为软件定义的网络 (SDN) 启用 Hyper-V 主机。 通过这样做,可以使 SDN 软件负载均衡器正常运行。

Administrators组成员或同等身份是执行此过程的最低要求。

注意

如果要使用服务器管理器而不是 Windows PowerShell 来安装网络控制器,请参阅使用服务器管理器安装网络控制器服务器角色

若要使用 Windows PowerShell 安装网络控制器,请在 Windows PowerShell 提示符处键入以下命令,然后按 Enter。

Install-WindowsFeature -Name NetworkController -IncludeManagementTools

安装网络控制器需要重启计算机。 为此,请键入以下命令,然后按 Enter。

Restart-Computer

配置网络控制器群集

网络控制器群集为网络控制器应用程序提供高可用性和可伸缩性,可以在创建群集后进行配置并托管在群集之上。

注意

可以直接在安装了网络控制器的 VM 上执行以下部分中的过程,也可以使用 Windows Server 2016 的远程服务器管理工具从运行 Windows Server 2016 或 Windows 10 的远程计算机上执行这些过程。 此外,若要执行此过程,你需要至少具有管理员身份或同等身份。 如果安装了网络控制器的计算机或 VM 已加入域,则用户帐户必须是“域用户”的成员。

可以通过创建节点对象并配置群集来创建网络控制器群集。

创建节点对象

需要为每个作为网络控制器群集成员的 VM 创建节点对象。

若要创建节点对象,请在 Windows PowerShell 命令提示符处键入以下命令,然后按 Enter。 确保为每个参数添加适用于部署的值。

New-NetworkControllerNodeObject -Name <string> -Server <String> -FaultDomain <string>-RestInterface <string> [-NodeCertificate <X509Certificate2>]

下表提供 New-NetworkControllerNodeObject 命令的每个参数的说明。

参数 说明
Name Name 参数指定要添加到群集的服务器的友好名称
服务器 Server 参数指定要添加到群集的服务器的主机名、完全限定域名 (FQDN) 或 IP 地址。 用于已加入域的计算机,需要 FQDN。
FaultDomain FaultDomain 参数指定要添加到群集的服务器故障域。 此参数定义可能与添加到群集的服务器同时发生故障的服务器。 此故障可能是由共享的物理依赖项(如电源和网络源)导致的。 容错域通常代表这些共享依赖项的相关层次结构,它包含可能从容错域树中的较高点一起发生故障的更多服务器。 在运行时,网络控制器会考虑群集中的容错域,并尝试分散网络控制器服务,使它们位于单独的容错域中。 在任何一个容错域发生故障时,此过程有助于确保该服务及其状态的可用性不遭到破坏。 容错域以分层格式进行指定。 例如:“Fd:/DC1/Rack1/Host1”,其中 DC1 是数据中心名称,Rack1 是机架名称,而 Host1 则是放置节点的主机的名称。
RestInterface RestInterface 参数指定表述性状态转移 (REST) 通信终止时所在的节点上的接口的名称。 此网络控制器接口从网络的管理层接收 Northbound API 请求。
NodeCertificate NodeCertificate 参数指定网络控制器用于计算机身份验证的证书。 如果对群集内的通信使用基于证书的身份验证,则需要该证书;该证书还用于加密网络控制器服务之间的流量。 证书使用者名称必须与节点的 DNS 名称相同。

配置群集

若要配置群集,请在 Windows PowerShell 命令提示符处键入以下命令,然后按 Enter。 确保为每个参数添加适用于部署的值。

Install-NetworkControllerCluster -Node <NetworkControllerNode[]> -ClusterAuthentication <ClusterAuthentication> [-ManagementSecurityGroup <string>][-DiagnosticLogLocation <string>][-LogLocationCredential <PSCredential>] [-CredentialEncryptionCertificate <X509Certificate2>][-Credential <PSCredential>][-CertificateThumbprint <String>] [-UseSSL][-ComputerName <string>][-LogSizeLimitInMBs<UInt32>] [-LogTimeLimitInDays<UInt32>]

下表提供 Install-NetworkControllerCluster 命令的每个参数的说明。

参数 说明
ClusterAuthentication ClusterAuthentication 参数指定用于保护节点之间的通信的身份验证类型,它还用于加密网络控制器服务之间的流量。 支持的值包括“Kerberos”、“X509”和“”。 Kerberos 身份验证使用域帐户,并且仅当网络控制器节点已加入域时才能使用该身份验证。 如果指定基于 X509 的身份验证,则必须在 NetworkControllerNode 对象中提供证书。 此外,在运行此命令之前,必须手动预配证书。
ManagementSecurityGroup ManagementSecurityGroup 参数指定安全组的名称,该安全组包含允许从远程计算机运行管理 cmdlet 的用户。 仅当 ClusterAuthentication 为 Kerberos 时,这才适用。 必须指定域安全组,而不是本地计算机上的安全组。
节点 Node 参数指定使用 New-NetworkControllerNodeObject 命令创建的网络控制器节点的列表。
DiagnosticLogLocation DiagnosticLogLocation 参数指定定期上传诊断日志的共享位置。 如果未为此参数指定值,则日志将本地存储在每个节点上。 日志将本地存储在 %systemdrive%\Windows\tracing\SDNDiagnostics 文件夹中。 群集日志将本地存储在 %systemdrive%\ProgramData\Microsoft\Service Fabric\log\Traces 文件夹中。
LogLocationCredential LogLocationCredential 参数指定访问存储日志的共享位置所需的凭据。
CredentialEncryptionCertificate CredentialEncryptionCertificate 参数指定网络控制器用于加密凭据的证书,这些凭据用于访问网络控制器二进制文件和 LogLocationCredential(如果已指定)。 在运行此命令之前,必须在所有网络控制器节点上预配该证书,并且必须在所有群集节点上注册相同的证书。 建议在生产环境中使用此参数来保护网络控制器二进制文件和日志。 如果没有此参数,则凭据将存储在明文中,并且可能被任何未经授权的用户滥用。
凭据 仅当从远程计算机运行此命令时,才需要此参数。 Credential 参数指定有权在目标计算机上运行此命令的用户帐户。
CertificateThumbprint 仅当从远程计算机运行此命令时,才需要此参数。 CertificateThumbprint 参数指定有权在目标计算机上运行此命令的用户帐户的数字公钥证书 (X509)。
UseSSL 仅当从远程计算机运行此命令时,才需要此参数。 UseSSL 参数指定用于建立远程计算机连接的安全套接字层 (SSL) 协议。 默认情况下,不使用 SSL。
计算机名 ComputerName 参数指定运行此命令的网络控制器节点。 如果未为此参数指定值,则默认使用本地计算机。
LogSizeLimitInMBs 此参数指定网络控制器可以存储的最大日志大小(以 MB 为单位)。 日志以循环方式存储。 如果提供了 DiagnosticLogLocation,则此参数的默认值为 40 GB。 如果未提供 DiagnosticLogLocation,则日志存储将在网络控制器节点上,并且此参数的默认值为 15 GB。
LogTimeLimitInDays 此参数指定存储日志的持续时间限制(以天为单位)。 日志以循环方式存储。 此参数的默认值为 3 天。

配置网络控制器应用程序

若要配置网络控制器应用程序,请在 Windows PowerShell 命令提示符处键入以下命令,然后按 Enter。 确保为每个参数添加适用于部署的值。

Install-NetworkController -Node <NetworkControllerNode[]> -ClientAuthentication <ClientAuthentication>  [-ClientCertificateThumbprint <string[]>]  [-ClientSecurityGroup <string>] -ServerCertificate <X509Certificate2> [-RESTIPAddress <String>] [-RESTName <String>] [-Credential <PSCredential>][-CertificateThumbprint <String> ] [-UseSSL]

下表提供 Install-NetworkController 命令的每个参数的说明。

参数 说明
ClientAuthentication ClientAuthentication 参数指定用于保护 REST 与网络控制器之间的通信的身份验证类型。 支持的值包括“Kerberos”、“X509”和“”。 Kerberos 身份验证使用域帐户,并且仅当网络控制器节点已加入域时才能使用该身份验证。 如果指定基于 X509 的身份验证,则必须在 NetworkControllerNode 对象中提供证书。 此外,在运行此命令之前,必须手动预配证书。
节点 Node 参数指定使用 New-NetworkControllerNodeObject 命令创建的网络控制器节点的列表。
ClientCertificateThumbprint 仅当对网络控制器客户端使用基于证书的身份验证时,才需要此参数。 ClientCertificateThumbprint 参数指定向 Northbound 层上的客户端注册的证书的指纹。
ServerCertificate ServerCertificate 参数指定网络控制器用来向客户端证明其身份的证书。 服务器证书必须在增强型密钥使用扩展中包含服务器身份验证目的,并且必须由客户端信任的 CA 颁发给网络控制器。
RESTIPAddress 无需使用网络控制器的单节点部署为 RESTIPAddress 指定值。 对于多节点部署,RESTIPAddress 参数指定 CIDR 表示法中 REST 终结点的 IP 地址。 例如,192.168.1.10/24。 ServerCertificate 的使用者名称值必须解析为 RESTIPAddress 参数的值。 当所有节点都位于同一子网上时,必须为所有多节点网络控制器部署指定此参数。 如果节点位于不同的子网上,则必须使用 RestName 参数,而不是使用 RESTIPAddress
RestName 无需使用网络控制器的单节点部署为 RestName 指定值。 唯一一次必须为 RestName 指定值的场景是,多节点部署具有位于不同子网上的节点。 对于多节点部署,RestName 参数指定网络控制器群集的 FQDN。
ClientSecurityGroup ClientSecurityGroup 参数指定其成员为网络控制器客户端的 Active Directory 安全组的名称。 仅当对 ClientAuthentication 使用 Kerberos 身份验证时,才需要此参数。 安全组必须包含从中访问 REST API 的帐户,你必须在运行此命令之前创建安全组并添加成员。
凭据 仅当从远程计算机运行此命令时,才需要此参数。 Credential 参数指定有权在目标计算机上运行此命令的用户帐户。
CertificateThumbprint 仅当从远程计算机运行此命令时,才需要此参数。 CertificateThumbprint 参数指定有权在目标计算机上运行此命令的用户帐户的数字公钥证书 (X509)。
UseSSL 仅当从远程计算机运行此命令时,才需要此参数。 UseSSL 参数指定用于建立远程计算机连接的安全套接字层 (SSL) 协议。 默认情况下,不使用 SSL。

完成网络控制器应用程序的配置后,网络控制器的部署已完成。

网络控制器部署验证

若要验证网络控制器部署,可以将凭据添加到网络控制器,然后检索该凭据。

如果使用 Kerberos 作为 ClientAuthentication 机制,则创建的 ClientSecurityGroup 中的成员身份是执行此过程所需的最低要求。

过程:

  1. 在客户端计算机上,如果使用 Kerberos 作为 ClientAuthentication 机制,请使用一个属于 ClientSecurityGroup 成员的用户帐户登录。

  2. 打开 Windows PowerShell,键入以下命令以将凭据添加到网络控制器,然后按 Enter。 确保为每个参数添加适用于部署的值。

    $cred=New-Object Microsoft.Windows.Networkcontroller.credentialproperties
    $cred.type="usernamepassword"
    $cred.username="admin"
    $cred.value="abcd"
    
    New-NetworkControllerCredential -ConnectionUri https://networkcontroller -Properties $cred -ResourceId cred1
    
  3. 若要检索添加到网络控制器中的凭据,请键入以下命令,然后按 Enter。 确保为每个参数添加适用于部署的值。

    Get-NetworkControllerCredential -ConnectionUri https://networkcontroller -ResourceId cred1
    
  4. 查看命令输出,该输出应类似于以下示例输出。

    Tags                   :
    ResourceRef     : /credentials/cred1
    CreatedTime    : 1/1/0001 12:00:00 AM
    InstanceId        : e16ffe62-a701-4d31-915e-7234d4bc5a18
    Etag                  : W/"1ec59631-607f-4d3e-ac78-94b0822f3a9d"
    ResourceMetadata :
    ResourceId       : cred1
    Properties       : Microsoft.Windows.NetworkController.CredentialProperties
    

    注意

    运行 Get-NetworkControllerCredential 命令时,可以使用点运算符列出凭据的属性,从而将该命令的输出分配给变量。 例如 $cred.Properties。

用于网络控制器的其他 Windows PowerShell 命令

部署网络控制器之后,可以使用 Windows PowerShell 命令管理和修改部署。 以下是可以对部署进行的一些更改。

  • 修改网络控制器节点、群集和应用程序设置

  • 删除网络控制器群集和应用程序

  • 管理网络控制器群集节点,包括添加、删除、启用和禁用节点。

下表提供了可用于完成这些任务的 Windows PowerShell 命令的语法。

任务 命令 语法
修改网络控制器群集设置 Set-NetworkControllerCluster Set-NetworkControllerCluster [-ManagementSecurityGroup <string>][-Credential <PSCredential>] [-computerName <string>][-CertificateThumbprint <String> ] [-UseSSL]
修改网络控制器应用程序设置 Set-NetworkController Set-NetworkController [-ClientAuthentication <ClientAuthentication>] [-Credential <PSCredential>] [-ClientCertificateThumbprint <string[]>] [-ClientSecurityGroup <string>] [-ServerCertificate <X509Certificate2>] [-RestIPAddress <String>] [-ComputerName <String>][-CertificateThumbprint <String> ] [-UseSSL]
修改网络控制器节点设置 Set-NetworkControllerNode Set-NetworkControllerNode -Name <string> > [-RestInterface <string>] [-NodeCertificate <X509Certificate2>] [-Credential <PSCredential>] [-ComputerName <string>][-CertificateThumbprint <String> ] [-UseSSL]
修改网络控制器诊断设置 Set-NetworkControllerDiagnostic Set-NetworkControllerDiagnostic [-LogScope <string>] [-DiagnosticLogLocation <string>] [-LogLocationCredential <PSCredential>] [-UseLocalLogLocation] >] [-LogLevel <loglevel>][-LogSizeLimitInMBs <uint32>] [-LogTimeLimitInDays <uint32>] [-Credential <PSCredential>] [-ComputerName <string>][-CertificateThumbprint <String> ] [-UseSSL]
删除网络控制器应用程序 Uninstall-NetworkController Uninstall-NetworkController [-Credential <PSCredential>][-ComputerName <string>] [-CertificateThumbprint <String> ] [-UseSSL]
删除网络控制器群集 Uninstall-NetworkControllerCluster Uninstall-NetworkControllerCluster [-Credential <PSCredential>][-ComputerName <string>][-CertificateThumbprint <String> ] [-UseSSL]
将节点添加到网络控制器群集 Add-NetworkControllerNode Add-NetworkControllerNode -FaultDomain <String> -Name <String> -RestInterface <String> -Server <String> [-CertificateThumbprint <String> ] [-ComputerName <String> ] [-Credential <PSCredential> ] [-Force] [-NodeCertificate <X509Certificate2> ] [-PassThru] [-UseSsl]
禁用网络控制器群集节点 Disable-NetworkControllerNode Disable-NetworkControllerNode -Name <String> [-CertificateThumbprint <String> ] [-ComputerName <String> ] [-Credential <PSCredential> ] [-PassThru] [-UseSsl]
启用网络控制器群集节点 Enable-NetworkControllerNode Enable-NetworkControllerNode -Name <String> [-CertificateThumbprint <String> ] [-ComputerName <String> ] [-Credential <PSCredential> ] [-PassThru] [-UseSsl]
从群集中删除网络控制器节点 Remove-NetworkControllerNode Remove-NetworkControllerNode [-CertificateThumbprint <String> ] [-ComputerName <String> ] [-Credential <PSCredential> ] [-Force] [-Name <String> ] [-PassThru] [-UseSsl]

注意

网络控制器的 Windows PowerShell 命令位于 TechNet 库的网络控制器 Cmdlet 中。

示例网络控制器配置脚本

以下示例配置脚本演示如何创建多节点网络控制器群集并安装网络控制器应用程序。 此外,$cert 变量会从本地计算机证书存储中选择与使用者名称字符串“networkController.contoso.com”匹配的证书。

$a = New-NetworkControllerNodeObject -Name Node1 -Server NCNode1.contoso.com -FaultDomain fd:/rack1/host1 -RestInterface Internal
$b = New-NetworkControllerNodeObject -Name Node2 -Server NCNode2.contoso.com -FaultDomain fd:/rack1/host2 -RestInterface Internal
$c = New-NetworkControllerNodeObject -Name Node3 -Server NCNode3.contoso.com -FaultDomain fd:/rack1/host3 -RestInterface Internal

$cert= get-item Cert:\LocalMachine\My | get-ChildItem | where {$_.Subject -imatch "networkController.contoso.com" }

Install-NetworkControllerCluster -Node @($a,$b,$c)  -ClusterAuthentication Kerberos -DiagnosticLogLocation \\share\Diagnostics - ManagementSecurityGroup Contoso\NCManagementAdmins -CredentialEncryptionCertificate $cert
Install-NetworkController -Node @($a,$b,$c) -ClientAuthentication Kerberos -ClientSecurityGroup Contoso\NCRESTClients -ServerCertificate $cert -RestIpAddress 10.0.0.1/24

非 Kerberos 部署的部署后步骤

如果未将 Kerberos 用于网络控制器部署,则必须部署证书。

有关详细信息,请参阅网络控制器的部署后步骤