Azure Kubernetes 服务 (AKS) 中的 Ingress

AKS 中的 Ingress 是一种 Kubernetes 资源,用于管理群集内服务的外部类 HTTP 流量访问。 AKS 入口可以提供负载均衡、SSL 终止和基于名称的虚拟托管等服务。 有关 Kubernetes 入口的详细信息,请参阅 Kubernetes 入口文档

入口控制器

管理应用流量时,Ingress 控制器通过在第 7 层运行提供高级功能。 它们可以基于入站 URL 将 HTTP 流量路由到不同的应用程序,从而支持更智能和灵活的流量分配规则。 例如,入口控制器可以根据 URL 路径将流量定向到不同的微服务,从而提高服务的效率和组织。

另一方面,创建 LoadBalancer 类型的服务会设置基础 Azure 负载均衡器资源。 该负载均衡器在第 4 层工作,将流量分发到您的服务中的 Pod 上的指定端口。 但第 4 层服务不了解实际的应用程序,无法实现这些类型的复杂传递规则。

了解这两种方法之间的区别将有助于选择合适的工具来满足流量管理需求。

显示 AKS 群集中入口流量的示意图

比较入口选项

下表列出了不同入口控制器选项之间的功能差异:

功能 应用路由插件 适用于容器的应用程序网关 Azure 服务网格/基于 Istio 的服务网格
入口/网关控制器 NGINX 入口控制器 适用于容器的 Azure 应用程序网关 Istio 入口网关
API 入口 API 入口 API 和网关 API Istio 入口 API
托管 群集中 Azure 托管 群集中
缩放 自动缩放 自动缩放 自动缩放
负载均衡 内部/外部 外部 内部/外部
SSL 终止 群集中 是:卸载和 E2E SSL 群集中
mTLS 不适用 是:前端和后端 不适用
静态 IP 地址 不适用 FQDN 不适用
Azure Key Vault 存储的 SSL 证书 不适用
用于 DNS 区域管理的 Azure DNS 集成 不适用

下表列出了可以使用每个入口控制器的不同方案:

入口选项 何时使用
托管 NGINX - 应用程序路由加载项 • 群集中托管、可自定义且可缩放的 NGINX 入口控制器。
• 基本负载均衡和路由功能。
• 内部和外部负载均衡器配置。
• 静态 IP 地址配置。
• 与 Azure Key Vault 集成,以便进行证书管理。
• 与 Azure DNS 区域集成,以便进行公共和专用 DNS 管理。
• 支持 Ingress API。
适用于容器的应用程序网关 • Azure 托管入口网关。
• 由控制器管理的灵活部署策略,或自带适用于容器的应用程序网关。
• 高级流量管理功能,例如自动重试、可用性区域复原、对后端目标进行相互身份验证 (mTLS)、流量拆分/加权轮循机制和自动缩放。
• 与 Azure Key Vault 集成,以便进行证书管理。
• 与 Azure DNS 区域集成,以便进行公共和专用 DNS 管理。
• 支持入口和网关 API。
Istio 入口网关 • 根据 Envoy,在将 Istio 用于服务网格时。
• 高级流量管理功能,例如速率限制和断路。
• 对 mTLS 的支持

注意

用于Istio 入口流量的网关 API 尚不支持 Istio 插件,但目前正在积极开发中。

创建入口资源

建议使用应用程序路由加载项在 AKS 中配置入口控制器。 应用程序路由加载项是 Azure Kubernetes 服务 (AKS) 的完全托管入口控制器,提供以下功能:

  • 轻松配置基于 Kubernetes NGINX 入口控制器的托管 NGINX 入口控制器。

  • 与 Azure DNS 集成,以便进行公共区域和专用区域管理。

  • SSL 终止,证书存储在 Azure Key Vault 中。

有关应用程序路由加载项的更多信息,请参阅应用程序路由加载项托管的 NGINX 入口

客户端源 IP 地址保留

可配置入口控制器,以便在对 AKS 群集中的容器发出请求时保留客户端源 IP。 当入口控制器将客户端的请求路由到 AKS 群集中的容器时,该请求的原始源 IP 不可用于目标容器。 如果启用客户端源 IP 保留,则可以在请求标头中的 X-Forwarded-For 下使用客户端的源 IP。

如果在您的入口控制器上使用客户端源 IP 保留,则无法使用 TLS 传输。 其他服务,如 LoadBalancer 类型,可以使用客户端源 IP 保留和 TLS 透传功能。

若要详细了解客户端源 IP 保留,请参阅如何将客户端源 IP 保留用于 AKS 中的 LoadBalancer 服务