通过NAT网关SNAT规则实现独享型ELB将流量送至公网IP地址后端服务器
应用场景
在华为云组网场景中,当您需要使用弹性负载均衡(ELB)将客户端请求经公网转发至后端服务器时,可采用独享型ELB + NAT网关(SNAT)的组合方案,该方案通过ELB的IP类型后端与NAT网关的SNAT规则实现ELB将流量通过公网IP传输到后端服务器。
典型场景
- 后端服务器位于云下IDC(Internet Data Center),需要通过公网与ELB通信
- 后端服务器部署在其它VPC或其它云平台,需经公网可达
- 需要利用公网链路实现跨地域/跨云的负载均衡流量分发
流量链路
客户端 → ELB → SNAT → 公网IP → 目的服务器
方案架构
架构说明
本实践方案在同一个VPC下创建独享型ELB实例和NAT网关,利用NAT网关的SNAT功能将ELB转发流量经公网IP到达后端目的服务器。
| 组件 | 说明 |
|---|---|
| 独享型ELB(ELB-Test) | 在VPC-Test中创建,开启“IP类型后端”开关,绑定EIP对外提供服务 |
| NAT网关(NAT-Test) | 在VPC-Test中创建,开启SNAT功能,为VPC内子网提供SNAT转换能力 |
| SNAT+弹性公网IP | NAT网关绑定的EIP,用于SNAT源地址转换,将私网流量转换为公网流量 |
| 后端目的服务器 | 位于公网可达位置的服务器,通过公网IP接收ELB转发的请求 |
| 客户端 | 通过ELB的EIP访问服务 |
- 客户端发起请求,访问ELB绑定的弹性公网IP(ELB-EIP)。
- ELB接收请求,根据监听器规则和后端服务器组配置,将请求转发至IP类型后端(即后端服务器的公网IP)。
- ELB转发的流量经过VPC内部路由,命中NAT网关的SNAT规则。
- NAT网关(SNAT)将源IP从ELB的私网IP转换为NAT网关绑定的SNAT-EIP。
- 转换后的流量通过公网到达后端目的服务器的公网IP。
- 后端服务器处理请求并沿原路返回响应。
约束与限制
- 由于IP类型后端功能仅独享型ELB支持,所以本方案仅适用独享型负载均衡。
- 创建ELB时必须开启IP类型后端开关,创建后不可修改。
- ELB的后端子网必须被NAT网关SNAT规则覆盖,否则流量不会经过SNAT。
- 后端服务器安全组需放通来自SNAT-EIP的入方向访问。
- 用户需根据业务流量选择合适的NAT网关规格,避免规格不足导致丢包。
- IP类型后端的健康检查流量也会经过SNAT,需确保健康检查路径可达。
资源规划说明
| 资源 | 数量 | 说明 |
| 虚拟私有云和子网 | 1个VPC + 2个子网 |
|
| 独享型ELB | 1个 | 开启“IP类型后端”开关,所属VPC为VPC-Test,前端子网为subnet-frontend,后端子网为subnet-backend。 注意: 建议在本方案中不要将ELB的后端子网与其他业务共用,否则将导致其他业务流量转发至公网IP地址。 |
| NAT网关 | 1个 | 所属VPC为VPC-Test,开启SNAT功能。 |
| 弹性公网IP | 3个 |
|
| 弹性云服务器 | 1台 | ECS-client,用于模拟客户端访问。 |
| 后端目的服务器 | 1台 | 位于公网可达位置,部署业务服务(如Nginx)。 |
准备工作
在开始配置之前,请确保完成以下准备工作:
- 创建虚拟私有云和子网:创建VPC-Test以及子网subnet-frontend、subnet-backend。具体操作请参考创建虚拟私有云和子网。
- 购买客户端ECS:购买一台ECS用作访问客户端ECS-client并绑定EIP。具体操作请参考快速购买和使用Linux ECS。
- 后端服务器部署服务:在公网可达的后端目的服务器上部署业务服务(如Nginx),确保服务正常运行并监听相应端口。
配置步骤
- 创建NAT网关并配置SNAT
- 进入购买公网NAT网关页面。
- 根据界面提示配置相关参数。
- 单击“立即购买”,在“规格确认”页面,您可以再次核对公网NAT网关信息。
- 确认无误后,单击“提交”。
- 单击已购买的NAT网关名称,进入详情页。
- 选择“SNAT规则”页签,单击“添加SNAT规则”。
- 单击“确定”,完成SNAT规则配置。
添加SNAT规则后,subnet-backend子网内的资源访问公网时,源IP将被转换为SNAT-EIP。
- 创建独享型ELB实例并开启IP类型后端
- 进入购买弹性负载均衡页面。
- 根据界面提示配置相关参数。 关键参数配置如下:
参数
示例
说明
实例类型
独享型
请选择独享型,IP类型后端仅独享型支持。
名称
ELB-Test
ELB实例名称。
所属VPC
VPC-Test
与NAT网关相同的VPC。
前端子网
subnet-frontend
ELB接收客户端请求的子网。
后端子网
subnet-backend
ELB转发流量的子网,需与NAT网关SNAT规则匹配。
IP类型后端
开启
必须开启,支持添加IP类型后端服务器。
网络类型
IPv4 私网
网络类型选择IPv4 私网,同时为ELB绑定弹性公网IP实现公网访问。
弹性公网IP
ELB-EIP
新购或使用已有EIP。
- IP类型后端开关在ELB创建后不可修改,创建时必须开启。
- ELB的后端子网必须与NAT网关SNAT规则覆盖的子网一致,确保ELB转发流量能命中SNAT规则。
- 单击“立即购买”,完成ELB实例的创建。
- 创建后端服务器组并添加IP类型后端
- 进入后端服务器组列表页面。
- 单击页面右上角“创建后端服务器组”按钮。
- 配置后端分配策略。
- 单击“下一步”,添加后端服务器并配置健康检查。
- 切换到“IP类型后端”页签,单击“添加”。
- 在添加IP类型后端页面配置相关参数。
参数
示例
说明
IP类型后端IP
x.x.x.x
填写后端目的服务器的公网IP地址,ELB将根据该IP地址转发流量。
业务端口
80
后端服务器业务监听端口。
权重
1
后端服务器权重,默认1。
- 单击“确定”,完成IP类型后端的添加。
- 保持健康检查开启,其余健康检查参数保持默认。
- 单击“下一步”,确认配置后单击“立即创建”。
- 添加监听器并选择后端服务器组
- 进入弹性负载均衡列表页面。
- 在目标ELB实例的操作列,单击“添加监听器”。
- 单击“下一步:配置后端分配策略”。
- 后端服务器组选择“使用已有”,选择3创建的后端服务器组server_group。
- 单击“下一步:确认配置”。
- 确认配置无误后,单击“提交”。
- (可选)配置安全组和网络ACL
根据业务需要,确保以下网络访问策略已正确配置:
方向
源/目的
协议
端口
说明
入方向
0.0.0.0/0
TCP
80
ELB允许客户端请求接入(安全组/网络ACL)。
出方向
0.0.0.0/0
TCP
80
ELB允许向后端服务器转发请求。
后端服务器入方向
SNAT-EIP
TCP
80
后端服务器允许来自SNAT-EIP的请求。
由于ELB转发流量经NAT网关SNAT转换后,后端服务器看到的源IP为SNAT-EIP,因此后端服务器的安全组需放通来自SNAT-EIP的访问。
配置验证
常见问题
- 客户端访问ELB无响应
- 检查ELB监听器配置是否正确
- 检查ELB-EIP是否绑定成功
- 检查后端服务器组中是否已添加IP类型后端
- ELB健康检查异常
- 检查后端服务器是否正常运行并监听对应端口
- 检查后端服务器安全组是否放通了来自SNAT-EIP的访问
- 检查健康检查配置的协议和端口是否与后端业务一致
- 后端服务器收不到请求
- 确认NAT网关SNAT规则已正确配置,且覆盖ELB的后端子网
- 确认NAT网关状态为“运行中”
- 在后端服务器上抓包确认是否有来自SNAT-EIP的请求
- 请求响应延迟较大
- 公网链路本身存在一定延迟,对比私网直连场景评估
- 检查NAT网关规格是否满足流量需求
- 检查后端服务器负载是否过高