Azure Stack Hub 上的应用服务 2022 H1 发行说明

这些发行说明介绍了基于 Azure Stack Hub 的 Azure 应用服务 2022 H1 发行版中的改进和修复,以及任何已知问题。 已知问题分为与部署、更新过程直接相关的问题,以及内部版本(安装后)的问题。

重要

在部署或更新应用服务资源提供程序 (RP) 之前,如有必要,请将 Azure Stack Hub 更新到支持的版本(或部署最新的 Azure Stack 开发工具包)。 请务必阅读 RP 发行说明,了解新功能、修补程序以及可能影响部署的任何已知问题。

支持的最低 Azure Stack Hub 版本 应用服务 RP 版本
2301 及更高版本 2302 安装程序发行说明

内部版本参考

Azure Stack Hub 上的应用服务 2022 H1 的内部版本号为 98.0.1.699

新增功能

Azure Stack Hub 上的 Azure 应用服务 2022 H1 为 Azure Stack Hub 引入了许多新功能。

  • 所有角色现在都由 Windows Server 2022 Datacenter 提供支持。
  • 管理员可以通过将 SKU 设置为 AppService 来隔离平台映像以供 Azure Stack Hub 上的应用服务使用。
  • 更新了所有辅助角色虚拟机规模集的网络设计,解决了客户面临的 SNAT 端口耗尽问题。
  • 增加了所有应用程序的出站地址数。 可以在 Azure Stack Hub 门户上的应用程序属性中找到已更新的出站地址列表。
  • 管理员可为每个虚拟机规模集中部署的各个实例设置包含三个字符的部署前缀,它在管理多个 Azure Stack Hub 实例时很有用。
  • 现在会为租户启用部署中心,它取代了“部署选项”体验。 重要说明:运营商需要重新配置其部署源,因为重定向 URL 随着此次更新发生了更改,此外,租户需要将其应用重新连接到其源代码管理提供程序。
  • 自本次更新起,字母 K 现在是保留的 SKU 字母。如果你有使用字母 K 定义的自定义 SKU,请在升级前联系支持人员,让其协助你解决此问题。

先决条件

在开始部署之前,请参阅准备工作文档

开始将 Azure Stack 上的 Azure 应用服务升级到 2022 H1 之前,请满足以下先决条件:

  • 确保 Azure Stack Hub 已更新到 1.2108.2.127 或 1.2206.2.52。

  • 确保所有角色在 Azure Stack Hub 管理门户的 Azure 应用服务管理中处于“就绪”状态。

  • 在 Azure Stack Hub 管理门户中使用应用服务管理来备份应用服务机密。

  • 备份应用服务和 SQL Server Master 数据库:

    • AppService_Hosting;
    • AppService_Metering;
    • Master
  • 备份租户应用内容文件共享。

    重要

    云操作员负责文件服务器和 SQL Server 的维护和操作。 资源提供程序不管理这些资源。 云操作员负责备份应用服务数据库和租户内容文件共享。

  • 同步发布市场的自定义脚本扩展版本 1.9.3。

更新

Azure Stack 上的 Azure 应用服务 Update 2022 H1 包含以下改进和修复:

  • 针对应用服务租户、管理员、函数门户和 Kudu 工具的更新。 与 Azure Stack 门户 SDK 版本一致。

  • 将 Azure Functions 运行时更新到 v1.0.13154 。

  • 针对核心服务的更新,用于提高可靠性和错误消息传递,以便更轻松地诊断常见问题。

  • 针对以下应用程序框架和工具的更新

    • 适用于 Microsoft 服务器操作系统版本 21H2 (x64) 的 .NET Framework 3.5 和 4.8 的 2022-09 累积更新 (KB5017028)。
    • ASP.NET Core
      • 3.1.18
      • 3.1.23
      • 6.0.2
      • 6.0.3
    • Eclipse Temurin OpenJDK 8
      • 8u302
      • 8u312
      • 8u322
    • Microsoft OpenJDK 11
      • 11.0.12.7.1
      • 11.0.13.8
      • 11.0.14.1
      • 17.0.1.12
      • 17.0.2.8
    • MSBuild
      • 16.7.0
      • 17.1.0
    • MSDeploy 3.5.100608.567
    • NodeJS
      • 14.18.1
      • 16.9.1
      • 16.13.0
    • npm
      • 6.14.15
      • 7.21.1
      • 8.1.0
    • Tomcat
      • 8.5.69
      • 8.5.72
      • 8.5.78
      • 9.0.52
      • 9.0.54
      • 9.0.62
      • 10.0.12
      • 10.0.20
    • 已将 Kudu 更新到 97.40427.5713。
  • 对所有角色的基础操作系统的更新

  • Windows Server 的累积更新现在会在部署和升级过程中应用到控制器角色。

此版本中已修复的问题

  • 自动清理应用服务资源提供程序数据库中的 SiteDataRecord 和 TraceMessages 表。
  • 专用证书现在显示在具有部署槽的站点中。
  • 验证所有角色是否准备就绪,从而提高了升级过程的可靠性。

更新前步骤

Azure Stack Hub 上的 Azure 应用服务 2022 H1 是一项重大更新,它会更新整个部署,并使用 Windows Server 2022 Datacenter OS 重新创建所有角色,因此可能需要好几个小时才能完成。 因此我们建议在应用计划好的更新之前通知最终客户。

  • 自 Azure Stack Hub 上的 Azure 应用服务 2022 H1 更新起,字母 K 现在是保留的 SKU 字母。如果你有使用字母 K 定义的自定义 SKU,请在升级前联系支持人员,让其协助你解决此问题。

查看更新的已知问题,并采取规定的操作。

部署后步骤

重要

如果已经为应用服务资源提供程序提供 SQL Always On 实例,则必须将 appservice_hosting 和 appservice_metering 数据库添加到可用性组并同步数据库,以免在进行数据库故障转移时丢失服务。

已知问题(更新)

  • 在客户已将 appservice_hosting 和 appservice_metering 数据库转换为包含的数据库的情况下,如果未将登录名成功迁移到包含的用户,则升级可能会失败。

如果在部署后客户已将 appservice_hosting 和 appservice_metering 数据库转换为包含的数据库,但尚未将数据库登录名成功迁移到包含的用户,则可能会遇到升级失败的情况。

在将基于 Azure Stack Hub 的 Azure 应用服务安装升级到 2020 Q3 之前,客户必须对托管 appservice_hosting 和 appservice_metering 的 SQL Server 执行以下脚本。 此脚本是非破坏性的,不会导致停机

必须在满足以下条件的情况下运行此脚本:

  • 此脚本由具有系统管理员权限的用户(例如 SQL SA 帐户)运行;

  • 如果使用 SQL Always On,请确保从包含了以下格式的所有应用服务登录名的 SQL 实例中运行该脚本:

    • appservice_hosting_FileServer
    • appservice_hosting_HostingAdmin
    • appservice_hosting_LoadBalancer
    • appservice_hosting_Operations
    • appservice_hosting_Publisher
    • appservice_hosting_SecurePublisher
    • appservice_hosting_WebWorkerManager
    • appservice_metering_Common
    • appservice_metering_Operations
    • 所有 WebWorker 登录名 - 采用 WebWorker_<instance ip address> 形式
        USE appservice_hosting
        IF EXISTS(SELECT * FROM sys.databases WHERE Name=DB_NAME() AND containment = 1)
        BEGIN
        DECLARE @username sysname ;  
        DECLARE user_cursor CURSOR  
        FOR
            SELECT dp.name
            FROM sys.database_principals AS dp  
            JOIN sys.server_principals AS sp
                ON dp.sid = sp.sid  
                WHERE dp.authentication_type = 1 AND dp.name NOT IN ('dbo','sys','guest','INFORMATION_SCHEMA');
            OPEN user_cursor  
            FETCH NEXT FROM user_cursor INTO @username  
                WHILE @@FETCH_STATUS = 0  
                BEGIN  
                    EXECUTE sp_migrate_user_to_contained
                    @username = @username,  
                    @rename = N'copy_login_name',  
                    @disablelogin = N'do_not_disable_login';  
                FETCH NEXT FROM user_cursor INTO @username  
            END  
            CLOSE user_cursor ;  
            DEALLOCATE user_cursor ;
            END
        GO

        USE appservice_metering
        IF EXISTS(SELECT * FROM sys.databases WHERE Name=DB_NAME() AND containment = 1)
        BEGIN
        DECLARE @username sysname ;  
        DECLARE user_cursor CURSOR  
        FOR
            SELECT dp.name
            FROM sys.database_principals AS dp  
            JOIN sys.server_principals AS sp
                ON dp.sid = sp.sid  
                WHERE dp.authentication_type = 1 AND dp.name NOT IN ('dbo','sys','guest','INFORMATION_SCHEMA');
            OPEN user_cursor  
            FETCH NEXT FROM user_cursor INTO @username  
                WHILE @@FETCH_STATUS = 0  
                BEGIN  
                    EXECUTE sp_migrate_user_to_contained
                    @username = @username,  
                    @rename = N'copy_login_name',  
                    @disablelogin = N'do_not_disable_login';  
                FETCH NEXT FROM user_cursor INTO @username  
            END  
            CLOSE user_cursor ;  
            DEALLOCATE user_cursor ;
            END
        GO
  • 升级后,租户应用程序无法将证书绑定到应用程序。

    此问题的原因是升级到 Windows Server 2022 后前端缺少功能。 操作员必须按此过程操作才能解决问题。

    1. 在 Azure Stack Hub 管理门户中,导航到“网络安全组”并查看“ControllersNSG”网络安全组。

    2. 默认情况下,已对所有应用服务基础结构角色禁用远程桌面。 将“Inbound_Rdp_2289”规则操作修改为“允许”访问。

    3. 导航到包含应用服务资源提供程序部署的资源组(默认情况下,其名称为 AppService.<region>)并连接到 CN0-VM。

    4. 返回到 CN0-VM 远程桌面会话。

    5. 在管理员 PowerShell 会话中运行以下代码:

      重要

      在执行此脚本期间,前端规模集中的每个实例都会有一个暂停。 如果有一条消息指示正在安装该功能,则会重启该实例,请使用脚本中的暂停来维护前端可用性。 操作员必须确保始终至少有一个前端实例处于“就绪”状态,以确保租户应用程序可以接收流量,不会遇到停机的情况。

      $c = Get-AppServiceConfig -Type Credential -CredentialName FrontEndCredential
      $spwd = ConvertTo-SecureString -String $c.Password -AsPlainText -Force
      $cred = New-Object System.Management.Automation.PsCredential ($c.UserName, $spwd)
      
      Get-AppServiceServer -ServerType LoadBalancer | ForEach-Object {
          $lb = $_
          $session = New-PSSession -ComputerName $lb.Name -Credential $cred
      
          Invoke-Command -Session $session {
            $f = Get-WindowsFeature -Name Web-CertProvider
            if (-not $f.Installed) {
                Write-Host Install feature on $env:COMPUTERNAME
                Install-WindowsFeature -Name Web-CertProvider
      
                Read-Host -Prompt "If installing the feature, the machine will reboot. Wait until there's enough frontend availability, then press ENTER to continue"
                Shutdown /t 5 /r /f 
            }
      }
      
      Remove-PSSession -Session $session     
      
    6. 在 Azure Stack 管理门户中,导航回“ControllersNSG”网络安全组。

    7. 修改“Inbound_Rdp_3389”规则以拒绝访问。

已知问题(安装后)

  • 如 Azure Stack 上的 Azure 应用服务部署文档中所述,当应用服务部署在现有虚拟网络中并且文件服务器仅在专用网络上可用时,工作人员将无法访问文件服务器。

    如果选择部署到现有虚拟网络和内部 IP 地址以连接到文件服务器,则必须添加出站安全规则,以便在工作子网和文件服务器之间启用 SMB 流量。 转到管理门户中的 WorkersNsg 并添加具有以下属性的出站安全规则:

    • 源:任意
    • 源端口范围:*
    • 目标:IP 地址
    • 目标 IP 地址范围:文件服务器的 IP 范围
    • 目标端口范围:445
    • 协议:TCP
    • 操作:允许
    • 优先级:700
    • 姓名:Outbound_Allow_SMB445
  • 为了在辅助角色与文件服务器通信时消除延迟,我们还建议将以下规则添加到辅助角色 NSG,以允许出站 LDAP 和 Kerberos 流量进入 Active Directory 控制器(如果使用 Active Directory 保护文件服务器,例如,如果你已使用快速入门模板部署 HA 文件服务器和 SQL Server)。

    转到管理门户中的 WorkersNsg 并添加具有以下属性的出站安全规则:

    • 源:任意
    • 源端口范围:*
    • 目标:IP 地址
    • 目标 IP 地址范围:AD 服务器的 IP 范围,例如,使用快速入门模板 10.0.0.100、10.0.0.101
    • 目标端口范围:389,88
    • 协议: 任何
    • 操作:允许
    • 优先级:710
    • 名称:Outbound_Allow_LDAP_and_Kerberos_to_Domain_Controllers
  • 升级后,租户应用程序无法将证书绑定到应用程序。

    此问题的原因是升级到 Windows Server 2022 后前端缺少功能。 操作员必须按此过程操作才能解决问题。

    1. 在 Azure Stack Hub 管理门户中,导航到“网络安全组”并查看“ControllersNSG”网络安全组。

    2. 默认情况下,已对所有应用服务基础结构角色禁用远程桌面。 将“Inbound_Rdp_2289”规则操作修改为“允许”访问。

    3. 导航到包含应用服务资源提供程序部署的资源组(默认情况下,其名称为 AppService.<region>)并连接到 CN0-VM。

    4. 返回到 CN0-VM 远程桌面会话。

    5. 在管理员 PowerShell 会话中运行以下代码:

      重要

      在执行此脚本期间,前端规模集中的每个实例都会有一个暂停。 如果有一条消息指示正在安装该功能,则会重启该实例,请使用脚本中的暂停来维护前端可用性。 操作员必须确保始终至少有一个前端实例处于“就绪”状态,以确保租户应用程序可以接收流量,不会遇到停机的情况。

      $c = Get-AppServiceConfig -Type Credential -CredentialName FrontEndCredential
      $spwd = ConvertTo-SecureString -String $c.Password -AsPlainText -Force
      $cred = New-Object System.Management.Automation.PsCredential ($c.UserName, $spwd)
      
      Get-AppServiceServer -ServerType LoadBalancer | ForEach-Object {
          $lb = $_
          $session = New-PSSession -ComputerName $lb.Name -Credential $cred
      
          Invoke-Command -Session $session {
            $f = Get-WindowsFeature -Name Web-CertProvider
            if (-not $f.Installed) {
                Write-Host Install feature on $env:COMPUTERNAME
                Install-WindowsFeature -Name Web-CertProvider
      
                Shutdown /t 5 /r /f 
            }
      }
      
      Remove-PSSession -Session $session
      
      Read-Host -Prompt "If installing the feature, the machine will reboot. Wait until there's enough frontend availability, then press ENTER to continue"
      
    6. 在 Azure Stack 管理门户中,导航回“ControllersNSG”网络安全组。

    7. 修改“Inbound_Rdp_3389”规则以拒绝访问。

云管理员在操作基于 Azure Stack 的 Azure 应用服务时的已知问题

  • 自定义域在离线环境中不受支持。

    应用服务针对公共 DNS 终结点执行域所有权验证。 因此,在离线方案中不支持自定义域。

  • 不支持 Web 和函数应用的虚拟网络集成。

    向 Web 和函数应用中添加虚拟网络集成的功能显示在 Azure Stack Hub 门户中,但如果租户尝试进行配置,则会收到内部服务器错误。 Azure Stack Hub 上的 Azure 应用服务不支持此功能。

后续步骤