在 AKS 上的 Kubernetes Gateway API 通过 Azure Application Gateway 暴露

发布: (2026年1月10日 GMT+8 14:53)
4 分钟阅读
原文: Dev.to

Source: Dev.to

介绍

我们需要通过 Azure Application Gateway 将多租户 AKS 集群中的 Kubernetes Gateway API 暴露出来。最初的集成失败了:健康探针显示不健康,后端也显示不健康,流量无法通过。本文档记录了一个可行的解决方案,并为面临相同挑战的团队提供参考架构。完整的解决方案可在 GitHub 上获取。

概念验证概述

该概念验证演示了如何在 AKS 上部署 Kubernetes Gateway API,并通过 Azure Application Gateway 在多租户环境中进行暴露。集群中部署了两个示例应用(app1app2),每个应用都通过各自的 HTTPRoute 暴露,同时共享同一个 Istio Gateway 资源。

示例应用

组件描述
sample-app-1Nginx pod 在路径 /app1 上返回 “Hello from App 1”
sample-app-2Nginx pod 在路径 /app2 上返回 “Hello from App 2”
health-responder专用 pod 用于 Application Gateway 健康探针,路径为 /healthz
Istio Gateway实现 K8s Gateway API 的共享 Gateway 资源
HTTPRoutes应用命名空间中的按路径路由规则

每个应用在其命名空间中都有自己的 HTTPRoute,展示了自助式路由模型——应用团队管理路由,同时使用统一的网关基础设施。

注意: 本 POC 保持场景简洁,以聚焦 Azure 集成挑战。app1app2 模拟运行在两个不同租户中的应用。后续文章将介绍使用 Capsule 和 Gateway API 在 Kubernetes 上实现多租户。

架构组件

组件目的
Azure Application Gateway具有 WAF 和 TLS 终止的公共入口点
Internal Load Balancer将 Application Gateway 连接到 AKS 集群
Istio Gateway实现 Kubernetes Gateway API
HTTPRoutes为租户提供每个命名空间的路由规则
Istio Ambient Mesh在服务之间实现无 sidecar 的 mTLS

实现挑战与解决方案

问题 1:健康探针失败

问题 – Azure Application Gateway 的健康探针返回 404,因为 Istio 的 Envoy 代理没有匹配探针路径的 HTTPRoute

解决方案 – 创建一个显式的 HTTPRoute,匹配健康探针路径并将请求转发到 health‑responder Pod。

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: health-route
  namespace: gateway-health
spec:
  parentRefs:
    - name: shared-gateway
      namespace: istio-ingress
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: /healthz
      backendRefs:
        - name: health-responder
          port: 8080

问题 2:Azure DSR 的 ExternalTrafficPolicy

问题 – Azure 内部负载均衡器以直接服务器返回(DSR)模式运行。使用默认的 externalTrafficPolicy: Cluster 时,kube‑proxy 在跨节点转发流量时会进行 SNAT,破坏 DSR 所需的非对称路由,导致连接超时。

解决方案 – 为 Gateway Service 打补丁,将 externalTrafficPolicy 设置为 Local,确保流量仅路由到接收请求的节点上的 Pod,从而保持 DSR 流程。

kubectl patch svc  -n  \
  -p '{"spec":{"externalTrafficPolicy":"Local"}}'
Back to Blog

相关文章

阅读更多 »

你好,我是新人。

嗨!我又回到 STEM 的领域了。我也喜欢学习能源系统、科学、技术、工程和数学。其中一个项目是…