【已评审】新增资源协作接口,支持动态增改和删除转发规则

背景

当前网络组件提供的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规则由两套接口,没有做到功能归一
优点:沿用原有接口,仅新增参数,接口层面改动较小
不足:历史接口对新增参数默认忽略,导致新老版本配套出现兼容性问题

评审结论

  1. 采用方案一;
  2. 同意在资源协作接口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 规则用途 必选
  1. 同意在资源协作接口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 规则用途 必选
  1. 规则添加上限为64,调用方法超出数量限制时返回错误信息;
  2. 错误信息如下表所示:
场景 错误信息描述
参数校验失败 InvalidValue
添加已存在的规则/删除不存在的规则 OperationNotAllowed
添加规则失败/删除规则失败 InternalError
添加规则数超上限 CreateLimitReachedForResource

遗留问题

  1. 修改方法名称,避免体现iptables;
  2. 方案2无法支持版本不配套场景,选择方案1;
  3. 方案1规则数量添加上限为64;