你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文提供了适用于容器的应用程序网关组件的详细说明和要求。 其中介绍了用于容器的应用程序网关如何接受传入请求并将其路由到后端目标。 有关适用于容器的应用程序网关的一般概述,请参阅什么是适用于容器的应用程序网关。
核心组件
- 适用于容器的应用程序网关资源是部署控制平面的 Azure 父资源。
- 控制平面根据客户意图协调代理配置。
- 用于容器的应用程序网关有两个子资源:关联和前端。
- 子资源专属于其父容器应用程序网关,不能与其他容器应用程序网关资源共享。
适用于容器的应用程序网关前端
- 适用于容器的应用程序网关前端资源是适用于容器的应用程序网关父资源的 Azure 子资源。
- 用于容器的应用程序网关前端定义了客户端流量进入该容器应用程序网关的入口。
- 不能将前端与多个用于容器的应用程序网关相关联。
- 可以使用每个前端提供的唯一 FQDN 创建 CNAME 记录。
- 当前不支持专用 IP 地址。
- 用于容器的单个应用程序网关可以支持多个前端。
适用于容器的应用程序网关关联
- 适用于容器的应用程序网关关联资源是适用于容器的应用程序网关父资源的 Azure 子资源。
- 适用于容器的应用程序网关关联定义了到虚拟网络的连接点。 关联是一种将关联资源与委托的 Azure 子网之间进行一对一映射的方式。
- 容器应用程序网关的设计旨在支持多个关联。
- 目前,关联数限制为 1。
- 在关联创建期间,将预配基础数据平面,并将其连接到所定义的虚拟网络子网中的子网。
- 每次预配时,每个关联都应假定子网中至少有 256 个地址可用。
- 每个部署所需的最小 /24 子网掩码(假设子网中以前未预配任何资源)。
- 如果计划为共享同一子网的容器资源部署多个应用程序网关,请计算所需的地址 n×256,其中 n 等于容器资源的应用程序网关数。 这假设每个对象包含一个关联。
- 所有适用于容器的应用程序网关关联资源应该与适用于容器的应用程序网关父资源所在的区域匹配。
- 每个部署所需的最小 /24 子网掩码(假设子网中以前未预配任何资源)。
适用于容器的应用程序网关 ALB 控制器
- 适用于容器的应用程序网关 ALB 控制器是一种 Kubernetes 部署,它通过监视 Kubernetes 自定义资源和资源配置(包括但不限于入口、网关和 ApplicationLoadBalancer)来协调适用于容器的应用程序网关的配置和部署。 它使用 ARM 和应用程序网关容器配置 API,将配置传播到 Azure 部署中的应用程序网关容器。
- 使用 Helm 部署或安装 ALB 控制器。
- ALB 控制器由两个正在运行的 Pod 组成。
- alb-controller Pod 协调客户意图,以配置容器负载均衡的应用程序网关。
- alb-controller-bootstrap Pod 管理自定义资源定义(CRD)。
用于容器的应用程序网关安全策略
- 适用于容器的应用程序网关的安全策略定义了安全配置(例如 WAF),以供 ALB 控制器使用。
- 单个用于容器的应用程序网关资源可以引用多个安全策略。
- 目前,提供的唯一安全策略类型是
waf用于 Web 应用程序防火墙功能。 - 安全
waf策略是安全策略资源与 Web 应用程序防火墙策略之间的一对一映射。- 您可以在为容器定义的应用程序网关中,任意数量的安全策略中仅参考一个 Web 应用程序防火墙策略。
Azure/一般概念
专用 IP 地址
- 专用 IP 地址未显式定义为 Azure 资源管理器资源。 专用 IP 地址是指给定虚拟网络子网中的特定主机地址。
子网委派
- Microsoft.ServiceNetworking/trafficControllers 是用于容器的应用程序网关采用的命名空间,你可以将其委托给虚拟网络的子网。
- 委托时,不会为容器资源预配应用程序网关,也没有对容器关联资源的应用程序网关进行独占映射。
- 任意数量的子网都可以具有与适用于容器的应用程序网关相同的或不同的子网委派。 定义后,除非由服务的实现显式定义,否则无法将其他资源预配到子网中。
用户分配的托管标识
- Azure 资源的托管标识无需在代码中管理凭据。
- 需要为每个 Azure 负载均衡器控制器分配用户分配的托管身份,以对用于容器的应用程序网关进行更改。
- “容器配置管理器的 AppGw”是一个内置的 RBAC 角色,支持 ALB 控制器访问和配置适用于容器的应用程序网关资源。
注意
AppGw for Containers Configuration Manager 角色具有所有者和协作者角色所没有的数据操作权限。 委托适当的权限以防止 ALB 控制器对容器服务的应用程序网关进行更改时出现问题至关重要。
适用于容器的应用程序网关如何接受请求
每个容器用的应用程序网关前端都会提供一个由 Azure 管理的生成的完全合格域名。 可以使用 FQDN as-is,或使用 CNAME 记录对其进行掩码。
在客户端向用于容器的应用程序网关发送请求之前,客户端会解析指向前端 FQDN 的 CNAME,或者客户端使用 DNS 服务器直接解析应用程序网关提供的 FQDN。
DNS 解析程序将 DNS 记录转换为 IP 地址。
当客户端启动请求时,所指定的 DNS 名称将作为主机头传递到定义的前端上适用于容器的应用程序网关。
一组路由规则会评估应如何将对该主机名的请求发起到所定义的后端目标。
适用于容器的应用程序网关如何路由请求
HTTP/2 请求
用于容器的应用程序网关支持 HTTP/2 和 HTTP/1.1 协议,用于客户端与前端之间的通信。 HTTP/2 设置始终处于启用状态,无法更改。 如果客户端希望使用 HTTP/1.1 与用于容器的应用程序网关前端的通信,他们可以继续进行相应的协商。
容器的应用程序网关与后端目标之间的通信始终通过 HTTP/1.1 进行,但使用 HTTP/2 的 gRPC 除外。
对请求的修改
在向后端目标发起请求之前,用于容器的应用程序网关会向所有请求插入三个额外的标头:
- 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) 来将应用程序网关为容器接收并发起的请求与访问日志中定义的后端目标相关联。
请求超时
容器应用程序网关在启动和维护客户端、容器应用程序网关以及后端之间请求时,强制实施以下超时。
| 超时 | Duration | 说明 |
|---|---|---|
| 请求超时 | 60 秒 | 用于容器的应用程序网关等待后端目标响应的时间。 |
| HTTP 空闲超时 | 5 分钟 | 在关闭 HTTP 连接之前,空闲超时。 |
| 流空闲超时 | 5 分钟 | 在关闭 HTTP 连接中单个流之前的空闲超时时间。 |
| 上游连接超时 | 5 秒 | 建立后端目标连接所需的时间。 |
注意
无论数据是主动流式传输还是请求处于空闲状态,请求超时都会严格要求在规定时间内完成。 例如,如果你正在提供大型文件下载,并且由于大小或传输速率缓慢,预计传输需要超过 60 秒,请考虑增加请求超时值或将其设置为 0。