在 Azure Stack Hub 上部署应用服务的先决条件
重要
在部署或更新应用程序服务资源提供程序 (RP) 之前,如有必要,请将 Azure Stack Hub 更新到支持的版本(或部署最新的 Azure Stack 开发工具包)。 请务必阅读 RP 发行说明,了解新功能、修补程序以及可能影响部署的任何已知问题。
支持的最低 Azure Stack Hub 版本 应用程序服务 RP 版本 2301 及更高版本 2302 安装程序(发行说明)
在 Azure Stack Hub 上部署 Azure 应用服务之前,必须完成本文中的先决条件步骤。
准备工作
本部分列出了集成系统部署和 Azure Stack 开发工具包 (ASDK) 部署的先决条件。
资源提供程序先决条件
如果已安装资源提供程序,则可能已完成以下先决条件,可跳过此部分。 否则,请在继续之前完成以下步骤:
向 Azure 注册 Azure Stack Hub 实例(如果尚未这样做)。 此步骤是必需的,因为需要连接到 Azure 并将项目从 Azure 下载到市场。
如果不熟悉 Azure Stack Hub 管理员门户的“市场管理”功能,请参阅从 Azure 下载市场项并将其发布到 Azure Stack Hub。 此文逐步讲解如何将项目从 Azure 下载到 Azure Stack Hub 市场。 它涵盖了联网场景和离线场景。 如果 Azure Stack Hub 实例已断开连接或部分连接,则在准备安装时还需要完成其他先决条件操作。
更新 Microsoft Entra 主目录。 从内部版本 1910 开始,必须在主目录租户中注册新应用程序。 此应用将允许 Azure Stack Hub 使用 Microsoft Entra 租户成功创建和注册更新的资源提供程序(如事件中心等)。 这是在升级到内部版本 1910 或更高版本之后需要执行的一次性操作。 如果此步骤未完成,则商城资源提供程序安装会失败。
- 将 Azure Stack Hub 实例成功更新到 1910 或更高版本后,请按照克隆/下载 Azure Stack Hub 工具的说明一文进行操作。
- 然后,请按照更新 Azure Stack Hub Microsoft Entra 主目录(在安装更新或新的资源提供程序之后)的说明一文进行操作。
安装程序和帮助器脚本
下载 Azure Stack Hub 上的应用服务部署帮助器脚本。
注意
部署帮助程序脚本要求使用 AzureRM PowerShell 模块。 有关安装的详细信息,请参阅安装适用于 Azure Stack Hub 的 PowerShell AzureRM 模块。
提取帮助器脚本 .zip 文件中的文件。 会提取以下文件和文件夹:
- Common.ps1
- Create-AADIdentityApp.ps1
- Create-ADFSIdentityApp.ps1
- Create-AppServiceCerts.ps1
- Get-AzureStackRootCert.ps1
- BCDR
- ReACL.cmd
- 模块文件夹
- GraphAPI.psm1
证书和服务器配置(集成系统)
本部分列出了集成系统部署的先决条件。
证书要求
若要在生产环境中运行资源提供程序,必须提供以下证书:
- 默认域证书
- API 证书
- 发布证书
- 标识证书
除了以下部分列出的特定要求外,稍后你还将使用一个工具来测试一般要求。 有关完整的验证列表,请参阅验证 Azure Stack Hub PKI 证书,包括:
- 文件格式 .PFX
- 设置为服务器和客户端身份验证的密钥用途
- 和其他一些内容
默认域证书
默认域证书放在前端角色上。 对 Azure 应用服务发出通配符或默认域请求的用户应用使用此证书。 该证书还用于源代码管理操作 (Kudu)。
该证书必须采用 .pfx 格式,并且应该是包含三个使用者的通配符证书。 此要求允许一个证书同时涵盖用于源代码管理操作的默认域和 SCM 终结点。
格式 | 示例 |
---|---|
*.appservice.<region>.<DomainName>.<extension> |
*.appservice.redmond.azurestack.external |
*.scm.appservice.<region>.<DomainName>.<extension> |
*.scm.appservice.redmond.azurestack.external |
*.sso.appservice.<region>.<DomainName>.<extension> |
*.sso.appservice.redmond.azurestack.external |
API 证书
API 证书放在“管理”角色上。 资源提供程序使用它来帮助保护 API 调用。 用于发布的证书必须包含匹配 API DNS 条目的使用者。
格式 | 示例 |
---|---|
api.appservice.<region>.<DomainName>.<extension> | api.appservice.redmond.azurestack.external |
发布证书
“发布者”角色的证书在应用所有者上传内容时保护其 FTPS 流量。 用于发布的证书必须包含匹配 FTPS DNS 条目的使用者。
格式 | 示例 |
---|---|
ftp.appservice.<region>.<DomainName>.<extension> | ftp.appservice.redmond.azurestack.external |
标识证书
标识应用的证书可以实现:
- Microsoft Entra ID 或 Active Directory 联合身份身份验证服务 (AD FS) 目录、Azure Stack Hub 与应用服务 之间的集成,以支持与计算资源提供程序的集成。
- Azure Stack Hub 上的 Azure 应用服务中的高级开发人员工具的单一登录方案。
用于标识的证书必须包含匹配以下格式的使用者。
格式 | 示例 |
---|---|
sso.appservice.<region>.<DomainName>.<extension> | sso.appservice.redmond.azurestack.external |
验证证书
在部署应用服务资源提供程序之前,应使用 PowerShell 库中提供的 Azure Stack Hub 准备情况检查器工具来验证要使用的证书。 Azure Stack Hub 准备情况检查器工具验证生成的 PKI 证书是否适用于应用服务部署。
作为最佳做法,当使用任何所需的 Azure Stack Hub PKI 证书时,如果需要,应当计划留出足够的时间来测试和重新颁发证书。
准备文件服务器
Azure 应用服务需要使用文件服务器。 在生产部署中,必须将文件服务器配置为高度可用,且能够应对故障。
高可用性文件服务器和 SQL Server 的快速入门模板
我们现在提供了一个参考体系结构快速入门模板,用于部署文件服务器和 SQL Server。 此模板在配置为支持 Azure Stack Hub 上的 Azure 应用服务高可用性部署的虚拟网络中支持 Active Directory 基础结构。
重要
此模板作为说明如何部署先决条件的参考或示例提供。 由于 Azure Stack Hub 操作员会管理这些服务器(特别是在生产环境中),因此应根据组织需要或要求配置此模板。
注意
若要完成部署,集成系统实例必须能够从 GitHub 下载资源。
部署自定义文件服务器的步骤
重要
如果选择在现有虚拟网络中部署应用服务,应将文件服务器部署到独立于应用服务的子网中。
注意
如果已选择使用上述任一快速入门模板部署文件服务器,则可以跳过此部分,因为在部署模板的过程中已配置文件服务器。
在 Active Directory 中预配组和帐户
创建以下 Active Directory 全局安全组:
- FileShareOwners
- FileShareUsers
创建以下 Active Directory 帐户作为服务帐户:
- FileShareOwner
- FileShareUser
根据安全最佳做法,这些帐户(以及所有 Web 角色)的用户应该各不相同,并采用强用户名和密码。 根据以下条件设置密码:
- 启用“密码永不过期”。
- 启用“用户不能更改密码”。
- 禁用“用户在下次登录时必须更改密码”。
如下所述将帐户添加到组成员身份:
- 将 FileShareOwner 添加到 FileShareOwners 组。
- 将 FileShareUser 添加到 FileShareUsers 组。
在工作组中预配组和帐户
注意
配置文件服务器时,请通过管理员命令提示符运行以下所有命令。
请勿使用 PowerShell。
使用 Azure 资源管理器模板时已创建用户。
运行以下命令创建 FileShareOwner 和 FileShareUser 帐户。 将
<password>
替换为自己的值。net user FileShareOwner <password> /add /expires:never /passwordchg:no net user FileShareUser <password> /add /expires:never /passwordchg:no
运行以下 WMIC 命令,将帐户密码设为永不过期:
WMIC USERACCOUNT WHERE "Name='FileShareOwner'" SET PasswordExpires=FALSE WMIC USERACCOUNT WHERE "Name='FileShareUser'" SET PasswordExpires=FALSE
创建本地组 FileShareUsers 和 FileShareOwners,并将第一个步骤中创建的帐户添加到其中:
net localgroup FileShareUsers /add net localgroup FileShareUsers FileShareUser /add net localgroup FileShareOwners /add net localgroup FileShareOwners FileShareOwner /add
预配内容共享
内容共享包含租户网站内容。 在单个文件服务器上预配内容共享的过程与在 Active Directory 和工作组环境中相同。 但是对于 Active Directory 中的故障转移群集则不同。
在单个文件服务器上(Active Directory 或工作组)预配内容共享
在单个文件服务器上,在权限提升的命令提示符下运行以下命令。 将 C:\WebSites
的值替换为环境中的相应路径。
set WEBSITES_SHARE=WebSites
set WEBSITES_FOLDER=C:\WebSites
md %WEBSITES_FOLDER%
net share %WEBSITES_SHARE% /delete
net share %WEBSITES_SHARE%=%WEBSITES_FOLDER% /grant:Everyone,full
配置共享访问控制
在文件服务器上或故障转移群集节点(当前的群集资源所有者)上,在权限提升的命令提示符下运行以下命令。 将斜体显示的值替换为环境特定的值。
Active Directory
set DOMAIN=<DOMAIN>
set WEBSITES_FOLDER=C:\WebSites
icacls %WEBSITES_FOLDER% /reset
icacls %WEBSITES_FOLDER% /grant Administrators:(OI)(CI)(F)
icacls %WEBSITES_FOLDER% /grant %DOMAIN%\FileShareOwners:(OI)(CI)(M)
icacls %WEBSITES_FOLDER% /inheritance:r
icacls %WEBSITES_FOLDER% /grant %DOMAIN%\FileShareUsers:(CI)(S,X,RA)
icacls %WEBSITES_FOLDER% /grant *S-1-1-0:(OI)(CI)(IO)(RA,REA,RD)
工作组
set WEBSITES_FOLDER=C:\WebSites
icacls %WEBSITES_FOLDER% /reset
icacls %WEBSITES_FOLDER% /grant Administrators:(OI)(CI)(F)
icacls %WEBSITES_FOLDER% /grant FileShareOwners:(OI)(CI)(M)
icacls %WEBSITES_FOLDER% /inheritance:r
icacls %WEBSITES_FOLDER% /grant FileShareUsers:(CI)(S,X,RA)
icacls %WEBSITES_FOLDER% /grant *S-1-1-0:(OI)(CI)(IO)(RA,REA,RD)
准备 SQL Server 实例
注意
如果已选择为高度可用的文件服务器和 SQL Server 部署快速入门模板,则可以跳过本部分,因为模板会在 HA 配置中部署和配置 SQL Server。
对于 Azure Stack Hub 上的 Azure 应用服务托管和计量数据库,必须准备 SQL Server 实例,用于存放应用服务数据库。
对于生产和高可用性目的,应使用完整版本的 SQL Server 2014 SP2 或更高版本,启用混合模式身份验证,并在高可用性配置中部署。
必须能够从所有“应用服务”角色访问 Azure Stack Hub 上的 Azure 应用服务的 SQL Server 实例。 可以在 Azure Stack Hub 中的默认提供程序订阅中部署 SQL Server。 或者,可以使用组织中现有的基础结构(前提是与 Azure Stack Hub 建立了连接)。 如果使用 Azure 市场映像,请记得相应地配置防火墙。
注意
可通过市场管理功能获取 SQL IaaS VM 映像数。 在使用市场项部署 VM 之前,请确保下载最新版本的 SQL IaaS 扩展。 SQL 映像与 Azure 中提供的 SQL VM 相同。 对于从这些映像创建的 SQL VM,IaaS 扩展和相应的门户增强功能可提供自动修补和备份等功能。
对于任何 SQL Server 角色,可以使用默认实例或命名实例。 如果使用命名实例,请务必手动启动 SQL Server Browser 服务并打开端口 1434。
应用服务安装程序将检查以确保 SQL Server 已启用数据库包含。 若要在将托管应用服务数据库的 SQL Server 上启用数据库包含,请运行以下 SQL 命令:
sp_configure 'contained database authentication', 1;
GO
RECONFIGURE;
GO
证书和服务器配置 (ASDK)
本部分列出了 ASDK 部署的先决条件。
Azure 应用服务的 ASDK 部署所需的证书
Create-AppServiceCerts.ps1 脚本配合 Azure Stack Hub 证书颁发机构运行,创建应用服务所需的四个证书。
文件名 | 用途 |
---|---|
_.appservice.local.azurestack.external.pfx | 应用服务默认 SSL 证书 |
api.appservice.local.azurestack.external.pfx | 应用服务 API SSL 证书 |
ftp.appservice.local.azurestack.external.pfx | 应用服务发布者 SSL 证书 |
sso.appservice.local.azurestack.external.pfx | 应用服务标识应用程序证书 |
若要创建证书,请执行以下步骤:
- 使用 AzureStack\AzureStackAdmin 帐户登录到 ASDK 主机。
- 打开提升的 PowerShell 会话。
- 从帮助器脚本提取到的文件夹运行 Create-AppServiceCerts.ps1 脚本。 此脚本在应用服务所需的、用于创建证书的脚本所在的同一文件夹中创建四个证书。
- 输入密码来保护 .pfx 文件,并记下该密码。 稍后,必须在基于 Azure Stack Hub 的应用服务安装程序中输入该密码。
Create-AppServiceCerts.ps1 脚本参数
参数 | 必需还是可选 | 默认值 | 说明 |
---|---|---|---|
pfxPassword | 必须 | Null | 帮助保护证书私钥的密码 |
DomainName | 必须 | local.azurestack.external | Azure Stack Hub 区域和域后缀 |
用于部署 ASDK 上的 Azure应用服务的文件服务器快速入门模板。
如果只部署 ASDK,则可以使用示例 Azure 资源管理器部署模板来部署已配置的单节点文件服务器。 单节点文件服务器位于工作组中。
注意
若要完成部署,ASDK 实例必须能够从 GitHub 下载资源。
SQL Server 实例
对于 Azure Stack Hub 上的 Azure 应用服务托管和计量数据库,必须准备 SQL Server 实例,用于存放应用服务数据库。
对于 ASDK 部署,可以使用 SQL Server Express 2014 SP2 或更高版本。 SQL Server 必须配置为支持混合模式身份验证,因为 Azure Stack Hub 上的应用服务不支持 Windows 身份验证。
必须能够从所有“应用服务”角色访问 Azure Stack Hub 上的 Azure 应用服务的 SQL Server 实例。 可以在 Azure Stack Hub 中的默认提供程序订阅中部署 SQL Server。 或者,可以使用组织中现有的基础结构(前提是与 Azure Stack Hub 建立了连接)。 如果使用 Azure 市场映像,请记得相应地配置防火墙。
注意
可通过市场管理功能获取 SQL IaaS VM 映像数。 在使用市场项部署 VM 之前,请确保下载最新版本的 SQL IaaS 扩展。 SQL 映像与 Azure 中提供的 SQL VM 相同。 对于从这些映像创建的 SQL VM,IaaS 扩展和相应的门户增强功能可提供自动修补和备份等功能。
对于任何 SQL Server 角色,可以使用默认实例或命名实例。 如果使用命名实例,请务必手动启动 SQL Server Browser 服务并打开端口 1434。
应用服务安装程序将检查以确保 SQL Server 已启用数据库包含。 若要在将托管应用服务数据库的 SQL Server 上启用数据库包含,请运行以下 SQL 命令:
sp_configure 'contained database authentication', 1;
GO
RECONFIGURE;
GO
所需文件服务器和 SQL Server 的许可问题
Azure Stack Hub 上的 Azure 应用服务需要文件服务器和 SQL Server 才能运行。 可以使用 Azure Stack Hub 部署外部预先存在的资源,也可以将资源部署在其 Azure Stack Hub 默认提供程序订阅的内部。
如果选择将资源部署在 Azure Stack Hub 默认提供程序订阅内部,则这些资源的许可证(Windows Server 许可证和 SQL Server 许可证)会包括在 Azure Stack Hub 上的 Azure 应用服务的成本中,但会受到以下约束:
- 基础结构将部署到“默认提供程序订阅”中;
- 基础结构由 Azure Stack Hub 资源提供程序上的 Azure 应用服务独占使用。 不允许其他管理工作负荷(其他资源提供程序,例如 SQL-RP)或租户工作负荷(例如需要数据库的租户应用)使用此基础结构。
对文件服务器和 SQL Server 的操作责任
云操作员负责文件服务器和 SQL Server 的维护和操作。 资源提供程序不管理这些资源。 云操作员负责备份应用服务数据库和租户内容文件共享。
检索 Azure Stack Hub 的 Azure 资源管理器根证书
在计算机上打开一个提升的 PowerShell 会话,该计算机可以访问 Azure Stack Hub 集成系统或 ASDK 主机上的特权终结点。
从帮助器脚本提取到的文件夹运行 Get-AzureStackRootCert.ps1 脚本。 此脚本在应用服务所需的、用于创建证书的脚本所在的同一文件夹中创建一个根证书。
运行以下 PowerShell 命令时,必须为 AzureStack\CloudAdmin 提供特权终结点和凭据。
Get-AzureStackRootCert.ps1
Get-AzureStackRootCert.ps1 脚本参数
参数 | 必需还是可选 | 默认值 | 说明 |
---|---|---|---|
PrivilegedEndpoint | 必须 | AzS-ERCS01 | 特权终结点 |
CloudAdminCredential | 必须 | AzureStack\CloudAdmin | Azure Stack Hub 云管理员的域帐户凭据。 |
网络和标识配置
虚拟网络
注意
预先创建自定义虚拟网络是可选操作,因为 Azure Stack Hub 上的 Azure 应用服务可以创建所需的虚拟网络,但之后需要通过公共 IP 地址来与 SQL 和文件服务器通信。 如果使用应用服务 HA 文件服务器和 SQL Server 快速启动模板来部署必备的 SQL Server 和文件服务器资源,则该模板还会部署虚拟网络。
Azure Stack Hub 上的 Azure 应用服务允许将资源提供程序部署到现有的虚拟网络,或者允许在部署时创建虚拟网络。 使用现有虚拟网络可以通过内部 IP 连接到 Azure Stack Hub 上的 Azure 应用服务所需的文件服务器和 SQL Server。 在 Azure Stack Hub 上安装 Azure 应用服务之前,必须为虚拟网络配置以下地址范围和子网:
虚拟网络 - /16
子网
- ControllersSubnet /24
- ManagementServersSubnet /24
- FrontEndsSubnet /24
- PublishersSubnet /24
- WorkersSubnet /21
重要
如果选择在现有虚拟网络中部署应用服务,应将 SQL Server 部署到独立于应用服务和文件服务器的子网中。
创建标识应用程序以启用 SSO 方案
Azure 应用服务使用标识应用程序(服务主体)支持以下操作:
- 辅助角色层上的虚拟机规模集集成。
- Azure Functions 门户和高级开发人员工具 (Kudu) 的 SSO。
根据 Azure Stack Hub 所使用的标识提供者、Microsoft Entra ID 或 Active Directory 联合身份验证服务 (ADFS),必须按照以下相应步骤创建服务主体,供 Azure Stack Hub 资源提供程序上的 Azure 应用服务使用。
创建 Microsoft Entra 应用
遵循以下步骤在 Microsoft Entra 租户中创建服务主体:
- 以 azurestack\AzureStackAdmin 身份打开 PowerShell 实例。
- 转到在先决条件步骤中下载并提取的脚本所在的位置。
- 安装适用于 Azure Stack Hub 的 PowerShell。
- 运行 Create-AADIdentityApp.ps1 脚本。 根据提示输入部署 Azure Stack Hub 时使用的 Microsoft Entra 租户 ID。 例如,输入 myazurestack.onmicrosoft.com。
- 在“凭据”窗口中,输入 Microsoft Entra 服务管理帐户和密码。 选择“确定”。
- 输入前面创建的证书的证书文件路径和证书密码。 默认情况下值,为此步骤创建的证书是 sso.appservice.local.azurestack.external.pfx。
- 请记下 PowerShell 输出中返回的应用程序 ID。 使用以下步骤中的 ID 来为应用程序的权限提供许可,以及在安装过程中提供许可。
- 打开新的浏览器窗口,以 Microsoft Entra 服务管理员的身份登录到Azure 门户。
- 打开 Microsoft Entra 服务。
- 在左侧窗格中选择“应用注册”。
- 搜索在步骤 7 中记下的应用程序 ID。
- 从列表中选择“应用服务应用程序注册”。
- 在左侧窗格中选择“API 权限”。
- 选择“授予对<tenant>的管理员许可”,其中<tenant>是 Microsoft Entra 租户的名称。 选择“是”确认授予许可。
Create-AADIdentityApp.ps1
参数 | 必需还是可选 | 默认值 | 说明 |
---|---|---|---|
DirectoryTenantName | 必须 | Null | Microsoft Entra 租户 ID。 提供 GUID 或字符串。 例如 myazureaaddirectory.onmicrosoft.com。 |
AdminArmEndpoint | 必须 | Null | Azure 资源管理器管理终结点。 例如 adminmanagement.local.azurestack.external。 |
TenantARMEndpoint | 必须 | Null | Azure 资源管理器租户终结点。 例如 management.local.azurestack.external。 |
AzureStackAdminCredential | 必须 | Null | Microsoft Entra 服务管理员凭据。 |
CertificateFilePath | 必须 | Null | 前面生成的标识应用程序证书文件的完整路径。 |
CertificatePassword | 必须 | Null | 帮助保护证书私钥的密码。 |
环境 | 可选 | AzureCloud | 其中目标 Azure Active Directory Graph 服务可用的受支持云环境的名称。 允许的值:“AzureCloud”、“AzureChinaCloud”、“AzureUSGovernment”、“AzureGermanCloud”。 |
创建 ADFS 应用
- 以 azurestack\AzureStackAdmin 身份打开 PowerShell 实例。
- 转到在先决条件步骤中下载并提取的脚本所在的位置。
- 安装适用于 Azure Stack Hub 的 PowerShell。
- 运行 Create-ADFSIdentityApp.ps1 脚本。
- 在“凭据”窗口中,输入 AD FS 云管理帐户和密码。 选择“确定” 。
- 提供前面创建的证书的证书文件路径和证书密码。 默认情况下值,为此步骤创建的证书是 sso.appservice.local.azurestack.external.pfx。
Create-ADFSIdentityApp.ps1
参数 | 必需还是可选 | 默认值 | 说明 |
---|---|---|---|
AdminArmEndpoint | 必须 | Null | Azure 资源管理器管理终结点。 例如 adminmanagement.local.azurestack.external。 |
PrivilegedEndpoint | 必须 | Null | 特权终结点。 例如 AzS-ERCS01。 |
CloudAdminCredential | 必须 | Null | Azure Stack Hub 云管理员的域帐户凭据。 例如 Azurestack\CloudAdmin。 |
CertificateFilePath | 必须 | Null | 标识应用程序的证书 PFX 文件的完整路径。 |
CertificatePassword | 必须 | Null | 帮助保护证书私钥的密码。 |
从 Azure 市场下载项
Azure Stack Hub 上的应用服务需要从 Azure 市场下载项,以便在 Azure Stack Hub 市场中提供这些项。 必须先下载这些项,然后才能开始部署或升级 Azure Stack Hub 上的 Azure 应用服务:
重要
不支持将 Windows Server Core 平台映像与基于 Azure Stack Hub 的 Azure 应用服务配合使用。
请勿将评估映像用于生产部署。
- 最新版本的 Windows Server 2022 Datacenter VM 映像。
已激活包含 Microsoft.Net 3.5.1 SP1 的 Windows Server 2022 Datacenter 完整 VM 映像。 基于 Azure Stack Hub 的 Azure 应用服务要求在用于部署的映像上激活 Microsoft.NET 3.5.1 SP1。 市场出售的 Windows Server 2022 映像未启用此功能,并且在断开连接的环境中无法通过 DISM 访问 Microsoft 更新来下载要安装的程序包。 因此,你必须创建并使用 Windows Server 2022 映像,其中已通过断开连接的部署预先启用此功能。
有关创建自定义映像并将其添加到市场的详细信息,请参阅将自定义 VM 映像添加到 Azure Stack Hub。 将映像添加到市场时,请务必指定以下属性:
- 发布者 = MicrosoftWindowsServer
- 套餐 = WindowsServer
- SKU = AppService
- 版本 = 指定“最新”版本
- 自定义脚本扩展 v1.9.1 或更高版本。 此项为 VM 扩展。