注意
Kubernetes SIG Network和安全响应委员会宣布即将停用Ingress NGINX项目, 维护将于2026年3月结束。 目前,使用 NGINX 的应用程序路由加载项的 AKS 群集无需立即执行任何操作。 Microsoft将为应用程序路由加载项的NGINX Ingress资源的重要安全补丁提供正式支持,支持截止至2026年11月。
AKS 正在迁移到
- 应用程序路由扩展用户:生产工作负荷在 2026 年 11 月之前仍受全面支持。 迁移到 应用程序路由网关 API 实现,以获得基于网关 API 的入口流量管理体验。
-
OSS NGINX 用户 有多个选项:
- 迁移到 使用 NGINX 的应用程序路由加载项 ,在规划长期网关 API 迁移的同时,从官方支持(截至2026年11月)中受益。
- 迁移到 应用程序路由网关 API 实现,以获得基于网关 API 的入口流量管理体验。
- 服务网格用户:如果计划采用服务网格,请考虑 基于 Istio 的服务网格加载项。 今天使用 Istio 入口,计划在正式发布为 GA 时迁移到 Istio 网关 API 支持。
将超文本传输协议(HTTP)和安全(HTTPS)流量路由到Azure Kubernetes 服务 (AKS)群集上运行的应用程序的一种方法是使用 Kubernetes 入口对象。 创建使用应用程序路由加载项 的 NGINX Ingress 类的 Ingress 对象时,加载项会在 AKS 群集中创建、配置和管理一个或多个 Ingress 控制器。
本文介绍如何在 AKS 群集中部署和配置基本 Ingress 控制器。
具有 NGINX 功能的应用程序路由加载项
由 NGINX 提供的应用程序路由插件提供以下功能:
- 基于 Kubernetes NGINX 入口控制器,轻松配置托管的 NGINX 入口控制器。
- 与 Azure DNS 集成,以便进行公共和专用区域管理
- SSL 终止,证书存储在Azure 密钥保管库中。
有关其他配置,请参阅:
随着云原生计算基础 (CNCF) 停用 Open Service Mesh (OSM),不建议将应用程序路由附加产品与 OSM 一起使用。
先决条件
- 一个 Azure 订阅。 如果没有Azure订阅,可以创建 Trial。
- Azure CLI 2.54.0 或更高版本安装并配置。 运行
az --version即可查找版本。 如果需要安装或升级,请参阅 Install Azure CLI。
限制
- 应用程序路由加载项最多支持五个Azure DNS区域。
- 应用程序路由加载项只能在具有托管标识的 AKS 群集上启用。
- 与加载项集成的所有全局Azure DNS区域都必须位于同一资源组中。
- 与加载项集成的所有专用Azure DNS区域都必须位于同一资源组中。
- 不支持在命名空间
ConfigMap中编辑 ingress-nginxapp-routing-system。 - 以下代码片段注释被阻止,并将阻止配置入口:
load_module、lua_package、_by_lua、location、root、proxy_pass、serviceaccount、{、}、'。 - 官方不支持将非 Azure 托管的边车容器(例如自定义遥测、日志记录或安全代理)注入到由该加载项管理的 ingress-nginx 代理 Pod 中。 如果你选择将自定义 sidecar 容器注入受管代理 Pod,Microsoft 对于你遇到的任何问题仅提供尽力而为的支持。
使用 Azure CLI 启用应用程序路由
在新群集上启用
若要在新群集上启用应用程序路由,请使用 az aks create 命令,指定 --enable-app-routing 标志。
az aks create \
--resource-group <ResourceGroupName> \
--name <ClusterName> \
--location <Location> \
--enable-app-routing \
--generate-ssh-keys
在现有群集上启用
若要在现有群集上启用应用程序路由,请使用 az aks approuting enable 命令。
az aks approuting enable --resource-group <ResourceGroupName> --name <ClusterName>
连接到 AKS 群集
若要从本地计算机连接到 Kubernetes 群集,请使用 kubectl(Kubernetes 命令行客户端)。 可以使用 az aks install-cli 命令在本地安装它。 如果使用 Azure Cloud Shell,则已安装 kubectl。
配置 kubectl,以使用 az aks get-credentials 命令连接到 Kubernetes 群集。
az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>
部署应用程序
应用程序路由附加产品使用 Kubernetes Ingress 对象的注释来创建适当的资源。
创建一个名为
aks-store的应用程序命名空间,然后使用kubectl create namespace命令来运行示例 Pod。kubectl create namespace aks-store使用以下 YAML 清单文件部署 AKS 存储应用程序:
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/sample-manifests/docs/app-routing/aks-store-deployments-and-services.yaml -n aks-store
此清单将为 AKS 商店应用程序创建必要的部署和服务。
创建 Ingress 对象
应用程序路由加载项在群集上创建一个名为 webapprouting.kubernetes.azure.com 的 Ingress 类。 使用此类创建 Ingress 对象时,会激活插件。
将以下 YAML 清单复制到名为 ingress.yaml 的新文件中,并将该文件保存到本地计算机。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: store-front namespace: aks-store spec: ingressClassName: webapprouting.kubernetes.azure.com rules: - http: paths: - backend: service: name: store-front port: number: 80 path: / pathType: Prefix使用
kubectl apply命令创建入口资源。kubectl apply -f ingress.yaml -n aks-store以下示例输出显示了创建的资源:
ingress.networking.k8s.io/store-front created
验证是否已创建托管 Ingress
可以使用 kubectl get ingress 命令验证是否已创建托管的 Ingress。
kubectl get ingress -n aks-store
以下示例输出显示了托管的 Ingress 已被创建:
NAME CLASS HOSTS ADDRESS PORTS AGE
store-front webapprouting.kubernetes.azure.com * 51.8.10.109 80 110s
你可以通过将浏览器指向 Ingress 控制器的公共 IP 地址来验证 AKS 商店是否正常工作。 使用 kubectl 查找 IP 地址:
kubectl get service -n app-routing-system nginx -o jsonpath="{.status.loadBalancer.ingress[0].ip}"
删除应用程序路由加载项
若要删除关联的命名空间,请使用 kubectl delete namespace 命令。
kubectl delete namespace aks-store
若要从群集中删除应用程序路由加载项,请使用 az aks approuting disable 命令。
az aks approuting disable --name <ClusterName> --resource-group <ResourceGroupName>
注意事项
为了避免当应用程序路由加载项被禁用时可能会中断流向群集的流量,某些 Kubernetes 资源(包括 configMaps、机密以及运行控制器的部署)将保留在群集上。 这些资源位于 app-routing-system 命名空间中。 如果不再需要这些资源,则可以通过使用 kubectl delete ns app-routing-system 删除该命名空间来删除这些资源。
后续步骤
启用 应用程序路由网关 API 实现 ,以使用 Kubernetes 网关 API 管理入口流量。
配置自定义入口配置演示如何创建高级入口配置和使用 Azure DNS 配置自定义域来管理 DNS 区域并设置安全入口。