# 通过弹性负载均衡ELB访问在线服务
#### 背景说明
弹性负载均衡（Elastic Load Balance，简称ELB）是将访问流量根据分配策略分发到后端多台服务器的流量分发控制服务。弹性负载均衡可以通过流量分发扩展应用系统对外的服务能力，同时通过消除单点故障提升应用系统的可用性。
为了确保外网用户能够安全、高效地访问ModelArts提供的在线服务，并更灵活地整合ModelArts提供的预测服务，ModelArts支持通过弹性负载均衡（ELB）连接内网访问推理在线服务，ELB作为流量入口，根据转发策略将访问流量分发到后端推理服务实例。
图1弹性负载均衡连接内网访问在线服务   
![](https://support.huaweicloud.com/inference-modelarts/figure/zh-cn_image_0000002635095564.jpg)
#### 权限说明
用户在使用弹性负载均衡ELB接入功能时，要保证拥有以下权限。
表1用户权限 
| 权限名          | action                      | 使用场景                       |
|:---|:---|:---|
| 查询工作空间详情  | modelarts:workspace:get  | 访问工作空间                 |
| 查询模型服务列表 | modelarts:service:list    | 查询服务列表                  |
| 更新服务     | modelarts:service:update  | 创建ELB接入、变更ELB接入、删除ELB接入 |
| 删除服务     | modelarts:service:delete | 删除ELB接入                 |
| 查询专属资源池列表  | modelarts:pool:list      | 查询资源池列表                  |
| 查询虚拟私有云列表    | vpc:vpcs:list               | 创建ELB接入、变更ELB接入            |
| 查询子网信息       | vpc:subnets:get             | 创建ELB接入、变更ELB接入            |
| 查询弹性负载均衡列表  | elb:loadbalancers:list   | 创建ELB接入、变更ELB接入          |
| 查询证书列表     | elb:certificates:list    | 创建ELB接入、变更ELB接入            |
| 查询监听器列表      | elb:listeners:list           | 创建ELB接入、变更ELB接入           |
   
用户还需赋予ModelArts服务以下委托权限。ModelArts添加授权操作请参见[快速配置ModelArts委托授权](https://support.huaweicloud.com/permission-modelarts/modelarts_24_0085.html)。
表2用户授予的委托权限 
| 权限名              | action                    | 使用场景                      |
|:---|:---|:---|
| 创建终端节点           | vpcep:endpoints:create    | 创建ELB接入、变更ELB接入       |
| 删除终端节点           | vpcep:endpoints:delete    | 变更ELB接入、删除ELB接入        |
| 查询终端节点详情         | vpcep:endpoints:get       | 创建ELB接入、变更ELB接入         |
| 查询终端节点列表         | vpcep:endpoints:list      | 创建ELB接入、变更ELB接入         |
| 查询弹性负载均衡      | elb:loadbalancers:get   | 创建ELB接入、查询ELB接入         |
| 查询负载均衡器列表     | elb:loadbalancers:list  | 查询ELB列表、查询ELB接入       |
| 创建监听器         | elb:listeners:create  | 创建ELB接入、变更ELB接入        |
| 查询监听器列表      | elb:listeners:list     | 查询ELB接入                |
| 查询监听器详情         | elb:listeners:get     | 变更ELB接入、删除ELB接入、查询ELB接入 |
| 删除监听器          | elb:listeners:delete  | 变更ELB接入、删除ELB接入       |
| 更新监听器         | elb:listeners:put      | 创建ELB接入、变更ELB接入        |
| 查询转发策略列表      | elb:l7policies:list    | 创建ELB接入、变更ELB接入         |
| 创建转发策略列表     | elb:l7policies:create | 创建ELB接入、变更ELB接入        |
| 删除转发策略列表        | elb:l7policies:delete  | 变更ELB接入、删除ELB接入       |
| 创建后端服务器组       | elb:pools:create      | 创建ELB接入、变更ELB接入      |
| 查询后端服务器组详情     | elb:pools:get         | 变更ELB接入、删除ELB接入       |
| 删除后端服务器组     | elb:pools:delete     | 变更ELB接入、删除ELB接入        |
| 查询后端服务器组列表     | elb:pools:list          | 删除ELB接入               |
| 创建后端服务器组成员   | elb:members:create    | 创建ELB接入、变更ELB接入         |
| 查询后端服务器组成员列表 | elb:members:list       | 变更ELB接入、删除ELB接入       |
| 查询后端服务器组成员详情 | elb:members:get         | 变更ELB接入、删除ELB接入         |
| 删除后端服务器组成员   | elb:members:delete     | 变更ELB接入、删除ELB接入         |
| 查询证书列表        | elb:certificates:list   | 创建ELB接入、变更ELB接入        |
| 查询转发规则详情      | elb:l7rules:get          | 创建ELB接入、变更ELB接入         |
   
#### 计费说明
使用弹性负载均衡和VPC终端节点涉及计费，详情参见[弹性负载均衡ELB计费](https://support.huaweicloud.com/price-elb/elb_billing_0003.html)和[VPC终端节点计费](https://support.huaweicloud.com/price-vpcep/vpcep_price_1000.html)。
#### 步骤一：创建ELB
已创建独享型弹性负载均衡ELB。具体操作请参考[创建弹性负载均衡](https://support.huaweicloud.com/usermanual-elb/elb_lb_000006.html)章节，其中弹性负载均衡创建要求如下表。
表3创建弹性负载均衡说明 
| 参数      | 说明                |
|:---|:---|
| 实例规格    | 需选择独享型的实例类型。        |
| 负载均衡类型 | 需选择应用型或网络型+应用型的类型。 |
| 网络配置    | 需勾选IP类型后端。         |
   
#### 步骤二：在ModelArts在线推理服务中配置ELB接入
在配置推理服务信息时，配置"弹性负载均衡ELB"参数，配置推理服务信息的详细操作参见[配置服务信息](https://support.huaweicloud.com/inference-modelarts/inference2.0-modelarts-0016.html)。
"弹性负载均衡ELB"参数配置说明如下：
1. 在左侧导航栏中选择"模型推理 \> 在线推理"，默认进入"在线推理"列表。
2. 单击"部署"，进入"部署在线服务"页面。配置推理服务信息时，在"弹性负载均衡ELB（可选）"下，选择已创建的弹性负载均衡。
   图2选择弹性负载均衡ELB   
   ![](https://support.huaweicloud.com/inference-modelarts/figure/zh-cn_image_0000002672708825.png)
   
   
3. 选择弹性负载均衡后，如果服务协议为 HTTPS 或 WSS，还需要需要配"SSL 解析方式"，可选择"单向认证"或"双向认证"。如果选择单向认证，则只需要配置服务器证书；若选择双向认证，则还需要配置 CA 证书。此外，可以选择配置"SNI"。
   图3单向认证   
   ![](https://support.huaweicloud.com/inference-modelarts/figure/zh-cn_image_0000002635796484.png)
   
   图4双向认证   
   ![](https://support.huaweicloud.com/inference-modelarts/figure/zh-cn_image_0000002635636588.png)
   
   CA证书、服务器证书、SNI证书需要提前创建，创建操作请参见ELB的[创建证书](https://support.huaweicloud.com/usermanual-elb/elb_ug_zs_0004.html)文档。SNI更多介绍参见ELB文档[开启SNI证书](https://support.huaweicloud.com/usermanual-elb/elb_ug_jt_0021.html)。
   服务信息和部署配置的其他参数请分别参见[配置服务信息](https://support.huaweicloud.com/inference-modelarts/inference2.0-modelarts-0016.html)[推理在线服务单机部署](https://support.huaweicloud.com/inference-modelarts/inference2.0-modelarts-0004.html)章节。部署配置完成后，参考下面步骤完成访问调用。
   
 
#### 步骤三：通过ELB调用地址访问在线服务
服务配置ELB并部署成功后，可以在在线服务列表或者服务详情页面单击"服务调用"查看，获取 ELB 调用地址。
图5服务调用   
![](https://support.huaweicloud.com/inference-modelarts/figure/zh-cn_image_0000002687110441.png)
服务调用信息中会根据ELB的IP地址逐一展示私网或公网调用URL。
图6调用信息   
![](https://support.huaweicloud.com/inference-modelarts/figure/zh-cn_image_0000002728946967.png)
在线服务的 ELB 调用地址格式是：${服务协议}://${弹性负载均衡实例IP}/v2/infer/${在线服务ID}/${具体的API}。例如：http://10.10.xx.xxx/v2/infer/d64cda4f-af92-4bd3-804d-xxxxx/v1/chat/completions。
由于用户可以随时在ELB控制台或通过ELB服务提供的API改变ELB实例所绑定的私有IP地址或弹性公网IP地址，因此在线服务的调用信息的底部提供了"同步"按钮用于一键同步ELB最新的IP地址，以保证可以通过新的IP访问在线服务。
如果用户在在线服务之前还打通了其他具有四层流量处理能力的网络组件，那么还需要单击"调用信息"的"自定义 URL"，将该网络组件的IP地址或域名加入自定义地址中，使得用户可以通过该IP地址或域名访问在线服务。比如用户在ELB之前还对接了APIG，并希望能通过APIG域名访问在线服务，则需要将APIG的域名加入到自定义地址中。
图7修改访问地址   
![](https://support.huaweicloud.com/inference-modelarts/figure/zh-cn_image_0000002729067227.png)
#### VPC终端节点创建规则
如果用户接入的ELB所属的VPC是首次接入，则会在该VPC下自动创建一个VPC终端节点，用于打通该VPC与在线服务所在的网络。该 VPC终端节点的IP将作为ELB的后端服务器。
如果ModelArts在线服务自动创建的VPC终端节点不再被使用，该VPC终端节点将被自动清理。
#### ELB相关资源创建规则
当用户接入ELB时，则会在该ELB下创建一系列相关资源，包括监听器、后端服务器组、转发策略等。具体包括：
- 如果服务协议配置为"HTTP"，则会在ELB下创建一个协议为HTTP且端口为80的监听器；如果服务协议配置为HTTPS，则会在ELB下创建一个协议为HTTPS且端口为443的监听器。
- 如果服务调用模式为"同步调用"，则会在监听器下创建一个路径前缀匹配"/v2/infer"的转发规则，用于将同步调用请求转发至同步在线服务；如果服务调用模式为"异步调用"，则会在监听器下创建一个路径为前缀匹配"/v2/async-infer"的转发规则，用于将异步调用请求转发至异步在线服务。
上述ELB相关资源如果已经存在，将会被复用，如果不存在，则会自动创建。在复用的过程中，可能会有配置冲突，常见的配置冲突如下：
1. 监听器：如果服务协议为"HTTP"，但ELB已经绑定了其他协议（比如 HTTPS、TCP 等）且端口为80的监听器，则视为配置冲突且ELB接入失败。
2. 转发策略：如果服务调用模式为"同步调用"，并且监听器已经存在一个路径前缀匹配"/v2/infer"的转发规则，但其转发的目标不是后端服务器组，或者后端服务器组中的后端服务器不是目标VPC终端节点的IP，则视为配置冲突且ELB接入失败。
如果ModelArts在线服务自动创建的ELB不再被使用，上述ELB相关资源将被自动清理。
#### 查看ELB对接状态
在推理服务详情页的网络配置版块查看弹性负载均衡ELB的对接状态。如果ELB接入或断开失败，支持在推理详情页"重试"。
图8查看ELB对接状态   
![](https://support.huaweicloud.com/inference-modelarts/figure/zh-cn_image_0000002656889918.png)
表4弹性负载均衡ELB对接状态 
| 状态名称  | 含义                                | 常见原因                              | 约束              |
|:---|:---|:---|:---|
| 对接中    | 正在创建ELB与VPCEP相关资源，打通ELB与在线服务的网络访问 | 不涉及                              | 不能中途更换为其他ELB或断开ELB |
| 已对接 | 已打通ELB与在线服务的网络，此时可以通过ELB访问在线服务    | 不涉及                                | 无               |
| 对接异常  | 打通ELB与在线服务时失败                     | 无相关委托权限，比如 elb:listeners:create    | 不能中途更换为其他ELB或断开ELB |
| 断开中   | 正在清理ELB与VPCEP相关资源               | 不涉及                              | 不能中途更换为其他ELB      |
| 断开异常  | 清理ELB或VPCEP相关资源失败                 | 无相关委托权限，比如 elb:listeners:delete | 不能中途更换为其他ELB    |
   
