-
Notifications
You must be signed in to change notification settings - Fork 5
9.CES 精细化SNAT控制
Contributor: Jesonchen
当前越来越多互联网业务以API的形式对外提供服务,同时也给API安全建设提出更多要求。因此,面向To B业务的API服务,往往会采用限制来源IP这种简单高效的办法来提高安全性。过去,企业调用这些服务,需要以指定的公网IP为源地址,当企业自身服务进行容器化改造后,这种模式并不会改变,反而由于容器的高度动态,Pod IP频繁变化给网络管理者指定公网IP映射带来更大挑战,主要体现在以下两点:
-
源地址动态变化时,需要识别并维护源地址清单
-
需要根据不同的Service来匹配不同的出向IP,实现精细化管控
当容器需要出向访问时,由于难以按照传统的源地址方式进行访问控制,需要一个更为动态的访问控制策略,能够根据源地址的变化而变化。本文主要介绍CES在容器服务出向访问、需要指定源IP场景里的应用。
F5 SNAT(Secure Network Address Translation)是负载均衡里必要的技术手段,常见的场景是将入向访问的客户端源地址转换成F5的内部接口IP或指定网段,以简化服务器回包路由设置,如下图所示:
出向访问也是同样逻辑,客户端源地址经过F5后,会被转换成F5的内部接口IP或指定IP。借助F5 iRules,可以设置自定义SNAT规则,比如按照特定的源地址和目标地址,使用特定SNAT IP。
但这仅适用于源地址是静态的已知的,如果源地址是动态的,iRules并不能自动识别和维护源地址,进而匹配SNAT规则。
现在,我们可以借助CES对Pod的发现能力,动态地识别和维护Pod源地址,并匹配SNAT规则,从而实现出向访问指定公网IP,如下图所示:
下图为LAB演示环境,为简化网络配置,将K8S所有节点网关设置为F5 AFM。
实际部署时,K8S所有节点网关通常是交换机,F5部署时可能会旁挂到交换机,此时需要在交换机设置策略路由,将Pod网段访问外部服务的路由指向F5,确保Pod出向流量经过AFM。
在ns-600
中针对myapp服务部署per service出向策略。CES会在Shared Objects中自动创建Pod IP address list,同一个Service Pod数量和IP变化CES会自动更新到这个list。示例如下:
- 进入BIG-IP,在Security——Network Address Translation——Source Translation菜单里,创建SNAT地址:
- 在Security——Network Address Translation——Policies菜单里,创建NAT策略
注:添加源地址时可从右侧Address List里拖动;Destination Address可以留空表示Any或者填写具体的目标地址,表示SNAT策略对该目标地址生效。
- Outbound vs关联SNAT policy
注:目前SNAT策略需手动关联,关联NAT policy时,vs的SNAT需设置为None,且不能关联pool。未来计划加入到CES形成标准功能。
- 验证SNAT规则
LAB里有两条出向访问SNAT策略
- Myapp Service Pod访问104.21.59.106 使用源地址 10.1.20.113
- Myapp Service Pod访问Any 使用源地址 10.1.20.115
注:104.21.59.106为linjing.io的 A记录
验证访问,任意挑选一个Myapp Service的Pod,进入容器后访问linjing.io和baidu.com,在AFM中查看连接表,确认SNAT映射关系:
在上述pod中ping linjing.io:
查看AFM表,可以看到使用的SNAT地址为10.1.20.113:
在Pod中继续ping www.baidu.com:
查询连接表,可以看到SNAT地址为10.1.20.115:
可以看出,CES+F5 BIG-IP可按照Per Service维度的细颗粒度进行SNAT IP管控,且可以针对同一个服务访问不同目标设置不同SNAT IP规则,从而实现固定源地址SNAT的灵活性和智能化。
下一步