你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将 ASP.NET 应用容器化并迁移到 Azure Kubernetes 服务

本文将介绍如何容器化 ASP.NET 应用程序,以及如何使用 Azure Migrate: 应用容器化工具将其迁移到 Azure Kubernetes 服务 (AKS)。 容器化过程不需要访问代码库,并提供了一种简单的方法来容器化现有应用程序。 该工具的工作原理是使用服务器上应用程序的运行状态来确定应用程序组件,并帮助你将它们打包到容器映像中。 然后,可以将容器化应用程序部署到 Azure Kubernetes Service (AKS)。

Azure Migrate 应用容器化工具当前支持:

  • 容器化 ASP.NET 应用并将其部署到 Azure Kubernetes 服务上的 Windows 容器中。
  • 容器化 ASP.NET 应用并将其部署到 Azure 应用服务上的 Windows 容器中。 了解详细信息
  • 在 Apache Tomcat(在 Linux 服务器上)上容器化 Java Web 应用,并将其部署到 AKS 上的 Linux 容器中。 了解详细信息
  • 在 Apache Tomcat(在 Linux 服务器上)上容器化 Java Web 应用,并将其部署到应用服务上的 Linux 容器中。 了解详细信息

Azure Migrate 应用容器化工具可帮助你:

  • 发现应用程序:该工具远程连接到运行 ASP.NET 应用程序的应用程序服务器,并发现应用程序组件。 该工具将创建一个可用于为应用程序创建容器映像的 Dockerfile。
  • 生成容器映像:可以根据应用程序要求检查并进一步自定义 Dockerfile,并使用它来生成应用程序容器映像。 应用程序容器映像会被推送到指定的 Azure 容器注册表。
  • 部署到 Azure Kubernetes 服务:然后,该工具会生成将容器化应用程序部署到 Azure Kubernetes 服务群集时所需的 Kubernetes 资源定义 YAML 文件。 可以自定义 YAML 文件,并使用它们在 AKS 上部署应用程序。

注意

Azure Migrate: 应用容器化工具可帮助你发现特定应用程序类型(Apache Tomcat 上的 ASP.NET 和 Java Web 应用)以及它们在应用服务器上的组件。 若要发现服务器以及在本地计算机上运行的应用、角色和功能的清单,请使用 Azure Migrate: 发现和评估功能。 了解详细信息

虽然在不进行重大重构的情况下直接迁移到容器并不能使所有应用程序获益,但不进行重写地将现有应用迁移到容器中的一些好处包括:

  • 提高基础结构利用率–借助容器,多个应用程序可以共享资源,并托管在同一基础结构上。 这有助于整合基础结构并提高利用率。
  • 简化的管理–在新式托管平台(如 AKS 和应用服务)上托管应用程序可以简化管理实践。 可以通过停用或减少通常使用拥有的基础结构执行的基础结构维护和管理过程来实现此目的。
  • 应用程序可移植性–随着容器规范格式逐渐普及和业务流程平台标准化程度的提高,应用程序的可移植性不再是问题。
  • 采用 DevOps 的新式管理–帮助你在管理、安全性和过渡到 DevOps 的过程中采用新式做法并加以标准化。

本教程介绍以下操作:

  • 设置 Azure 帐户。
  • 安装 Azure Migrate: 应用容器化工具。
  • 发现你的 ASP.NET 应用程序。
  • 生成容器映像。
  • 在 AKS 上部署容器化应用程序。

注意

教程中演示了方案的最简单部署路径,使你能够快速设置概念证明。 教程尽可能使用默认选项,不会演示所有可能的设置和路径。

先决条件

开始学习本教程之前,应做好以下准备:

要求 详细信息
确定要安装工具的计算机 用于安装和运行 Azure Migrate: 应用容器化工具的 Windows 计算机。 Windows 计算机可以是服务器(Windows Server 2016 或更高版本)或客户端 (Windows 10) 操作系统,这意味着该工具也可在桌面上运行。

运行该工具的 Windows 计算机应该与托管要容器化的 ASP.NET 应用程序的服务器/虚拟机具有网络连接。

确保运行 Azure Migrate: 应用容器化工具的 Windows 计算机上有 6 GB 的可用空间,用于存储应用程序项目。

Windows 计算机应可以直接或通过代理访问 Internet。

在运行应用容器化帮助程序工具和应用程序服务器的计算机上安装 Microsoft Web 部署工具(如果尚未安装)。 可从此处下载工具。
应用程序服务器 在应用程序服务器上启用 PowerShell 远程处理:登录到应用程序服务器,然后按照这些说明打开 PowerShell 远程处理

确保在应用程序服务器上安装了 PowerShell 5.1。 按照安装和配置 WMF 5.1 中的说明在应用程序服务器上下载并安装 PowerShell 5.1。

在运行应用容器化帮助程序工具和应用程序服务器的计算机上安装 Microsoft Web 部署工具(如果尚未安装)。 可从此处下载工具。
ASP.NET 应用程序 该工具当前支持:
- 使用 Microsoft .NET Framework 3.5 或更高版本的 ASP.NET 应用程序。
- 运行 Windows Server 2012 R2 或更高版本的应用程序服务器(应用程序服务器应运行 PowerShell 版本 5.1)。
- 在 Internet Information Services (IIS) 7.5 或更高版本上运行的应用程序。

该工具当前不支持:
- 需要 Windows 身份验证的应用程序(应用容器化工具当前不支持 gMSA)。
- 依赖于 IIS 外部托管的其他 Windows 服务的应用程序。

准备 Azure 用户帐户

如果没有 Azure 订阅,请在开始之前创建一个免费帐户

订阅设置完成后,你需要一个拥有以下权限的 Azure 用户帐户:

  • Azure 订阅的所有者权限。
  • Microsoft Entra 应用的注册权限。

如果你刚刚创建了免费的 Azure 帐户,那么你就是订阅的所有者。 如果你不是订阅所有者,请让所有者分配权限,如下所示:

  1. 在 Azure 门户中,搜索“订阅”,然后在“服务”下选择“订阅” 。

    Screenshot of search box to search for the Azure subscription.

  2. 在“订阅”页上,选择要在其中创建 Azure Migrate 项目的订阅。

  3. 选择“访问控制 (IAM)”。

  4. 选择“添加”>“添加角色分配”,打开“添加角色分配”页面 。

  5. 分配以下角色。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色

    设置
    角色 “所有者”
    将访问权限分配到 用户
    成员 azmigrateuser(本示例中)

    Screenshot of add role assignment page in Azure portal.

  6. Azure 帐户还需要注册 Microsoft Entra 应用的权限。

  7. 在 Azure 门户中,导航到“Microsoft Entra ID”>“用户”>“用户设置”

  8. “用户设置”中,验证 Microsoft Entra 用户是否可以注册应用程序(默认情况下设置为“是”)。

    Screenshot of verification in User Settings if users can register Active Directory apps.

  9. 如果“应用注册”设置设置为“否”,请请求租户/全局管理员分配所需的权限。 或者,租户/全局管理员可将“应用程序开发人员”角色分配给帐户,以允许注册 Microsoft Entra 应用。 了解详细信息

下载并安装 Azure Migrate: 应用容器化工具

  1. 在 Windows 计算机上下载 Azure Migrate: 应用容器化安装程序。

  2. 在管理员模式下启动 PowerShell,并将 PowerShell 目录更改为包含安装程序的文件夹。

  3. 使用命令运行安装脚本

    .\AppContainerizationInstaller.ps1
    

注意

对于 Windows Server 2022,请编辑第 135 行并从功能列表中删除 PowerShell-ISE,因为它不再受支持。

启动应用容器化工具

  1. 在可连接到运行应用容器化工具的 Windows 计算机的任何计算机上打开浏览器,并打开工具 URL: https://计算机名称或 IP 地址: 44369。

    或者,可以在桌面上选择应用快捷方式打开该应用。

  2. 如果你看到一条警告,指出连接不是专用连接,请选择“高级”,然后选择转到网站。 Web 界面使用自签名 TLS/SSL 证书时,将显示此警告。

  3. 在“登录”屏幕上,使用计算机上的本地管理员帐户进行登录。

  4. 选择“ASP.NET Web 应用”作为要容器化的应用程序类型。

  5. 若要指定目标 Azure 服务,请选择“Azure Kubernetes 服务商的容器”。

    Screenshot of default load-up for App Containerization tool.

完整工具必备组件

  1. 接受许可条款,并阅读第三方信息。
  2. 在工具 Web 应用 >“设置必备组件”中执行以下步骤
    • 连接:工具将检查 Windows 计算机是否可访问 Internet。 如果计算机使用代理:
      • 选择“设置代理”,以指定代理地址(格式为 IP 地址或 FQDN)以及侦听端口。
      • 如果代理需要身份验证,请指定凭据。
      • 仅支持 HTTP 代理。
      • 如果已添加代理详细信息或已禁用代理和/或身份验证,请选择“保存”以再次触发连接性检查。
    • 安装更新:该工具将自动检查最新更新并安装它们。 也可以从此处手动安装该工具的最新版本。
    • 安装 Microsoft Web 部署工具:该工具将检查运行 Azure Migrate: 应用容器化工具的 Windows 计算机上是否安装了 Microsoft Web 部署工具。
    • 启用 PowerShell 远程处理:该工具将通知你,以确保在运行要容器化的 ASP.NET 应用程序的应用程序服务器上启用 PowerShell 远程处理。

登录 Azure

  1. 选择“登录”,以登录 Azure 帐户。

  2. 需要使用设备代码向 Azure 进行身份验证。 选择“登录”将打开一个包含设备代码的模式。

  3. 选择“复制代码并登录”以复制设备代码,并在新的浏览器选项卡中打开 Azure 登录提示。如果未显示该按钮,请确保已在浏览器中禁用弹出窗口阻止程序。

    Screenshot of modal showing device code.

  4. 在新选项卡中,粘贴设备代码,并使用 Azure 帐户凭证完成登录。 登录完成后,可以关闭浏览器选项卡,然后返回到应用容器化工具屏幕。

  5. 选择要使用的 Azure 租户。

  6. 指定要使用的 Azure 订阅。

发现 ASP.NET 应用程序

应用容器化帮助程序工具使用提供的凭据远程连接到应用程序服务器,并尝试发现在应用程序服务器上托管的 ASP.NET 应用程序。

  1. 指定运行 ASP.NET 应用程序的服务器的 IP 地址/FQDN 和凭据,该服务器应用于远程连接到服务器以进行应用程序发现。

    • 提供的凭据必须是应用程序服务器上的本地管理员 (Windows) 的凭据。
    • 对于域帐户(用户必须是应用程序服务器上的管理员),请在用户名前添加域名,格式为 <域\用户名>。
    • 一次最多可运行 5 个服务器的应用程序发现。
  2. 选择“验证”,验证是否可以从运行该工具的计算机访问应用程序服务器,以及凭据是否有效。 验证成功后,“状态”列会将状态显示为“已映射”。

    Screenshot for server IP and credentials.

  3. 选择“继续”,在选定的应用程序服务器上启动应用程序发现。

  4. 成功完成应用程序发现后,可以选择要容器化的应用程序列表。

    Screenshot for discovered ASP.NET application.

  5. 使用复选框选择要容器化的应用程序。

  6. 指定容器名称:为每个选定的应用程序指定目标容器的名称。 容器名称应指定为 名称:标记,其中标记用于容器映像<>。 例如,可以将目标容器名称指定为 appname:v1。

参数化应用程序配置

参数化配置,使其可用作部署时间参数。 这使你可以在部署应用程序时配置此设置,而不是将其硬编码为容器映像中的特定值。 例如,此选项对数据库连接字符串等参数非常有用。

  1. 选择“应用配置”以查看检测到的配置。

  2. 选中此复选框以参数化检测到的应用程序配置。

  3. 选择要参数化的配置后,选择“应用”。

    Screenshot for app configuration parameterization ASP.NET application.

外部化文件系统依赖项

可以添加应用程序使用的其他文件夹。 指定它们是否应为容器映像的一部分,或者是否要通过 Azure 文件共享上的永久性卷进行外部化。 对于将状态存储在容器外部或将其他静态内容存储在文件系统上的有状态应用程序,使用永久性卷非常有用。 了解详细信息

  1. 选择“应用文件夹”下的“编辑”以查看检测到的应用程序文件夹。 检测到的应用程序文件夹已被识别为应用程序所需的必需项目,并将复制到容器映像中。

  2. 选择“添加文件夹”,并指定要添加的文件夹路径。

  3. 若要将多个文件夹添加到同一个卷,请提供以逗号 (,) 分隔的值。

  4. 如果希望将文件夹存储在永久性卷上的容器外部,请选择“永久性卷”作为存储选项。

  5. 查看应用程序文件夹后,选择“保存”。 Screenshot for app volumes storage selection.

  6. 选择“继续”以进入容器映像生成阶段。

生成容器映像

重要

如果使用 AKS 1.23+,请在生成 docker 映像之前按如下所示编辑脚本,以确保无缝迁移。

更改以下脚本

# Run entrypoint script.
COPY ./Entryscript.ps1 c:/Entryscript.ps1
ENTRYPOINT powershell c:/Entryscript.ps1

to

# Run entrypoint script.
COPY ["./Entryscript.ps1", "c:/Entryscript.ps1"]
ENTRYPOINT ["powershell", "c:/Entryscript.ps1"]

若要生成容器映像,请执行以下步骤:

  1. 选择 Azure 容器注册表:使用下拉列表选择将用于生成和存储应用容器映像的 Azure 容器注册表。 可以使用现有的 Azure 容器注册表,也可以选择使用“新建注册表”选项创建一个新的注册表。

    Screenshot for app ACR selection.

  2. 查看 Dockerfile:为每个所选应用程序生成容器映像所需的 Dockerfile 是在生成步骤开始时生成的。 选择“查看”,以查看 Dockerfile。 还可以在查看步骤中将任何必要的自定义添加到 Dockerfile,并在开始生成过程之前保存更改。

  3. 触发生成过程:选择要为其生成映像的应用程序,然后选择“生成”。 选择“生成”将对每个应用程序启动容器映像生成。 该工具会持续监视生成状态,并使你能够在成功完成生成后继续执行下一步。

  4. 跟踪生成状态:通过选择“状态”列下的“正在进行的生成”链接,还可以监视生成步骤的进度。 触发生成过程后,该链接需要几分钟时间才能生效。

  5. 完成生成后,选择“继续”以指定部署设置。

    Screenshot for app container image build completion.

在 AKS 上部署容器化应用

生成容器映像后,下一步是将应用程序部署为 Azure Kubernetes 服务 (AKS) 上的容器。

  1. 选择 Azure Kubernetes 服务群集:指定应将应用程序部署到的 AKS 群集。

    • 所选 AKS 群集必须具有 Windows 节点池。
    • 必须将群集配置为允许从选择用于存储映像的 Azure 容器注册表中提取映像。
      • 在 Azure CLI 中运行以下命令,以将 AKS 群集附加到 ACR。
        az aks update -n <cluster-name> -g <cluster-resource-group> --attach-acr <acr-name>
        
    • 如果没有 AKS 群集,或者想要创建一个新的 AKS 群集以将应用程序部署到其中,则可以通过在工具中选择“新建 AKS 群集”进行创建。
      • 使用该工具创建的 AKS 群集将使用 Windows 节点池进行创建。 群集将配置为允许其从以前创建的 Azure 容器注册表中提取映像(如果选择了“新建注册表”选项)。
    • 选择 AKS 群集后,选择“继续”。
  2. 指定机密存储:如果已选择参数化应用程序配置,请指定要用于该应用程序的机密存储。 可以选择 Azure Key Vault 或应用服务应用程序设置来管理你的应用程序机密。 了解详细信息

    • 如果已选择用于管理机密的应用服务应用程序设置,请选择“继续”。
    • 如果要使用 Azure 密钥保管库来管理应用程序密钥,请指定要使用的 Azure 密钥保管库。
      • 如果没有 Azure 密钥保管库,或者想要创建新的密钥保管库,则可以通过在工具中选择“创建新的 Azure 密钥保管库”进行创建。
      • 该工具会自动分配必要的权限,以便通过 Key Vault 管理机密。
  3. 指定 Azure 文件共享:如果添加了更多文件夹并选择了“永久性卷”选项,则请指定 Azure Migrate: 应用容器化工具在部署过程中应使用的 Azure 文件共享。 该工具将在此 Azure 文件共享中创建新目录,以复制为永久性卷存储配置的应用程序文件夹。 应用程序部署完成后,该工具会通过删除其创建的目录来清理 Azure 文件共享。

    • 如果没有 Azure 文件共享,或者想要创建新的 Azure 文件共享,则可以选择在工具中选择“新建存储帐户和文件共享”进行创建。
  4. 应用程序部署配置:完成上述步骤后,需指定应用程序的部署配置。 选择“配置”,以自定义应用程序部署。 在配置步骤中,可以提供下列自定义项:

    • 前缀字符串:指定要在 AKS 群集中为容器化应用程序创建的所有资源的名称中使用的前缀字符串。
    • SSL 证书:如果应用程序需要 https 站点绑定,请指定包含要用于绑定的证书的 PFX 文件。 PFX 文件不应受密码保护,原始站点不应具有多个绑定。
    • 副本集:指定应在容器中运行的应用程序实例 (pod) 数。
    • 负载均衡器类型:如果应该从公共网络访问容器化应用程序,请选择“外部”。
    • 应用程序配置:对于已参数化的任何应用程序配置,请提供要用于当前部署的值。
    • 存储:对于为永久性卷存储配置的任何应用程序文件夹,指定是应在应用程序实例之间共享该卷,还是应使用容器中的每个实例单独初始化该卷。 默认情况下,永久性卷上的所有应用程序文件夹都配置为共享。
    • 选择“应用”以保存部署配置。
    • 选择“继续”以部署应用程序。

    Screenshot for deployment app configuration.

  5. 部署应用程序:保存应用程序的部署配置后,该工具将为应用程序生成 Kubernetes 部署 YAML。

    • 选择“评审”,以查看并自定义应用程序的 Kubernetes 部署 YAML。

    • 选择要部署的应用程序。

    • 选择“部署”以启动所选应用程序的部署

      Screenshot for app deployment configuration.

    • 部署应用程序后,可以选择“部署状态”列以跟踪为该应用程序部署的资源。

下载生成的项目

用于生成应用程序并将其部署到 AKS 中的所有项目(包括 Dockerfile 和 Kubernetes YAML 规范文件)都存储在运行该工具的计算机上。 这些项目位于 C:\ProgramData\Microsoft Azure Migrate App Containerization。

将为每个应用程序服务器创建一个文件夹。 可以通过导航到此文件夹来查看和下载容器化进程中使用的所有中间项目。 与应用程序服务器相对应的文件夹将在每次运行特定服务器的工具时清除。

排查问题

若要解决此工具的任何问题,可以查看运行应用容器化工具的 Windows 计算机上的日志文件。 工具日志文件位于 C:\ProgramData\Microsoft Azure Migrate App Containerization\Logs 文件夹。

后续步骤

  • 容器化 ASP.NET Web 应用并将其部署到应用服务上的 Windows 容器中。 了解详细信息
  • 在(Linux 服务器上的)Apache Tomcat 上容器化 Java Web 应用,并将其部署到 AKS 上的 Linux 容器中。 了解详细信息
  • 在(Linux 服务器上的)Apache Tomcat 上对 Java Web 应用进行容器化,并将其部署到应用服务上的 Linux 容器中。 了解详细信息