你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

适用于容器的应用程序网关组件

本文提供了适用于容器的应用程序网关组件的详细说明和要求。 介绍适用于容器的应用程序网关如何接受传入请求并将其路由到后端目标。 有关适用于容器的应用程序网关的一般概述,请参阅什么是适用于容器的应用程序网关

核心组件

  • 适用于容器的应用程序网关资源是部署控制平面的 Azure 父资源。
  • 控制平面负责根据客户意图协调代理配置。
  • 适用于容器的应用程序网关具有两个子资源:关联和前端。
    • 子资源仅专用于其父级适用于容器的应用程序网关,不能由另一个适用于容器的应用程序网关资源引用。

适用于容器的应用程序网关前端

  • 适用于容器的应用程序网关前端资源是适用于容器的应用程序网关父资源的 Azure 子资源。
  • 适用于容器的应用程序网关前端定义了应由给定的适用于容器的应用程序网关接收的入口点客户端流量。
    • 前端不能关联到多个适用于容器的应用程序网关。
    • 每个前端都提供唯一的 FQDN,后者可由客户的 CNAME 记录引用。
    • 当前不支持专用 IP 地址。
  • 单个适用于容器的应用程序网关可支持多个前端。

适用于容器的应用程序网关关联

  • 适用于容器的应用程序网关关联资源是适用于容器的应用程序网关父资源的 Azure 子资源。
  • 适用于容器的应用程序网关关联定义了到虚拟网络的连接点。 关联是关联资源与已委托的 Azure 子网之间的一对一映射。
  • 根据设计,适用于容器的应用程序网关支持多个关联。
    • 目前,当前关联数限制为 1。
  • 在关联创建期间,将预配基础数据平面,并将其连接到所定义的虚拟网络子网中的子网。
  • 每次预配时,每个关联都应假定子网中至少有 256 个地址可用。
    • 每个部署的最小子网掩码为 /24(假设以前未在子网中预配任何资源)。
      • 如果预配了 n 个适用于容器的应用程序网关,假设每个适用于容器的应用程序网关都包含一个关联,并且目的是共享同一子网,那么可用的必需地址应为 n*256。
    • 所有适用于容器的应用程序网关关联资源应该与适用于容器的应用程序网关父资源所在的区域匹配。

适用于容器的应用程序网关 ALB 控制器

  • 适用于容器的应用程序网关 ALB 控制器是一种 Kubernetes 部署,它通过监视 Kubernetes 自定义资源和资源配置(包括但不限于入口、网关和 ApplicationLoadBalancer)来协调适用于容器的应用程序网关的配置和部署。 它使用 ARM/适用于容器的应用程序网关配置 API 来将配置传播到适用于容器的应用程序网关 Azure 部署。
  • ALB 控制器通过 Helm 进行部署/安装。
  • ALB 控制器由两个正在运行的 Pod 组成。
    • alb-controller pod 负责将客户意图协调到适用于容器的应用程序网关负载均衡配置。
    • alb-controller-bootstrap Pod 负责管理 CRD。

Azure/一般概念

专用 IP 地址

  • 专用 IP 地址未显式定义为 Azure 资源管理器资源。 专用 IP 地址将引用给定虚拟网络子网中的特定主机地址。

子网委托

  • Microsoft.ServiceNetworking/trafficControllers 是适用于容器的应用程序网关采用的命名空间,可以委托给虚拟网络的子网。
  • 进行委派时,不会预配适用于容器的应用程序网关资源,也没有到适用于容器的应用程序网关关联资源的独占映射。
  • 任意数量的子网都可以具有与适用于容器的应用程序网关相同的或不同的子网委派。 进行定义后,除了定义的服务外,其他任何资源都可以预配到子网中,除非由服务的实现显式定义。

用户分配的托管标识

  • Azure 资源的托管标识无需在代码中管理凭据。
  • 每个 Azure 负载均衡器控制器都需要用户管理的标识才能更改适用于容器的应用程序网关。
  • “容器配置管理器的 AppGw”是一个内置的 RBAC 角色,支持 ALB 控制器访问和配置适用于容器的应用程序网关资源。

注意

“容器配置管理器的 AppGw”角色具有数据操作权限,而所有者和参与者角色没有这些权限。 有必要委托适当的权限,以防止 ALB 控制器更改适用于容器的应用程序网关时出现问题。

适用于容器的应用程序网关如何接受请求

每个适用于容器的应用程序网关前端都提供所生成的由 Azure 管理的完全限定的域名。 FQDN 可以按原样使用,客户也可选择使用 CNAME 记录屏蔽 FQDN。

在客户端向适用于容器的应用程序网关发送请求之前,客户端将解析指向前端 FQDN 的 CNAME;或者,客户端可以使用 DNS 服务器直接解析适用于容器的应用程序网关提供的 FQDN。

DNS 解析程序将 DNS 记录转换为 IP 地址。

当客户端启动请求时,所指定的 DNS 名称将作为主机头传递到定义的前端上适用于容器的应用程序网关。

一组路由规则会评估应如何将对该主机名的请求发起到所定义的后端目标。

适用于容器的应用程序网关如何路由请求

HTTP/2 请求

适用于容器的应用程序网关完全支持 HTTP/2 协议,用于从客户端到前端的通信。 从适用于容器的应用程序网关到后端目标的通信使用 HTTP/1.1 协议。 HTTP/2 设置始终处于启用状态,无法更改。 如果客户端首选使用 HTTP/1.1 与适用于容器的应用程序网关的前端进行通信,它们可以继续进行相应的协商。

对请求的修改

在从适用于容器的应用程序网关发起到后端目标的请求之前,适用于容器的应用程序网关会为所有请求插入额外 3 个标头:

  • x-forwarded-for
  • x-forwarded-proto
  • x-request-id

x-forwarded-for 是原始请求者的客户端 IP 地址。 如果请求通过代理传入,标头值追加所收到的地址(以逗号分隔)。 例如:1.2.3.4,5.6.7.8;其中 1.2.3.4 是适用于容器的应用程序网关前面的代理的客户端 IP 地址,5.6.7.8 是将流量转发到适用于容器的应用程序网关的代理的地址。

x-forwarded-proto 会从客户端返回适用于容器的应用程序网关接收的协议。 值为 http 或 https。

x-request-id 是适用于容器的应用程序网关针对每个客户端请求生成的唯一 guid,在转发给后端目标的请求中提供。 guid 由 32 个字母数字字符组成,用短划线分隔(例如:aaaa0000-bb11-2222-33cc-444444dddddd)。 此 guid 可用于关联适用于容器的应用程序网关接收且向访问日志中的定义的后端目标发起的请求。

请求超时

在客户端、适用于容器的应用程序网关和后端之间发起和维护请求时,适用于容器的应用程序网关强制实施以下超时。

超时 持续时间 说明
请求超时 60 秒 适用于容器的应用程序网关等待后端目标响应的时间。
HTTP 空闲超时 5 分钟 关闭 HTTP 连接之前的空闲超时。
流空闲超时 5 分钟 关闭 HTTP 连接携带的单个流之前的空闲超时。
上游连接超时 5 秒 建立与后端目标的连接的时间。