快速入门:将功能标志添加到 Azure Kubernetes 服务中的工作负载

在本快速入门中,你将在 Azure 应用程序配置中创建一个功能标志,并使用它来动态控制 AKS 中运行的 ASP.NET Core 应用中新网页的可见性,而无需重启或重新部署该应用。

先决条件

按照文档操作,在 Azure Kubernetes 服务中使用动态配置。

创建功能标志

将名为“Beta”的功能标志添加到应用程序配置存储区,并将“标签”和“描述”保留为其默认值。 有关如何使用 Azure 门户或 CLI 将功能标志添加到存储区的详细信息,请转到创建功能标志

显示创建名为 Beta 的功能标志的屏幕截图。

使用功能标志

在本部分中,你将在简单的 ASP.NET Web 应用程序中使用功能标志,并在 Azure Kubernetes 服务 (AKS) 中运行该功能标志。

  1. 导航到在快速入门中创建的项目目录,然后运行以下命令来添加对 Microsoft.FeatureManagement.AspNetCore NuGet 包 3.2.0 版或更高版本的引用。

    dotnet add package Microsoft.FeatureManagement.AspNetCore
    
  2. 打开 program.cs,并通过调用 AddFeatureManagement 将功能管理添加到应用的服务集合中

    // Existing code in Program.cs
    // ... ...
    
    // Add a JSON configuration source 
    builder.Configuration.AddJsonFile("config/mysettings.json", reloadOnChange: true, optional: false); 
    
    // Add feature management to the container of services.
    builder.Services.AddFeatureManagement();
    
    var app = builder.Build();
    
    // The rest of existing code in program.cs
    // ... ...
    

    在该文件的顶部添加 using Microsoft.FeatureManagement;(如果没有)。

  3. 在 Pages 目录下添加一个名为 Beta 的新空 Razor 页。 该页包含两个文件:Beta.cshtml 和 Beta.cshtml.cs。

    打开 Beta.cshtml,并使用以下标记更新它:

    @page
    @model MyWebApp.Pages.BetaModel
    @{
        ViewData["Title"] = "Beta Page";
    }
    
    <h1>This is the beta website.</h1>
    

    打开 Beta.cshtml.cs,并将 FeatureGate 属性添加到 BetaModel 类。 FeatureGate 属性确保仅当启用了 Beta 功能标志时才能访问 Beta 页。 如果未启用 Beta 功能标志,该页将返回 404 Not Found。

    using Microsoft.AspNetCore.Mvc.RazorPages;
    using Microsoft.FeatureManagement.Mvc;
    
    namespace MyWebApp.Pages
    {
        [FeatureGate("Beta")]
        public class BetaModel : PageModel
        {
            public void OnGet()
            {
            }
        }
    }   
    
  4. 打开 Pages/_ViewImports.cshtml,使用 @addTagHelper 指令注册功能管理器标记帮助器:

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    

    前面的代码允许在项目的 .cshtml 文件中使用 <feature> 标记帮助程序。

  5. 打开 Pages\Shared 目录中的 _Layout.cshtml。 在“主页”和“隐私”导航栏项之间插入新的 <feature> 标记,如以下突出显示的行中所示 。

        <span class="navbar-toggler-icon"></span>
    </button>
    <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
        <ul class="navbar-nav flex-grow-1">
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
            </li>
            <feature name="Beta">
                <li class="nav-item">
                    <a class="nav-link text-dark" asp-area="" asp-page="/Beta">Beta</a>
                </li>
            </feature>
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
            </li>
    

    <feature> 标记确保仅当启用了 Beta 功能标志时才显示“Beta”菜单项。

  6. 对应用程序进行容器化处理向 Azure 容器注册表推送映像

  7. 部署应用程序。 刷新浏览器,网页将如下所示:

    显示使用 configMap 之后的 Kubernetes 提供程序的屏幕截图,其中未启用功能标志。

使用 Kubernetes 提供程序加载功能标志

  1. 使用以下内容更新位于“部署”目录中的 appConfigurationProvider.yaml 文件

    apiVersion: azconfig.io/v1
    kind: AzureAppConfigurationProvider
    metadata:
      name: appconfigurationprovider-sample
    spec:
      endpoint: <your-app-configuration-store-endpoint>
      target:
        configMapName: configmap-created-by-appconfig-provider
        configMapData: 
          type: json
          key: mysettings.json
      auth:
        workloadIdentity:
          managedIdentityClientId: <your-managed-identity-client-id>
      featureFlag:
        selectors:
          - keyFilter: 'Beta'
        refresh:
          enabled: true
    

    提示

    如果未在 featureFlag 部分中指定任何 selectors,Kubernetes 提供程序将不会从应用程序配置存储加载功能标志。 启用 featureFlag.refresh 时,功能标志的默认刷新间隔为 30 秒。 可以通过 featureFlag.refresh.interval 参数自定义此行为。

  2. 运行以下命令以应用更改。

    kubectl apply -f ./Deployment -n appconfig-demo
    
  3. 在应用程序配置存储中更新 Beta 功能标志。 通过选中“已启用”下的复选框来启用该标志。

  4. 多次刷新浏览器后,ConfigMap 在 30 秒内更新后,将可以看到更新的内容。

    显示使用 configMap 之后的 Kubernetes 提供程序的屏幕截图,其中启用了功能标志。

  5. 选择“Beta”菜单。 你将转到动态启用的 beta 网站。

    显示使用 configMap 之后 Kubernetes 提供程序 Beta 版页面的屏幕截图。

清理资源

若要保留 AKS 群集,请从 AKS 群集卸载应用程序配置 Kubernetes 提供程序。

helm uninstall azureappconfiguration.kubernetesprovider --namespace azappconfig-system

如果不想继续使用本文中创建的资源,请删除此处创建的资源组以避免产生费用。

重要

删除资源组的操作不可逆。 将永久删除资源组以及其中的所有资源。 请确保不要意外删除错误的资源组或资源。 如果在包含要保留的其他资源的资源组中创建了本文的资源,请从相应的窗格中单独删除每个资源,而不是删除该资源组。

  1. 登录到 Azure 门户,然后选择“资源组”。
  2. 在“按名称筛选”框中,输入资源组的名称
  3. 在结果列表中,选择资源组名称以查看概述。
  4. 选择“删除资源组”。
  5. 系统会要求确认是否删除资源组。 重新键入资源组的名称进行确认,然后选择“删除” 。

片刻之后,将会删除该资源组及其所有资源。

后续步骤

在本快速入门中,请执行以下操作:

  • 将功能管理功能添加到了在 Azure Kubernetes 服务 (AKS) 中运行的 ASP.NET Core 应用。
  • 使用应用程序配置 Kubernetes 提供程序将 AKS 群集连接到了应用程序配置存储。
  • 使用应用程序配置存储中的键值和功能标志创建了 ConfigMap。
  • 没有更改应用代码,运行了使用应用程序配置存储中的动态配置的应用。

要详细了解 Azure 应用程序配置 Kubernetes 提供程序,请参阅 Azure 应用程序配置 Kubernetes 提供程序参考

若要详细了解功能管理功能,请继续学习以下教程。