注意
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 启用应用程序路由加载项时,它会在 AKS 群集中创建、配置和管理入口控制器。
本文介绍如何启用托管 NGINX 入口控制器,并配置入口对象以将流量路由到 AKS 群集中的应用程序。
具有 NGINX 功能的应用程序路由加载项
由 NGINX 提供的应用程序路由插件提供以下功能:
- 基于 Kubernetes NGINX 入口控制器,轻松配置托管的 NGINX 入口控制器。
- 与用于公共和专用区域管理的 Azure DNS 集成。
- SSL 终止,证书存储在Azure 密钥保管库中。
有关其他配置,请参阅:
Important
从 2027 年 9 月 30 日开始,Azure Kubernetes 服务(AKS)不再支持开放服务网格(OSM)加载项。 上游 Open Service Mesh 项目 已停用。
如果群集使用 OSM 加载项,请在支持结束日期之前迁移到 Istio 加载项。 此停用通知仅适用于托管 OSM 加载项,并且不适用于开源或自助服务网格安装。 有关迁移步骤,请参阅 OSM 加载项到 Istio 加载项的迁移指南。 若要随时了解 AKS 公告和更新,请按照 AKS 发行说明进行操作。
先决条件
- 一个 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。如果代码片段注解值与以下任一被阻止的值匹配,则不会配置 Ingress:
已阻止的值 Effect load_moduleIngress 尚未配置。 lua_packageIngress 未配置。 _by_luaIngress 尚未配置。 location未配置 Ingress。 root未配置 Ingress。 proxy_passIngress 未配置。 serviceaccount未配置 Ingress。 {Ingress 未配置。 }尚未配置 Ingress。 'Ingress 尚未配置。 该加载项不官方支持将非 Azure 托管的边车容器(例如自定义遥测、日志记录或安全代理)注入到由其管理的 ingress-nginx 代理 Pod 中。 如果你选择将自定义 sidecar 容器注入受管代理 Pod,Microsoft 对于你遇到的任何问题仅提供尽力而为的支持。
使用 Azure CLI 启用应用程序路由加载项
在新群集上启用
若要在新群集上启用应用程序路由,请使用 az aks create 命令,指定 --enable-app-routing 标志。
az aks create \
--resource-group <resource-group-name> \
--name <cluster-name> \
--location <location> \
--enable-app-routing \
--generate-ssh-keys
在现有群集上启用
若要在现有群集上启用应用程序路由,请使用 az aks approuting enable 命令。
az aks approuting enable --resource-group <resource-group-name> --name <cluster-name>
连接到 AKS 群集
若要从本地计算机连接到 Kubernetes 群集,请使用 Kubernetes 命令行客户端 kubectl。 可以使用 az aks install-cli 命令在本地安装它。 如果使用 Azure Cloud Shell,则已安装 kubectl。
使用 kubectl 命令将 az aks get-credentials 配置为连接到你的 Kubernetes 群集。
az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>
部署应用程序
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
此清单将创建 rabbitmq、order-service、product-service 和 store-front Deployment 及其相应的 Service。
store-front 服务暴露端口 80,Ingress 会在下一节中将流量路由到该端口。
创建 Ingress 对象
启用应用程序路由加载项时,它会创建一个名为 webapprouting.kubernetes.azure.com 的入口类。 在 Ingress 对象中指定此 Ingress 类,以使用由该附加组件管理的 NGINX 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 Store 是否运行正常。 以下命令检索负载均衡器分配给命名空间中的nginx托管 NGINX 入口控制器app-routing-system服务的外部 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 <cluster-name> --resource-group <resource-group-name>
注意事项
为避免在禁用应用程序路由加载项时可能会中断流向群集的流量,某些 Kubernetes 资源(包括 configMap、机密和运行控制器的部署)将保留在群集上。 这些资源位于 app-routing-system 命名空间中。 如果不再需要这些资源,则可以通过使用 kubectl delete ns app-routing-system 删除该命名空间来删除这些资源。
相关内容
- 启用 应用程序路由网关 API 实现 ,以使用 Kubernetes 网关 API 管理入口流量。
- 配置自定义入口配置 显示如何创建高级入口配置。 使用Azure DNS配置自定义域来管理 DNS 区域并设置安全入口。