ALB扩展版的动态转发能力可从请求中实时提取目标地址并直接转发,无需预先注册后端,适用于AI Agent Sanbox沙箱调度、海量动态后端入口网关等后端地址动态变化的场景;并通过IP地址段类型服务器组约束目标范围,防止流量转发至未授权后端。
适用场景
动态转发适用于后端地址随请求动态变化、后端实例数量庞大的场景,典型如下:
-
AI Agent沙箱流量调度:AI Agent推理、代码执行等场景运行在大量按需拉起的沙箱实例(如各种Sandbox产品的Pod)上,上层调度器将目标沙箱实例的IP和端口写入请求头,ALB提取后直接转发,无需预先注册频繁变化的沙箱后端。
-
小程序与H5游戏单域名转发:小程序等平台通常仅允许配置一个合法域名,可在单一域名下通过URL参数(如
?ip=1.1.X.X&port=1111)将请求路由到不同的游戏服务器实例,替代自建Nginx方案。 -
海量动态后端:当后端实例数量庞大时,动态转发按请求实时寻址,无需逐一注册后端,仅需配置允许转发的IP地址段和端口范围,单个实例即可承载海量动态后端,避免因服务器组配额限制而拆分为多个实例。
方案架构
客户端请求到达扩展版ALB实例后,转发规则将流量交给IP地址段类型服务器组所关联的动态转发组件。组件依次经过端点提取、目标范围校验、动态转发三个阶段,确定真实的目标IP和端口,命中允许的目标范围则直接转发到该地址,未命中则返回403。
-
扩展版ALB实例:提供负载均衡和流量转发能力。
-
IP地址段类型服务器组:以IP地址段和端口范围声明动态转发允许命中的目标范围,必须关联包含动态转发组件的服务扩展。
-
服务扩展:承载动态转发组件,绑定到IP地址段类型服务器组生效。
-
动态转发组件:从请求的查询参数或请求头中提取目标主机和端口,完成目标范围校验后将请求转发给后端。
适用范围
-
用户已获取ALB扩展版公测资格。
-
用户已在华东2(上海)地域创建一个专有网络
VPC1,分别在可用区B和可用区F创建交换机VSW1和VSW2。
操作步骤
1. 创建扩展版 ALB 实例
-
登录ALB控制台,选择华东2(上海)地域,单击创建应用型负载均衡。
-
在购买页完成以下配置,单击立即创建。
-
地域:选择华东2(上海)。
-
实例网络类型:选择公网。
-
VPC和可用区:选择
VPC1,勾选上海 可用区B和上海 可用区F后选择VSW1和VSW2,并自动分配公网IP。 -
协议版本:选择IPv4。
-
功能版本(实例费):选择扩展版。
-
-
在确认订单页面确认实例配置详情,单击立即开通。
2. 创建服务扩展并添加动态转发组件
-
在服务扩展控制台,单击创建服务扩展。在服务扩展配置区域,输入服务扩展名称如
ext-dyn-fwd-plugin。 -
扩展类型默认选择插件,组件名称下拉选择动态转发。在快捷配置(点击自动填充当前规则参数)下方单击常用Header使用系统预置模板,然后单击创建。
-
提取来源:默认值Header,即从HTTP请求头中提取目标IP和端口。
-
提取模式:默认值分离模式,目标IP和端口位于两个不同字段,需分别指定。
-
目标Host来源:默认值
X-Target-Host,动态转发组件从该请求头读取目标IP。 -
目标Port来源:默认值
X-Target-Port,动态转发组件从该请求头读取目标端口。 -
默认端口:默认值
80,未从请求中提取到端口时的兜底端口。
-
动态转发组件不支持与其他组件添加到同一个服务扩展。
3. 准备后端服务
-
参考以下配置,创建一台ECS。ECS所在安全组需放通
VPC1的网段IP。-
地域:选择华东2(上海)。
-
网络及可用区:选择
VPC1和VSW1,并勾选指定主网卡主私网IP地址。本文中VSW1对应IP地址段172.16.10.0/24,指定主网卡主私网IP地址为172.16.10.100。 -
镜像:选择
Alibaba Cloud Linux 3.2104 LTS 64位。
-
-
在ECS控制台找到该实例,依次单击操作列的
> 网络和安全组 > 管理辅助私网 IP。单击增加,填入172.16.10.101后单击确定。参考操作系统识别辅助私网IP地址配置使ECS识别该IP。连接ECS并输入ip a,可看到ECS已识别辅助私网地址。2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:16:3e:xx:xx:xx brd ff:ff:ff:ff:ff:ff altname enp3s0 inet 172.16.10.100/24 brd 172.16.10.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet 172.16.10.101/24 brd 172.16.10.255 scope global secondary noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::xxxx:xxff:fexx:xxxx/64 scope link valid_lft forever preferred_lft forever -
在后端ECS上安装nginx并部署echo回显服务,监听80和81端口,对任意请求返回其实际到达的目标
IP:Port,用于验证动态转发的落点。# 1. 安装 nginx sudo dnf install -y nginx # 2. 写入 echo 回显配置 sudo tee /etc/nginx/conf.d/echo.conf >/dev/null <<'EOF' server { listen 80 default_server; listen 81 default_server; server_name _; location / { default_type text/plain; return 200 "served: $server_addr:$server_port\n"; } } EOF # 3. 去掉自带默认站点的 default_server 标记,避免冲突 sudo sed -i 's/ default_server//g' /etc/nginx/nginx.conf # 4. 校验配置、设置开机自启并启动 sudo nginx -t sudo systemctl enable nginx sudo systemctl restart nginx # 5. 本机自测 curl 172.16.10.100:80 curl 172.16.10.100:81 curl 172.16.10.101:80 curl 172.16.10.101:81
4. 创建 IP 地址段类型服务器组
动态转发根据请求内容决定转发目标,若不加约束可能被构造请求诱导转发到非预期地址,形成SSRF风险。配置IP地址段服务器组作为强制安全边界:仅当目标IP与端口命中放行条目才转发,未命中一律返回403。
-
在服务器组控制台,单击创建服务器组。
-
完成以下配置,单击创建。
-
服务器组类型:选择IP地址段。
-
服务器组名称:输入自定义名称如
sgp-dyn-fwd。 -
后端协议:默认选择HTTP。
-
使用已有服务扩展并勾选步骤1中创建的服务扩展
ext-dyn-fwd-plugin。
-
-
待服务器组创建成功,单击添加后端服务器。在添加IP地址段窗口,输入IP地址段
172.16.10.0/24,端口范围80-81,单击确定。
5. 创建监听
-
在ALB控制台,单击目标实例ID进入实例详情页。在监听页签单击创建监听。
-
在配置监听步骤,选择监听协议为HTTPS,监听端口填写
443,完成后单击下一步。 -
在配置SSL证书步骤,选择与自定义域名匹配的服务器证书,单击下一步。
-
在选择服务器组步骤,依次选择IP地址段类型和服务器组
sgp-dyn-fwd,完成后单击下一步。此处使用默认转发规则将流量转发至IP地址段服务器组。如需叠加身份鉴权、限速等能力,可在监听下另建转发规则并关联对应服务扩展。
-
在配置审核步骤,确认配置并单击提交。
6. 设置域名解析
将自有域名通过CNAME解析指向ALB实例的DNS名称,客户端通过自有域名访问ALB。
本文以阿里云云解析DNS为例,对于非阿里云注册域名,需先将域名添加到云解析控制台。
7. 验证测试
请求需满足以下条件才能被正常响应:
-
动态转发组件能够从请求中提取出目标IP和端口(未显式携带端口时以默认端口兜底)。
-
该IP和端口的组合落在IP地址段服务器组的放行范围内。
-
后端服务在上述IP和端口监听并返回响应。
请求携带合法目标地址
转发到主IP地址
curl -v \
-H "X-Target-Host: 172.16.10.100" \
-H "X-Target-Port: 80" \
https://test.example.com/echo
预期响应:HTTP 200,回显served: 172.16.10.100:80。
转发到辅助IP(验证不同IP)
curl -v \
-H "X-Target-Host: 172.16.10.101" \
-H "X-Target-Port: 80" \
https://test.example.com/echo
预期响应:HTTP 200,回显served: 172.16.10.101:80。证明目标IP随请求动态变化。
转发到不同端口(验证不同端口)
curl -v \
-H "X-Target-Host: 172.16.10.100" \
-H "X-Target-Port: 81" \
https://test.example.com/echo
预期响应:HTTP 200,回显served: 172.16.10.100:81。证明目标端口同样随请求动态变化。
不携带端口(验证默认端口兜底)
curl -v \
-H "X-Target-Host: 172.16.10.101" \
https://test.example.com/echo
预期响应:HTTP 200,回显served: 172.16.10.101:80。请求未携带端口,动态转发组件以默认端口80兜底。
请求未携带目标地址
curl -v \
https://test.example.com/echo
预期响应:HTTP 403,回显endpoint not provided。动态转发组件无法从请求中提取目标IP地址。
目标地址或端口未在允许范围内
curl -v \
-H "X-Target-Host: 10.99.99.99" \
-H "X-Target-Port: 80" \
https://test.example.com/echocurl -v \
-H "X-Target-Host: 172.16.10.100" \
-H "X-Target-Port: 12345" \
https://test.example.com/echo
预期响应:HTTP 403,回显endpoint not allowed。提取到的IP地址或端口因未落在服务器组允许范围内被拒绝。
更多信息
计费说明
使用限制
-
动态转发后端协议当前仅支持HTTP。
-
IP地址段类型服务器组不支持添加
22.0.0.0/8、33.0.0.0/8、100.0.0.0/8、127.0.0.0/8等地址段。 -
单个IP地址段类型服务器组默认支持最多200条IP段条目(每条为一个IP段与端口范围的组合)。
ALB扩展版支持的地域
|
区域 |
地域 |
可用区 |
|
中国 |
华北6(乌兰察布) |
可用区A、可用区B、可用区C |
|
华东1(杭州) |
可用区J、可用区K |
|
|
华北2(北京) |
可用区I、可用区K、可用区L |
|
|
华东2(上海) |
可用区B、可用区F |
|
|
中国香港 |
可用区B、可用区C、可用区D |
|
|
亚太 |
新加坡 |
可用区A、可用区B、可用区C |
|
日本(东京) |
可用区B、可用区C、可用区E |
|
|
马来西亚(吉隆坡) |
可用区A、可用区B、可用区C |
|
|
欧洲与美洲 |
德国(法兰克福) |
可用区A、可用区B |
|
美国(硅谷) |
可用区A、可用区B |
|
|
中东 |
阿联酋(迪拜) |
可用区A、可用区B |
使用建议
-
合理排序多条目标地址提取配置:配置多条目标地址提取配置时,系统按配置序号从小到大依次匹配,首条命中即生效。建议将命中率最高、最严格的配置排在前面。
-
收敛允许的目标范围:在保障业务可用的前提下,尽量收敛IP地址段与端口范围,仅放行业务实际需要的后端,避免配置过宽的范围。
-
配合转发规则灵活使用:IP地址段类型服务器组可作为转发规则的转发目标,与转发条件、服务扩展、转发动作灵活组合,满足复杂流量编排需求。
常见问题
请求全部403,响应endpoint not allowed
确认IP地址段服务器组已正确配置IP和端口范围,且请求携带的目标IP和端口落在该范围中。
请求全部403,响应体endpoint not provided
检查请求是否包含X-Target-Host、X-Target-Port等字段,可查看ALB访问日志确认。