背景
当前网络组件提供的iptables方法仅支持对port进行配置,不支持对IP配置转发规则,在新使用场景需要支持。
关联ISSUE
暂无issue
整体方案
方案1:新增同时针对IP及端口进行转发规则配置的方法
方案2:基于现有AddNatRule及UpdateNatRule方法进行参数扩充及流程适配,支持针对IP及端口配置转发规则
评审点
方案评审及选型:
方案1:新增资源协作接口方法,支持同时针对IP及端口进行转发规则配置
方案2:基于现有AddNatRule及UpdateNatRule方法进行参数扩充及流程适配
详细描述
方案1:
新增资源协作接口方法,支持同时针对IP及端口进行转发规则配置
资源Path: /bmc/kepler/Managers/:ManagerId/NatConfig(已支持)
资源interface: bmc.kepler.Managers.NatConfig(已支持)
| 方法名称 | 请求签名 | 请求参数描述 | 响应签名 | 响应参数描述 | 方法描述 | 访问权限 |
|---|---|---|---|---|---|---|
| AddExactNatRule | a{ss} | ProtocolType:协议类型 (取值:tcp/udp/icmp/all) IpVersion:IP协议版本(取值ipv4/ipv6) DstIpAddr:待转换规则目的IP地址 DstPort:待转换目的端口号 TranslateIpAddr:规则转换后IP地址 TranslatePort:规则转化后端口号 NatType:转发规则类型(DNAT/SNAT) Usage:规则用途 (用于内部管理及批量删除) |
无 | 无 | 指定IP及端口新增转发规则 | BasicSetting |
| DeleteExactNatRule | a{ss} | ProtocolType:协议类型 (取值:tcp/udp/icmp/all) IpVersion:IP协议版本 (取值ipv4/ipv6) DstIpAddr:待转换规则目的IP地址 DstPort:待转换目的端口号 TranslateIpAddr:规则转换后IP地址 TranslatePort:规则转化后端口号 NatType:转发规则类型(DNAT/SNAT) Usage:规则用途 (用于内部管理及批量删除) |
无 | 无 | 指定IP及端口删除转发规则 | BasicSetting |
方案2:
基于现有资源协作接口方法做参数扩充:
资源Path: /bmc/kepler/Managers/:ManagerId/NatConfig(已支持)
资源interface: bmc.kepler.Managers.NatConfig(已支持)
| 方法名称 | 请求签名 | 请求参数描述 | 响应签名 | 响应参数描述 | 方法描述 | 访问权限 |
|---|---|---|---|---|---|---|
| AddNatRule | sa(ss) | ServiceName:服务名称(必选) ProtocolType:协议类型(例:tcp/udp) PortShareWith:端口共享服务名 Enabled:服务使能开关 PortCount:对外端口数量 SrcPort:源端口号 SpareSrcPort:共享源端口 DstPort:目的端口 SpareDstPort:共享目的端口 SrcIpAddr:转发规则源IP地址(新增) DstIpAddr:转发规则目的IP地址(新增) ChainType:链名称(PREROUTING/POSTROUTING,新增) |
无 | 无 | 新增转发规则 | BasicSetting |
| UpdateNatRule | sa(ss) | ServiceName:服务名称(必选) ProtocolType:协议类型(例:tcp/udp) PortShareWith:端口共享服务名 Enabled:服务使能开关 PortCount:对外端口数量 SrcPort:源端口号 SpareSrcPort:共享源端口 DstPort:目的端口 SpareDstPort:共享目的端口 SrcIpAddr:转发规则源IP地址(新增) DstIpAddr:转发规则目的IP地址(新增) ChainType:链名称(PREROUTING/POSTROUTING,新增) |
无 | 无 | 更新转发规则 | BasicSetting |
方案对比
| 方案1 | 方案2 | |
|---|---|---|
| 方案分析 | 优点:仅在现有Path下新增方法,区分协议添加场景和IP添加场景,接口功能独立 不足:添加NAT规则由两套接口,没有做到功能归一 |
优点:沿用原有接口,仅新增参数,接口层面改动较小 不足:历史接口对新增参数默认忽略,导致新老版本配套出现兼容性问题 |
评审结论
- 采用方案一;
- 同意在资源协作接口
bmc.kepler.Managers.NatConfig下新增资源协作接口方法AddExactNatRule,权限为BasicSetting,请求签名为a{ss},参数范围如下表,无响应签名,用于添加同时针对IP及端口的转发规则;
| 参数属性名称 | 参数属性取值 | 取值说明 | 可选/必选 |
|---|---|---|---|
| ProtocolType | tcp/udp/icmp/all | 协议类型 | 必选 |
| IpVersion | ipv4/ipv6 | 协议版本 | 必选 |
| DstIpAddr | ipv4/ipv6地址 | 待转换规则目的IP地址 | 必选 |
| DstPort | — | 待转换目的端口号 | 可选 |
| TranslateIpAddr | ipv4/ipv6地址 | 规则转换后IP地址 | 必选 |
| TranslatePort | — | 规则转化后端口号 | 可选 |
| NatType | DNAT/SNAT | 转发规则类型 | 必选 |
| Usage | — | 规则用途 | 必选 |
- 同意在资源协作接口
bmc.kepler.Managers.NatConfig下新增资源协作接口方法DeleteExactNatRule,权限为BasicSetting,请求签名为a{ss},参数范围如下表,无响应签名,用于删除同时针对IP及端口的转发规则,支持 仅指定Usage 及指定所有参数 两种模式;
| 参数属性名称 | 参数属性取值 | 取值说明 | 可选/必选 |
|---|---|---|---|
| ProtocolType | tcp/udp/icmp/all | 协议类型 | 可选 |
| IpVersion | ipv4/ipv6 | 协议版本 | 可选 |
| DstIpAddr | ipv4/ipv6地址 | 待转换规则目的IP地址 | 可选 |
| DstPort | — | 待转换目的端口号 | 可选 |
| TranslateIpAddr | ipv4/ipv6地址 | 规则转换后IP地址 | 可选 |
| TranslatePort | — | 规则转化后端口号 | 可选 |
| NatType | DNAT/SNAT | 转发规则类型 | 可选 |
| Usage | — | 规则用途 | 必选 |
- 规则添加上限为64,调用方法超出数量限制时返回错误信息;
- 错误信息如下表所示:
| 场景 | 错误信息描述 |
|---|---|
| 参数校验失败 | InvalidValue |
| 添加已存在的规则/删除不存在的规则 | OperationNotAllowed |
| 添加规则失败/删除规则失败 | InternalError |
| 添加规则数超上限 | CreateLimitReachedForResource |
遗留问题
- 修改方法名称,避免体现iptables;
- 方案2无法支持版本不配套场景,选择方案1;
- 方案1规则数量添加上限为64;