Microsoft Azure Resource Manager 虚拟化环境

重要:

自 Citrix Virtual Apps and Desktops 7 2003 起,该产品的当前版本不支持以下主机上的 VDA:

  • Amazon Web Services(包括 AWS 上的 VMware Cloud)
  • CloudPlatform(指的是原始 Citrix 软件平台)
  • Microsoft Azure(包括 Azure Resource Manager 和 Azure 经典版)

有关详细信息,请参阅主机对当前版本的支持的变更

简介

使用 Microsoft Azure Resource Manager 在您的部署中预配虚拟机时,请按本指导原则进行操作。

请熟悉以下内容:

限制

配置 Azure Resource Manager 时,请注意以下限制:

  • 使用 Machine Creation Services 时不支持 Azure 磁盘加密。

Azure 按需预配

使用 MCS 在 Azure Resource Manager 中创建计算机目录时,Azure 按需预配功能:

  • 降低存储成本
  • 加快目录创建过程
  • 加快虚拟机 (VM) 电源操作过程

对于管理员,在创建主机连接和 MCS 计算机目录的 Studio 过程中,按需预配并没有引入任何差异。不同之处在于如何以及何时在 Azure 中创建和管理资源,以及 VM 在 Azure 门户中的可见性。

在结合使用 Azure 按需预配与 Citrix Virtual Apps and Desktops 之前,MCS 创建目录时,是在预配过程中在 Azure 中创建 VM。

在采用 Azure 按需预配的情况下,仅在完成预配后,当 Citrix Virtual Apps and Desktops 启动开机操作时才创建 VM。仅当 VM 运行时才在 Azure 门户中可见。(在 Studio 中,无论 VM 是否正在运行,都可见。)

创建 MCS 目录时,Azure 门户将显示资源组、网络安全组、存储帐户、网络接口、基础映像和身份磁盘。在 Citrix Virtual Apps and Desktops 为 VM 启动开机操作之前,不会显示 VM。然后,在 Studio 中,VM 的状态变为开。

  • 对于池计算机,仅当存在 VM 时才会有操作系统磁盘和写回缓存。如果经常关闭计算机(例如,工作时间以外),此配置可以节省大量存储空间。
  • 对于专用计算机,在首次打开 VM 时创建操作系统磁盘。它一直保留在存储空间中,直至删除该计算机。

Citrix Virtual Apps and Desktops 为 VM 启动关机操作时,该 VM 将被删除。它不再显示在 Azure 门户中。在 Studio 中,VM 的状态变为关。

在按需预配之前创建的目录

在 Citrix Virtual Apps and Desktops 之前创建的计算机目录支持 Azure 按需预配功能(2017 年中)。无论这些目录中的 VM 是否正在运行,都可以在 Azure 门户中看到这些 VM。这些 VM 不能转换为按需计算机。

要利用按需预配的性能增强和存储成本优势,请使用 MCS 创建目录。

Azure 托管磁盘

Azure 托管磁盘是一个可以与 MCS 创建的计算机目录配合使用的弹性磁盘存储系统,作为使用常规存储帐户的替换选项。

托管磁盘功能隐藏了创建和管理存储帐户的复杂性。它为创建和管理磁盘提供了一个简单且高度可用的解决方案。可以使用托管磁盘作为主映像和 VM。使用托管磁盘可以缩短计算机目录的创建和更新时间。有关详细信息,请参阅了解托管磁盘

默认情况下,计算机目录使用托管磁盘。创建目录时,可以覆盖此默认值。

I/O 优化优化(每个 VM 使用三个磁盘),在每个订阅中最多可以预配 3333 个 VM。如果未配置 I/O 优化(每个 VM 使用两个磁盘),在每个订阅中最多可以预配 5000 个 VM。使用托管磁盘功能时,您可以在每个订阅中预配多达 10000 个 VM 磁盘。

使用托管磁盘

在 Studio 中创建计算机目录时,目录创建向导的主映像页面将列出托管磁盘,以及 VM 和 VHD。并非所有 Azure 区域都支持托管磁盘功能。托管磁盘显示在对目录的主机连接可见的任何区域的列表中。

映像和目录位于相同的区域中时,将优化目录创建时间。

托管磁盘功能当前不支持在 Azure 区域之间复制磁盘。如果选择不在 MCS 在其中预配目录的区域中映像,该映像将复制到目录区域的常规存储帐户中的 VHD。然后将其转换回托管磁盘。

在目录创建向导的存储和许可证类型页面上,可以选中用于使用常规存储帐户来代替托管磁盘的复选框。在不支持托管磁盘的 Azure 区域中预配时,此复选框显示为灰色。

创建到 Azure Resource Manager 的连接

连接和资源一文中介绍了有关用于创建连接的向导的信息。以下信息涵盖与 Azure Resource Manager 连接有关的详细信息。

注意事项:

  • 必须已为服务主体授予对订阅的参与者角色。
  • 在创建第一个连接时,Azure 会提示您为其授予必要的权限。对于将来的连接,您仍然必须进行身份验证,但是 Azure 会记住您以前同意的情况,并且不会再显示提示。
  • 用于身份验证的帐户必须是订阅的协管理员。
  • 用于身份验证的帐户必须是订阅目录的成员。需要注意两种类型的帐户:“工作或学校”和“个人 Microsoft 帐户”。有关详细信息,请参阅CTX219211
  • 虽然您可以通过将现有 Microsoft 帐户添加为订阅目录的成员来使用该帐户,但可能会出现复杂情况。例如,如果用户之前被授予对其中一个目录资源的来宾访问权限。目录中存在一个不会授予其必要权限的占位符条目,并且会返回错误。请从目录中删除资源,然后明确重新添加删除的资源。但是,请谨慎使用此方法,因为它会对帐户可以访问的其他资源产生意外影响。
  • 有一个已知问题,即某些帐户实际上是成员时,会被检测为目录来宾。建立的较旧的目录帐户会出现帐户问题。将帐户添加到目录中,该帐户采用适当的成员身份值。
  • 资源组只是资源的容器,它们包含来自自己所在区域以外的区域的资源。如果您希望资源组的区域中显示的资源可用,这些组可能会令人困惑。
  • 请确保您的网络和子网足够大,可以容纳您需要的计算机数量。

可以通过两种方法建立与 Azure Resource Manager 的主机连接:

  • 通过向 Azure Resource Manager 进行身份验证以创建服务主体。
  • 使用之前创建的服务主体的详细信息连接到 Azure Resource Manager。

通过向 Azure Resource Manager 进行身份验证以创建服务主体

开始之前,请务必:

  • 在订阅的 Azure Active Directory 租户中具有一个用户帐户。
  • Azure AD 用户帐户也是您希望用来预配资源的 Azure 订阅的协管理员。

在站点设置或添加连接和资源向导中:

  1. 连接页面上,选择 Microsoft Azure 连接类型。然后,选择您的 Azure 云环境。
  2. 连接详细信息页面上,输入 Azure 订阅 ID 和连接的名称。连接名称可以包含 1-64 个字符,不能仅包含空格,也不能包含非字母数字字符。输入订阅 ID 和连接名称后,将启用新建按钮。
  3. 输入 Azure Active Directory 帐户用户名和密码。
  4. 单击登录
  5. 单击接受以将列出的权限授予 Citrix Virtual Apps and Desktops。Citrix Virtual Apps and Desktops 会创建一个允许它代表指定的用户管理 Azure Resource Manager 资源的服务主体。
  6. 单击接受后,您会返回到 Studio 中的连接页面。成功对 Azure 进行身份验证后,将替换新建使用现有按钮。已连接,并且绿色复选标记指示已成功连接到您的 Azure 订阅。
  7. 指明可以使用哪些工具来创建虚拟机,然后单击下一步。在成功进行 Azure 身份验证和接受授予所需权限之前,您无法越过向导中的此页面。
  8. 资源由区域和网络组成。

    • 区域页面上,选择一个区域。
    • 网络页面上,键入 1-64 字符的资源名称以帮助确定 Studio 中的区域和网络组合。资源名称不能仅包含空格,也不能包含非字母数字字符。
    • 选择一个虚拟网络和资源组对。(由于您可能有不止一个具有相同名称的虚拟网络,将网络名称与资源组配对可提供唯一的组合。)如果在上一个不具有任何虚拟网络的页面中选择了一个区域,则返回至该页面并选择一个具有虚拟网络的区域。
  9. 完成向导。

使用之前创建的服务主体的详细信息连接到 Azure Resource Manager

要手动创建服务主体,请连接到 Azure Resource Manager 订阅并使用以下部分中提供的 PowerShell cmdlet。

必备项:

  • $SubscriptionId: 您希望预配 VDA 的订阅的 Azure Resource Manager SubscriptionID
  • $AADUser: 订阅的 AD 租户的 Azure AD 用户帐户。让 $AADUser 成为您的订阅的协管理员。
  • $ApplicationName: 将要在 Azure AD 中创建的应用程序名称。
  • $ApplicationPassword: 应用程序的密码。创建主机连接时,请使用此密码作为应用程序机密。

要创建服务主体,请执行以下操作:

  1. 连接到您的 Azure Resource Manager 订阅。

    Login-AzureRmAccount

  2. 选择您要创建服务主体的 Azure Resource Manager 订阅。

    Select-AzureRmSubscription -SubscriptionID $SubscriptionId

  3. 在您的 AD 租户中创建应用程序。

    $AzureADApplication = New-AzureRmADApplication -DisplayName $ApplicationName -HomePage "https://localhost/$ApplicationName" -IdentifierUris https://$ApplicationName -Password $ApplicationPassword

  4. 创建服务主体。

    New-AzureRmADServicePrincipal -ApplicationId $AzureADApplication.ApplicationId

  5. 向服务主体分配角色。

    New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $AzureADApplication.ApplicationId –scope /subscriptions/$SubscriptionId

  6. 在 PowerShell 控制台的输出窗口中,记下 ApplicationId。请在创建主机连接时提供该 ID。

在站点设置或添加连接和资源向导中:

  1. 连接页面上,选择 Microsoft Azure 连接类型和您的 Azure 环境。
  2. 连接详细信息页面上,输入 Azure 订阅 ID 和连接的名称。连接名称可以包含 1-64 个字符,不能仅包含空格,也不能包含非字母数字字符。
  3. 单击使用现有。提供订阅 ID、订阅名称、身份验证 URL、管理 URL、存储后缀、Active Directory ID 或租户 ID、应用程序 ID 以及现有服务主体的应用程序机密。输入详细信息后,将会启用确定按钮。单击确定
  4. 指明可以使用哪些工具来创建虚拟机,然后单击下一步。您提供的服务主体详细信息连接到您的 Azure 订阅。在提供使用现有选项的有效详细信息之前,您无法越过向导中的此页面。
  5. 资源由区域和网络组成。

    • 区域页面上,选择一个区域。
    • 网络页面上,键入 1-64 字符的资源名称以帮助确定 Studio 中的区域和网络组合。资源名称不能仅包含空格,也不能包含非字母数字字符。
    • 选择一个虚拟网络和资源组对。(由于您可能有不止一个具有相同名称的虚拟网络,将网络名称与资源组配对可提供唯一的组合。)如果在上一个不具有任何虚拟网络的页面中选择了一个区域,则必须返回至该页面并选择一个具有虚拟网络的区域。
  6. 完成向导。

使用 Azure Resource Manager 主映像创建计算机目录

此信息用于补充创建计算机目录中的指导信息。

主映像将作为用于在计算机目录中创建 VM 的模板。创建计算机目录之前,请在 Azure Resource Manager 中创建一个主映像。有关主映像的常规信息,请参阅创建计算机目录

当您在 Studio 中创建计算机目录时:

  • 操作系统计算机管理页面不包含 Azure 特定的信息。请按照创建计算机目录中的指导进行操作。
  • 主映像页面上,选择一个资源组。导航浏览(逐级浏览)所有容器,一直到要用作主映像的 Azure VHD。该 VHD 必须已经安装了 Citrix VDA。如果该 VHD 连接到某个 VM,该 VM 必须被停止。
  • 只有在使用 Azure Resource Manager 主映像时,才会显示存储和许可证类型页面。

    选择一个存储类型:标准或高级。该存储类型影响在向导的虚拟机页面上提供哪些计算机大小。两个存储类型都会在单一数据中心中对您的数据进行多重同步复制。有关 Azure 存储类型和存储复制的详细信息,请参阅以下内容:

    选择是否使用现有的本机 Windows 服务器许可证。使用现有的本地 Windows Server 映像执行此操作可利用 Azure Hybrid Use Benefits (HUB)。此处提供了更多详细信息: https://azure.microsoft.com/pricing/hybrid-use-benefit/

    HUB 将在 Azure 中运行 VM 的成本降低到基本计算费率,因为它免除了源自 Azure 库的额外 Windows Server 许可证的代价。必须将您的本机 Windows 服务器映像交至 Azure 以使用 HUB。不支持 Azure 库映像。当前不支持本机 Windows 客户端许可证。

    要检查预配的虚拟机是否成功利用 HUB,请运行 PowerShell 命令 Get-AzureRmVM -ResourceGroup MyResourceGroup -Name MyVM,并检查许可证类型是否为 Windows_Server。更多说明,请访问 https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-windows-hybrid-use-benefit-licensing/

  • 虚拟机页面上,指出要创建的 VM 数量。必须至少指定一个。选择计算机大小。创建完计算机目录之后,您将无法更改计算机大小。如果以后需要不同的大小,请删除该目录,然后创建使用相同主映像的目录,并指定所需的计算机大小。

    虚拟机名称不能包含非 ASCII 字符和特殊字符。

  • (使用 MCS 时)在资源组页面上,选择是创建资源组还是使用现有组。

    如果选择创建资源组,请单击下一步

    如果选择使用现有资源组,请从可用的预配资源组列表中选择组。请选择足够的组以容纳您要在目录中创建的计算机。如果您选择的组太少,Studio 将显示一条消息。如果您计划以后向目录添加更多 VM,则您可能希望选择的数量多于所需的最低数量。创建目录后,无法向目录添加更多资源组。

    有关详细信息,请参阅Azure 资源组

  • 网卡计算机帐户摘要页面不包含 Azure 特定的信息。请按照创建计算机目录中的指导进行操作。

完成向导。

删除计算机目录

删除 Azure Resource Manager 计算机目录时,关联的计算机和资源组将从 Azure 中删除,即使您指示应保留这些计算机和资源组亦如此。

Azure 资源组

Azure 预配资源组提供了一种预配向用户提供应用程序和桌面的 VM 的方法。您可以在 Studio 中创建 MCS 计算机目录时添加现有的空 Azure 资源组,也可以创建新资源组。

有关 Azure 资源组的信息,请参阅 Microsoft 文档。

要求

  • 每个资源组最多可以容纳 240 个 VM。要创建目录的区域中必须有足够的可用空资源组。在创建计算机目录时使用现有资源组,意味着您必须选择足够的可用组。此过程容纳要在目录中创建的计算机数量。

    例如,如果在目录创建向导中指定 500 台计算机,则至少选择 3 个可用的预配资源组。

    创建目录后,无法向计算机目录添加资源组。因此,请考虑添加足够的资源组以容纳以后可能向目录添加的计算机。

  • 在与主机连接相同的区域中创建空资源组。
  • 如果您希望为每个 MCS 目录创建新资源组,则与主机连接关联的 Azure 服务主体必须有权创建和删除资源组。

    如果您希望使用现有的空资源组,则与主机连接关联的 Azure 服务主体对这些空资源组必须具有“参与者”权限。

  • 使用新建选项在 Studio 中创建主机连接时,创建的服务主体具有订阅范围参与权限。或者,可以使用使用现有选项来创建连接,并提供现有订阅范围服务主体的详细信息。如果使用新建选项并在 Studio 中创建服务主体,则它具有创建和删除新资源组或向现有空资源组预配所需的权限。
  • 必须使用 PowerShell 创建窄范围服务主体。此外,使用窄范围服务主体时,必须使用 PowerShell 或 Azure 门户为 MCS 预配 VM 的每个目录创建空资源组。

    如果您对主机连接使用窄范围服务主体,并且在目录创建向导的主映像页面上没有看到您的主映像资源组,可能是因为您使用的窄范围服务主体没有列出主映像资源组的权限 Microsoft.Resources/subscriptions/resourceGroups/read。关闭向导,为服务主体更新权限(请参阅博客文章了解相关说明),然后重新启动向导。Azure 中的更新显示在 Studio 中最多可能需要 10 分钟。

关于 Azure 服务主体

要在 Azure Resource Manager 中预配计算机,必须通过已向相关 Azure 资源分配权限的服务主体授予插件访问 Azure 订阅的权限。服务主体与用户帐户的基本用途相同。它为插件提供 Azure Active Directory 标识,该标识提供身份验证凭据和 Azure 资源的权限。与用户帐户一样,服务主体也使用基于角色的访问控制 (RBAC) 进行配置。

根据权限的定义方式,我们将服务主体分类为:

  • 订阅范围服务主体;或

  • 窄范围服务主体

订阅范围服务主体

订阅范围服务主体对订阅中的所有资源具有贡献者权限,这使其易于创建和管理。Citrix Studio 可自动创建订阅范围服务主体的过程,也可以在 PowerShell 中手动创建这些主体。这些主体允许 Azure Resource Manager 插件创建 Azure 资源组并完全自动化资源的管理。缺点是插件对订阅中与插件负责管理的资源无关的资源具有权限。

使用贡献者角色将允许插件创建、删除、读取和写入订阅中的所有资源。权限不扩展到任何 Azure Active Directory 中的对象,也不允许订阅范围服务主体授予其他用户或服务主体访问资源的权限。

窄范围服务主体

窄范围服务主体允许 Azure Resource Manager 插件访问由您定义的一组有限的资源。Azure 需要订阅范围权限才能创建资源组。使用窄范围服务主体时,插件无法创建资源组。除了服务主体之外,您还需要为要预配的计算机的每个目录提供资源组池。

Citrix Studio 不支持创建窄范围服务主体或目录。这两个任务都必须使用 PowerShell 执行。但是,一旦创建了目录,就可以像 Studio 中的任何其他目录一样对其进行管理,包括添加和删除计算机。如果在某个时候要将现有的窄范围服务主体用于新的资源组池,则必须使用 PowerShell 向服务主体显式添加权限。

定义 Azure 订阅访问要求

下面各部分内容中的技术和示例演示了常规要求,需要根据您的特定情况进行更改。

在以下情况下,请考虑使用订阅范围服务主体:

  • 您需要获得最简单的管理体验。

  • 您希望避免使用 PowerShell 并在 Citrix Studio 中管理所有对象。

  • 您的 Azure 订阅专用于单个 Citrix Virtual Apps and Desktops 服务。

  • 您正在执行 Citrix Virtual Apps and Desktops 安装的概念证明。

  • 您的 Citrix Virtual Apps and Desktops 管理员在 Azure 订阅范围内具有贡献者访问权限。

在以下情况下,请考虑使用窄范围服务主体:

  • 您的 Azure 订阅托管多个不相关的服务。

  • 您的 Azure 管理员具有不同的订阅权限,具体取决于其角色。

  • 贵公司有安全标准,要求在细粒度级别进行访问控制。

  • 您有一个用于创建窄范围服务主体的现有过程。

提示:

您可以创建作为主订阅的一部分计费的订阅,并且引用主订阅中的默认 Azure Active Directory。此配置为控制对不相关资源的访问提供了另一种机制。

规划窄范围服务主体目录

在创建窄范围服务主体目录之前,请确定托管初始虚拟机数量和将来的虚拟机数量需要多少资源组。由于 Machine Creation Services 中的限制,创建目录后无法添加资源组。

为每个资源组池预配一个目录

Azure Resource Manager 插件在每个资源组中创建必要的基础结构。资源组由存储帐户、安全组、网络接口、虚拟机等组成,向目录中添加计算机时,将根据需要按需创建存储帐户。这意味着目录的大小可以增加到由资源组池大小和 Azure 订阅配额设置的上限。创建存储帐户后,在删除目录之前不会删除该帐户。由于可以删除任何虚拟机,因此最终可能会出现空存储帐户。这种情况很少见,因为虚拟机往往会在可用存储帐户之间随机分配。必须通过检查存储帐户的内容以特意清空存储帐户来精心选择计算机。

Azure 将资源组中的虚拟机数量限制为 800,但 Azure Resource Manager 插件使用不同的度量。标准 Azure 磁盘的限制为每秒 500 个 I/O 操作 (IOPS),标准存储帐户的 IOPS 限制为 20000。出于这个原因,插件为存储帐户预配的计算机不超过 40 台。此限制适用于标准存储和高级存储。此外,插件在资源组中创建的存储帐户不超过 19 个。

因此,基于最大计算机数计算资源组数的基本公式为:

资源组数 = 上限(计算机的最大数量/(40 * 19))

Azure Resource Manager 插件假定它具有资源组池的独占使用权。在任何指定的资源组中都没有用户创建的资源。

基于 Azure 角色的访问控制 (RBAC) 的基础知识。

通过在特定范围内将 RBAC 角色分配给服务主体来授予对 Azure 资源的访问权限。范围可以是订阅、资源组或特定资源。资源在包含层次结构中排列,由角色定义的权限应用到应用了该范围的以下所有资源。应用到订阅的角色将应用到订阅中的所有资源。应用到资源组的角色将应用到资源组中包含的所有资源。

Azure 资源层次结构的含义是只有具有订阅范围权限的服务主体才能创建资源组。这并不理想,因为它会阻止像插件这样的应用程序根据逻辑组和管理资源的需要创建资源组。他们对完整订阅具有广泛权限时除外。

Azure 具有大量内置角色选择,还支持定义自定义角色。有关 Azure RBAC 中的自定义角色的详细信息,请参阅Azure 资源的自定义角色

创建订阅范围服务主体

此示例显示了如何创建订阅范围服务主体。详细信息可用于在 Citrix Studio 中创建 Azure 连接。选择此选项可使用现有服务主体,或者在 PowerShell 中手动创建 Azure 连接。

param(
[string]$applicationName = "SubscriptionScopeSP",
[Parameter(Mandatory=$true)][string]$applicationPassword,
[Parameter(Mandatory=$true)][string]$subscriptionId
)

$application = New-AzureRmADApplication -DisplayName $applicationName -HomePage "https://localhost/$applicationName" `
-IdentifierUris "https://$applicationName" -Password $applicationPassword

New-AzureRmADServicePrincipal -ApplicationId $application.ApplicationId

# Wait for the service principal to become available
Start-Sleep -s 60

New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $application.ApplicationId `
-scope "/subscriptions/$subscriptionId"

Write-Host ("Application ID: " + $application.ApplicationId)

创建基本窄范围服务主体

本部分内容介绍了创建在资源组范围内分配权限的尽可能简单的窄范围服务主体的过程。

Azure Resource Manager 插件需要对以下资源的权限:

  1. 主映像 VHD

  2. 计算机的虚拟网络

  3. 要在其中预配计算机的资源组。

为了简化脚本,我们假设可以在资源组范围内授予贡献者访问权限。Azure Resource Manager 插件对存储映像 VHD 的资源组、包含虚拟网络的资源组和预配了计算机的资源组具有贡献者权限。

param(
[string]$applicationName = "BasicNarrowScopeSP",
[Parameter(Mandatory=$true)][string]$applicationPassword,
[Parameter(Mandatory=$true)][string]$subscriptionId,
[Parameter(Mandatory=$true)][string[]]$resourceGroups
)

$application = New-AzureRmADApplication -DisplayName $applicationName -HomePage "https://localhost/$applicationName" `
-IdentifierUris "https://$applicationName" -Password $applicationPassword

New-AzureRmADServicePrincipal -ApplicationId $application.ApplicationId

# Wait for the service principal to become available
Start-Sleep -s 60

New-AzureRmRoleAssignment -RoleDefinitionName Citrix-Network-Usage-Reader -ServicePrincipalName $application.ApplicationId `
-scope "/subscriptions/$subscriptionId/"

foreach ($rg in $resourceGroups)
{
  New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $application.ApplicationId `
  -scope "/subscriptions/$subscriptionId/resourcegroups/$rg"
}

Write-Host ("Application ID: " + $application.ApplicationId)

使用自定义角色创建窄范围服务主体

Azure 附带了大量内置 RBAC 角色。Citrix 使用上一部分内容中介绍的贡献者角色。如前所述,这为 Azure Resource Manager 插件提供了比严格要求更广泛的权限。本部分内容定义了一个自定义角色,并进一步加强了访问权限。如果需要,可以使用更多自定义角色锁定访问权限,并将角色直接应用到映像和网络资源。

注意:

所需的权限可能会发生变化。

请使用以下权限定义用于在资源组范围内授予对虚拟网络和主映像的访问权限的自定义角色。

主映像 VHD。

对于目录创建:

  • Microsoft.Storage/storageAccounts/read

  • Microsoft.Storage/storageAccounts/listKeys/action

对于将来的 Citrix Studio 支持:

  • Microsoft.Resources/subscriptions/resourceGroups/read

计算机的虚拟网络:

  • Microsoft.Network/virtualNetworks/read

  • Microsoft.Network/virtualNetworks/subnets/join/action

已预配计算机的资源组。

我们可以创建具有以下权限的另一个自定义角色,但为了保持示例的简单性,请继续为计算机资源组使用贡献者角色。这些资源组不包含非 Azure Resource Manager 插件创建的资源。贡献者角色会降低对插件的更改需要更改服务主体的可能性:

  • Microsoft.Compute/virtualMachines/*

  • Microsoft.Network/networkInterfaces/*

  • Microsoft.Network/networkSecurityGroups/*

  • Microsoft.Resources/deployments/*

  • Microsoft.Resources/subscriptions/resourceGroups/read

  • Microsoft.Storage/storageAccounts/*

  • Microsoft.Storage/storageAccounts/listKeys/action

Citrix Virtual Apps and Desktops 自定义访问角色。

通过首先在 JSON 中定义自定义角色来创建自定义角色:

{
  "Name": "Citrix-Custom-Reader",
  "Description": "Grants access to Citrix XenDesktop images and virtual networks.",
  "Actions": [
    "Microsoft.Storage/storageAccounts/read",
    "Microsoft.Storage/storageAccounts/listKeys/action",
    "Microsoft.Network/virtualNetworks/read",
    "Microsoft.Network/virtualNetworks/subnets/join/action"
  ],
  "NotActions": [
  ],
  "AssignableScopes": [
    "/subscriptions/<YOUR-SUBSCRIPTION-ID>"
  ]
}

通过引用 JSON 定义来创建角色:

New-AzureRmRoleDefinition -InputFile citrix-custom-reader.json

创建服务主体时使用新的自定义角色:

param(
[string]$applicationName = "NarrowScopeSP",
[Parameter(Mandatory=$true)][string]$applicationPassword,
[Parameter(Mandatory=$true)][string]$subscriptionId,
[Parameter(Mandatory=$true)][string[]]$machineResourceGroups,
[Parameter(Mandatory=$true)][string]$imageResourceGroup,
[Parameter(Mandatory=$true)][string]$networkResourceGroup
)

$application = New-AzureRmADApplication -DisplayName $applicationName -HomePage "https://localhost/$applicationName" `
-IdentifierUris "https://$applicationName" -Password $applicationPassword

New-AzureRmADServicePrincipal -ApplicationId $application.ApplicationId

# Wait for the service principal to become available
Start-Sleep -s 60

New-AzureRmRoleAssignment -RoleDefinitionName Citrix-Network-Usage-Reader -ServicePrincipalName $application.ApplicationId `
-scope "/subscriptions/$subscriptionId/"

foreach ($rg in $machineResourceGroups)
{
  New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $application.ApplicationId `
  -scope "/subscriptions/$subscriptionId/resourcegroups/$rg"
}

New-AzureRmRoleAssignment -RoleDefinitionName Citrix-Custom-Reader -ServicePrincipalName $application.ApplicationId `
-scope "/subscriptions/$subscriptionId/resourcegroups/$imageResourceGroup"

New-AzureRmRoleAssignment -RoleDefinitionName Citrix-Custom-Reader -ServicePrincipalName $application.ApplicationId `
-scope "/subscriptions/$subscriptionId/resourcegroups/$networkResourceGroup"

Write-Host ("Application ID: " + $application.ApplicationId)

创建 Citrix Virtual Apps and Desktops Azure 连接。

使用现有服务主体在 Citrix Studio 中创建 Citrix Virtual Apps and Desktops Azure 连接是合理的。在 PowerShell 中创建连接同样合理。

下面是在 PowerShell 中创建连接的示例:

param(
[string]$connectionName = "AzureConnection",
[Parameter(Mandatory=$true)][string]$applicationId,
[Parameter(Mandatory=$true)][string]$applicationPassword,
[Parameter(Mandatory=$true)][string]$subscriptionId,
[Parameter(Mandatory=$true)][string]$subscriptionName,
[Parameter(Mandatory=$true)][string]$tenantId
)

Add-PsSnapin Citrix*

$customProperties = @"
<CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <Property xsi:type="StringProperty" Name="AuthenticationAuthority" Value="https://login.microsoftonline.com/"/>
 <Property xsi:type="StringProperty" Name="ManagementEndpoint" Value="https://management.azure.com/"/>
 <Property xsi:type="StringProperty" Name="StorageSuffix" Value="core.windows.net"/>
 <Property xsi:type="StringProperty" Name="TenantId" Value="$tenantId"/>
 <Property xsi:type="StringProperty" Name="SubscriptionId" Value="$subscriptionId"/>
 <Property xsi:type="StringProperty" Name="SubscriptionName" Value="$subscriptionName"/>
</CustomProperties>
"@

$connection = New-Item -ConnectionType "Custom" -CustomProperties $customProperties -HypervisorAddress @("https://management.azure.com/") `
-Path @("XDHyp:\Connections$connectionName") -Persist -PluginId "AzureRmFactory" -Scope @() `
-SecurePassword (ConvertTo-SecureString -AsPlainText -Force $applicationPassword) -UserName $applicationId

New-BrokerHypervisorConnection -HypHypervisorConnectionUid $connection.HypervisorConnectionUid

此时,请使用 Studio 或者在 PowerShell 中向连接添加资源。

创建 Citrix Virtual Apps and Desktops 目录。

下面的示例使用 Citrix PowerShell 管理单元创建 Citrix Virtual Apps and Desktops 目录。

由于窄范围服务主体不允许 Azure Resource Manager 插件创建资源组,因此必须:

  1. 创建资源组的池。

  2. 为资源组池中的所有资源组分配服务主体权限。

  3. 创建预配方案时,请在自定义属性中列出资源组池中的每个资源组。

自定义属性名为 ResourceGroups,值是以逗号分隔的资源组名称列表。下面的示例是如何定义此自定义属性的示例。

注意:

仅在自定义属性中列出针对计算机的资源组。不包括映像或虚拟网络所在的一个或多个资源组。如果指定了这些计算机,则 Azure Resource Manager 插件会尝试将计算机预配到可能会导致某些意外行为的资源组中。

在此示例中,计算机在两个名为 xd-sales-1 和 xd-sales-2 的资源组中进行预配:

Add-PsSnapin Citrix*

# The hosting unit name is the name of the Azure connection resources that should be used for this catalog
$hostingUnitName = "AzureHostingUnit"
$domain = "citrix.local"
$controllerAddress = ("ddc." + $domain)
$adminAddress = ($controllerAddress + ":80")
$catalogName = "catalog-name"
$network = "network-resource-group.resourcegroup\network-name"
$subnet = "subnet-name"
$serviceOffering = "Standard_A4"
$template = "image-resource-group.resourcegroup\imagestorage.storageaccount\images.container\image-name.vhd"

$customProperties = @" <CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Property xsi:type="StringProperty" Name="StorageAccountType" Value="Standard_LRS" />
    <Property xsi:type="StringProperty" Name="ResourceGroups" Value="xd-sales-1, xd-sales-2" />
</CustomProperties>
"@

$identityPool = New-AcctIdentityPool -AdminAddress $adminAddress -AllowUnicode -Domain $domain `
    -IdentityPoolName $catalogName -NamingScheme "vm-#" -NamingSchemeType "Numeric" -Scope @()

$brokerCatalog = New-BrokerCatalog -AdminAddress $adminAddress -AllocationType "Random" -IsRemotePC $False `
    -MinimumFunctionalLevel "L7_9" -Name $catalogName -PersistUserChanges "Discard" -ProvisioningType "MCS" -Scope @() `
    -SessionSupport "MultiSession"

Write-Host $brokerCatalog

$provScheme = New-ProvScheme -AdminAddress $adminAddress -CleanOnBoot -CustomProperties $customProperties `
    -HostingUnitName $hostingUnitName -IdentityPoolName $catalogName `
    -MasterImageVM "XDHyp:\HostingUnits$hostingUnitName\image.folder$template.vhd" `
    -NetworkMapping @{"0"="XDHyp:\HostingUnits$hostingUnitName\virtualprivatecloud.folder$network.virtualprivatecloud$subnet.network"} `
    -ProvisioningSchemeName $catalogName -Scope @() -SecurityGroup @() `
    -ServiceOffering "XDHyp:\HostingUnits$hostingUnitName\serviceoffering.folder$serviceOffering.serviceoffering"

Write-Host $provScheme

Set-BrokerCatalog -AdminAddress $adminAddress -Name $catalogName -ProvisioningSchemeId $provScheme.ProvisioningSchemeUid

Add-ProvSchemeControllerAddress -AdminAddress $adminAddress.com -ControllerAddress $controllerAddress -ProvisioningSchemeName $catalogName

此时,您可以刷新 Citrix Studio 中的目录页面、添加计算机和管理计算机,就像使用任何其他目录一样。

在 Studio 中为计算机目录配置资源组

在目录创建向导中的资源组页面中,可以选择是创建资源组还是使用现有组。请参阅 使用 Azure Resource Manager 主映像创建计算机目录

删除计算机目录时资源组发生的情况:

  • 如果 Citrix Virtual Apps and Desktops 在创建计算机目录时建立资源组,然后再删除目录,这些组也将被删除。

  • 如果在创建计算机目录时使用现有资源组并删除目录,则将删除这些资源组中的所有资源。但是,不会删除资源组。

注意事项、限制和故障排除

在使用现有资源组时,目录创建向导中的“资源组”页面上的可用资源组列表不会自动刷新。因此,如果打开了该向导页面并在 Azure 中为资源组创建或添加权限,这些更改不会反映在向导的列表中。要查看最新更改,请返回向导中的计算机管理页面。重新选择与主机连接关联的资源,或者关闭并重新启动向导。在 Azure 中所做的更改显示在 Studio 中最多可能需要 10 分钟。

一个资源组仅在一个计算机目录中使用。但是,这不是强制的。例如,在创建目录时选择 10 个资源组,但在目录中仅创建一台计算机。在创建目录后,其中 9 个选定的资源组保持为空。您可能打算将来使用它们来扩展容量,因此,它们与该目录保持关联。在创建目录后,无法向目录添加资源组,因此,为将来的扩展做好计划很实用。但是,如果创建了另一个目录,这 9 个资源组将显示在可用列表中。Citrix Virtual Apps and Desktops 目前不会跟踪哪些资源组分配到哪些目录。由您对此进行监视。

如果您的连接使用可以访问各个区域中的空资源组的服务主体,这些资源组将显示在可用列表中。请务必在要创建计算机目录的相同区域中选择资源组。

故障排除:

  • 资源组未出现在目录创建向导的“资源组”页面上的列表中。

    服务主体必须对您希望显示在列表中的资源组具有适当权限。

  • 在向以前创建的计算机目录中添加计算机时,并未预配所有计算机。

    创建目录后,向目录中添加更多计算机时,不要超过最初为目录选择的资源组的计算机容量(每个组 240 个)。创建目录后,无法添加资源组。如果尝试添加的计算机数量超过现有资源组可以容纳的数量,则预配将失败。

    例如,创建一个具有 300 个 VM 和 2 个资源组的计算机目录。资源组最多可以容纳 480 个 VM(240 乘以 2)。向目录添加 200 个 VM 会超过资源组的容量。300 个当前 VM + 200 个新 VM = 500,但资源组只能容纳 480 个。

更多信息