从 HTTP 应用程序路由迁移到应用程序路由加载项

重要

Kubernetes SIG Network和安全响应委员会宣布即将停用Ingress NGINX项目, 维护将于2026年3月结束。 目前,使用 NGINX 的应用程序路由附加组件的 AKS 群集无需立即执行任何操作。 Microsoft将在 2026 年 11 月前为应用程序路由加载项 NGINX 入口资源提供关键安全修补程序的官方支持。

AKS 正在迁移到 网关 API,这将作为入口和 L7 流量管理的长期标准,以便与上游 Kubernetes 社区保持一致。 建议根据当前设置开始规划迁移路径:

  • 应用程序路由加载项用户:生产工作负荷将继续得到全面支持,直至2026年11月。 AKS 将继续通过网关 API 对齐方式不断演变应用程序路由加载项。 无需移动到其他入口产品。
  • OSS NGINX 用户 有多个选项:
  • 服务网格用户:如果计划采用服务网格,请考虑 基于 Istio 的服务网格加载项。 今天使用 Istio 入口,计划在正式发布为 GA 时迁移到 Istio 网关 API 支持。

本文介绍如何将 Azure Kubernetes Service (AKS) 群集从 HTTP 应用程序路由功能迁移到 应用路由加载项。 HTTP 应用程序路由加载项已停用,并且在当前受支持的任何 Kubernetes 群集版本上均无法工作。 建议尽快迁移以维护受支持的配置。

先决条件

  • Azure CLI 2.54.0 或更高版本安装并配置。 运行 az --version 即可查找版本。 如果需要安装或升级,请参阅 Install Azure CLI
  • 已安装版本 0.5.171 或更高版本的 aks-preview Azure CLI 扩展

注释

这些步骤详细介绍了如何从不支持的配置迁移出来。 因此,AKS 无法为迁移过程中出现的问题提供支持。

更新群集的附加产品、流入量和 IP 使用情况

  1. 启用应用程序路由附加产品。

    az aks approuting enable --resource-group <ResourceGroupName> --name <ClusterName>
    
  2. 更新您的入口,将ingressClassName设置为webapprouting.kubernetes.azure.com。 移除 kubernetes.io/ingress.class 注释。 你还需要将主机更换为你自己拥有的主机,因为应用路由插件没有托管的集群 DNS 区域。 如果没有 DNS 区域,请按照说明创建配置一个。

    最初,你的入口配置将如下所示:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: aks-helloworld
      annotations:
        kubernetes.io/ingress.class: addon-http-application-routing  # Remove the ingress class annotation
    spec:
      rules:
      - host: aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE>
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
    

    正确更新后,相同的配置将如下所示:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: aks-helloworld
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com # Set the ingress class property to refer to the application routing add-on ingress class
      rules:
      - host: aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE> # Replace with your own hostname
        http: 
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
    
  3. 使用新的 IP 地址更新入口控制器的 IP(例如在 DNS 记录中)。 可以使用 kubectl get 找到新 IP。 例如:

    kubectl get svc nginx --namespace app-routing-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
    
  4. 禁用 HTTP 应用程序路由附加产品。

    az aks disable-addons --resource-group <ResourceGroupName> --name <ClusterName> --addons http_application_routing
    

移除并删除所有 HTTP 应用程序路由资源

  1. 禁用了 HTTP 应用程序路由附加产品后,某些相关的 Kubernetes 资源可能会保留在群集中。 这些资源包括在 kube-system 命名空间中创建的 configmapssecret。 若要维护干净的群集,可以删除这些资源。 使用以下 命令查找 kubectl get 资源:

    kubectl get deployments --namespace kube-system
    kubectl get services --namespace kube-system
    kubectl get configmaps --namespace kube-system
    kubectl get secrets --namespace kube-system
    

    以下示例输出显示了应当删除的 configmap:

    NAMESPACE     NAME                                                       DATA   AGE
    kube-system   addon-http-application-routing-nginx-configuration         0      9m7s
    kube-system   addon-http-application-routing-tcp-services                0      9m7s
    kube-system   addon-http-application-routing-udp-services                0      9m7s
    
  2. 使用 kubectl delete 命令删除剩余的资源。 确保指定资源类型、资源名称和命名空间。 以下示例删除上面的 configmap 之一:

    kubectl delete configmaps addon-http-application-routing-nginx-configuration --namespace kube-system
    
  3. 针对群集中剩余的所有 addon-http-application-routing 资源重复前面的 kubectl delete 步骤。