Skip to content

9.CES 精细化SNAT控制

myf5 edited this page Jan 28, 2022 · 3 revisions

容器出向流量精细化SNAT控制

Contributor: Jesonchen

当前越来越多互联网业务以API的形式对外提供服务,同时也给API安全建设提出更多要求。因此,面向To B业务的API服务,往往会采用限制来源IP这种简单高效的办法来提高安全性。过去,企业调用这些服务,需要以指定的公网IP为源地址,当企业自身服务进行容器化改造后,这种模式并不会改变,反而由于容器的高度动态,Pod IP频繁变化给网络管理者指定公网IP映射带来更大挑战,主要体现在以下两点:

  • 源地址动态变化时,需要识别并维护源地址清单

  • 需要根据不同的Service来匹配不同的出向IP,实现精细化管控

CES SNAT介绍

当容器需要出向访问时,由于难以按照传统的源地址方式进行访问控制,需要一个更为动态的访问控制策略,能够根据源地址的变化而变化。本文主要介绍CES在容器服务出向访问、需要指定源IP场景里的应用。

F5 SNAT(Secure Network Address Translation)是负载均衡里必要的技术手段,常见的场景是将入向访问的客户端源地址转换成F5的内部接口IP或指定网段,以简化服务器回包路由设置,如下图所示:

image-20220128140506487

出向访问也是同样逻辑,客户端源地址经过F5后,会被转换成F5的内部接口IP或指定IP。借助F5 iRules,可以设置自定义SNAT规则,比如按照特定的源地址和目标地址,使用特定SNAT IP。

但这仅适用于源地址是静态的已知的,如果源地址是动态的,iRules并不能自动识别和维护源地址,进而匹配SNAT规则。

现在,我们可以借助CES对Pod的发现能力,动态地识别和维护Pod源地址,并匹配SNAT规则,从而实现出向访问指定公网IP,如下图所示:

image-20220128140600603

容器出向SNAT配置演示

下图为LAB演示环境,为简化网络配置,将K8S所有节点网关设置为F5 AFM。

实际部署时,K8S所有节点网关通常是交换机,F5部署时可能会旁挂到交换机,此时需要在交换机设置策略路由,将Pod网段访问外部服务的路由指向F5,确保Pod出向流量经过AFM。

image-20220128140707010

ns-600中针对myapp服务部署per service出向策略。CES会在Shared Objects中自动创建Pod IP address list,同一个Service Pod数量和IP变化CES会自动更新到这个list。示例如下:

image-20220128141004646

SNAT策略配置

  1. 进入BIG-IP,在Security——Network Address Translation——Source Translation菜单里,创建SNAT地址:

image-20220128141054561

image-20220128141132202

  1. 在Security——Network Address Translation——Policies菜单里,创建NAT策略

注:添加源地址时可从右侧Address List里拖动;Destination Address可以留空表示Any或者填写具体的目标地址,表示SNAT策略对该目标地址生效。

image-20220128141203127

  1. Outbound vs关联SNAT policy

image-20220128141227044

注:目前SNAT策略需手动关联,关联NAT policy时,vs的SNAT需设置为None,且不能关联pool。未来计划加入到CES形成标准功能。

  1. 验证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映射关系:

image-20220128141431067

在上述pod中ping linjing.io:

image-20220128141514019

查看AFM表,可以看到使用的SNAT地址为10.1.20.113:

image-20220128141630832

在Pod中继续ping www.baidu.com:

image-20220128141656039

查询连接表,可以看到SNAT地址为10.1.20.115:

image-20220128141721991

总结

可以看出,CES+F5 BIG-IP可按照Per Service维度的细颗粒度进行SNAT IP管控,且可以针对同一个服务访问不同目标设置不同SNAT IP规则,从而实现固定源地址SNAT的灵活性和智能化。

下一步

观看demo视频