草庐IT

云原生场景下的容器网络隔离技术

每天一个秃顶小技巧 2024-07-29 原文

云原生场景下的容器网络隔离技术

一、研究背景

随着云计算时代的到来,尤其是容器化技术的飞速发展,云原生作为云计算的未来阶段,其安全势必成为云安全的主要战场。从目前的云原生环境来看,云原生网络安全问题层出不穷,威胁程度逐渐上升,从业人员面临着严峻的挑战。

例如,此前Akamai公司进行了一项实验,将一个简单的Docker容器蜜罐用于攻击测试,结果显示该容器在24小时内被攻击者用于四起不同的犯罪活动,这些攻击的目的各不相同:一起攻击试图使用容器作为代理,以访问数据流或其他服务,另一起企图让目标感染僵尸网络,还有一起执行加密货币挖掘,最后一起是通过容器针对居家办公用户实施诈骗。

此外,2018年特斯拉AWS上部署的K8S Dashboard因为暴露在公网,没有做认证和授权控制,也没有对网络访问做控制,导致黑客直接从dashboard中获取S3凭证,从而获取遥测数据,恶意拉取POD,进行挖矿行为。

从上面案例我们可以看出,云原生安全不仅仅要应对传统安全问题,更面临着全新的挑战。在众多安全技术手段中,网络隔离技术作为最早、最基础、最为核心的安全技术手段之一,本文章也将重点围绕着网络隔离技术,以传统隔离与云原生隔离两个角度进行分析,着重对容器网络隔离技术做介绍。

二、传统的隔离技术–传统防火墙

随着云计算的普及,网络边界日渐模糊,这使得传统防火墙基于边界流量实现隔离显得有点格格不入,无法适配云原生场景下的隔离需求。

传统防火墙作为实现传统隔离的重要手段,在云原生场景下,主要面临着以下几个问题:

1. 容器 IP 的多变性,一旦容器ip地址改变,针对不变的ip地址为“锚点”实现的防火墙访问控制将无法生效;

2. 网络攻击隐蔽且多变,业务平台需更强的威胁识别和处置能力;

3. 云原生场景下,对灵活弹性扩展需求高,需要安全策略和能力快速匹配;

此外,在CNCF 发布的《云原生安全白皮书》也指出传统基于边界的安全防护机制,如防火墙等,在云原生的场景下很难面面俱到。所以,在云原生场景下,为了更好保护我们的业务容器安全,我们需要一些新的隔离技术去实现网络隔离。

三、云原生隔离技术–容器代理实现的隔离方法

3.1 基于k8s实现的容器隔离

关于云原生场景下的原生的网络隔离技术,其中Kubernetes提供了NetworkPolicy和istio中的AuthorizationPolicy ,两者都支持按Namespace级别的网络隔离,达到访问外部资源隔离的目的。其中NetworkPolicy还支持按pod级别去做网络访问控制,利用label指定namespaces或pod,底层通过iptables实现,是大家比较熟悉的pod访问控制实现技术,下面我们简单介绍一下NetworkPolicy的使用场景。

NetworkPolicy使用场景示例如下:

要求只容许指定pod访问服务:

其网络策略如下:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: api-allow
spec:
  podSelector:
    matchLabels:    //匹配的lable如下
      app: bookstore 
      role: api
  ingress:
  - from:
      - podSelector:
          matchLabels:      //指定可以容许访问的pod需要的lable
            app: bookstore

实现效果如下:

从上面示例可以看出,NetworkPolicy可以通过指定对应的labels实现对Namespace 和Pod 级别的网络隔离。对比于传统的单一外部防火墙,NetworkPolicy实现了在一个集群内的pod间网络隔离。也就是在某些需要的 Pod 之间架起防火墙,实现了细粒度的pod网络访问隔离策略。正是因为它的这些优点,目前市面上的容器安全产品的网络隔离有很多都有一些NetworkPolicy的影子。

但是如果要基于NetworkPolicy做一个安全产品的网络隔离技术时,NetworkPolicy还是存在着很多缺点,主要是以下几点:

  • 性能差,无法满足大规模网络场景的隔离需求(目前各个cni在NetworkPolicy 的实现上,一般基于iptables的方式,假如流量或者需要管控的pod过多时,对集群性能影响较大,甚至可能导致 iptables不堪重负);
  • 适用性差,目前类似于Flannel 这种流行的cni插件,并没有实现对NetworkPolicy的支持。此外,对于非k8s的场景下,例如docker compose、docker Swarm、OpenShift等环境,NetworkPolicy并不能支持;
  • 细粒度不够,目前NetworkPolicy只能实现对Namespace 和Pod 级别的网络隔离,对于docker直接起的业务容器,并不能够起到防护作用。此外,目前NetworkPolicy也只能做到四层网络的防护,并不能实现对第七层网络级别的防护;
  • 易用性差,每次配置都需要创建对应的yaml、无法实现自动化部署,存在效率低的问题。此外,对于开发或者运维人员很难做到“一配即中”的效果,而规则错误很可能导致业务受影响,配置难度和试错成本极高;
  • 灵活性差,云原生场景下,对灵活弹性扩展需求高,需要安全策略和能力快速匹配。

总的来说,NetworkPolicy在当前阶段,只适用于部分场景对小规模的pod进行网络隔离,不能作为一个成熟的网络隔离技术在安全产品中使用。

3.2 容器代理实现的隔离方法

由上可知,networkPolicy的实现方案存在着众多缺点,所以我们还是需要在云原生的场景下探索新的网络隔离方法,接下来我以容器代理的思路为大家介绍云原生场景下比较成熟的隔离方案。

在介绍容器代理的方式之前,先简单介绍容器之间的网络通信。首先无论pod还是docker之间的通信,它们都会在自己的网络命名空间下与节点上的网络命名空间建立veth对进行连接通信,这些虚拟接口可以分布在多个命名空间上。

下面以k8s的网络通信举例,在k8s中,将veth对一侧分配给 root network namespace也就是节点的网络命名空间,另一侧分配给 Pod 的网络命名空间。每个 veth 对就像一根网线,连接两侧并允许流量在它们之间流动,如下图:

基于上面的基础,我们可以在云集群中的每一个节点上部署一个代理容器,将被代理容器或者pod与宿主机通信的veth piar进行重组,通过代理容器的veth piar连接两侧,效果图如下:

通过上述代理容器的方式,我们可以对节点上面其他容器和pod进行流量控制。基于packet mmap对网络连接进行分析,实现对容器网络通信的网络访问控制,实现网络隔离的效果。

同时,它也解决了NetworkPolicy很多存在的缺点,具体为以下几点:

  • 性能影响小,不需要添加多余的iptables规则,它可以通过TC或者XDP的方式对流量包进行转发,将性能影响降到最小;
  • 适用性广,与网络插件解绑,同时支持docker compose、docker Swarm、OpenShift等环境;
  • 细粒度更高,支持容器为最小控制单元;
  • 灵活性高,满足云原生场景下灵活弹性扩展需求高的特点。

3.3 理想的容器网络隔离技术需要具备的特点 通过以上两种云原生网络隔离实现方式的分析,我们可以推断出一个理想的容器网络隔离技术需要满足以下特点:

  • 性能影响,实现容器网络防护的同时,需要尽量不去影响集群性能和业务容器的正常运行; 适用性,不应该局限于某一种场景,给用户带来迁移或者架构更新的成本;
  • 细粒度,支持容器为新的最小控制单元。另外,目前主流的零信任产品网络防护只做到4层,理想的容器网络隔离技需要做到7层网络防护的效果;
  • 安全策略能力,随着云原生可视化技术的成熟,是安全策略的实现基础,基于云原生场景下“东西向”和“南北向”流量的可视化,隔离技术需要实现策略的自动生成更新;
  • 灵活性,针对云原生场景下灵活弹性扩展需求高的特点,隔离技术需要做到安全策略和能力快速匹配,实现快速部署以及弹性伸缩。

四、总结

本文从传统网络隔离与云原生网络隔离两个角度出发,分析了现有的网络隔离技术的特点,讨论了云原生场景下网络隔离技术需要满足的特点。

  • 首先我们通过分析传统隔离得出,在面对复杂的云原生应用场景时,为了更好保护我们的业务容器安全,我们需要一些新的隔离技术去实现网络隔离。
  • 然后,我们通过介绍目前云原生网络隔离的两种实现方案,得出一个理想的容器网络隔离技术需要满足哪些特点。
  • 最后,希望通过本篇文章的分享,你能有所收获。

五、参考链接

1.https://ahmet.im/blog/kubernetes-network-policy/

2.https://kubernetes.io/docs/concepts/services-networking/network-policies/

3.https://www.51cto.com/article/715804.html 4.https://en.wikipedia.org/wiki/N

有关云原生场景下的容器网络隔离技术的更多相关文章

  1. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  2. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  3. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  4. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  5. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  6. ruby - 检查网络文件是否存在,而不下载它? - 2

    是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby​​不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案

  7. ruby - 404 未找到,但可以从网络浏览器正常访问 - 2

    我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT

  8. ruby-on-rails - 用于门户的 Ruby 技术 - 2

    我刚刚看到whitehouse.gov正在使用drupal作为CMS和门户技术。drupal的优点之一似乎是很容易添加插件,而且编程最少,即重新发明轮子最少。这实际上正是Ruby-on-Rails的DRY理念。所以:drupal的缺点是什么?Rails或其他基于Ruby的技术有哪些不符合whitehouse.org(或其他CMS门户)门户技术的资格? 最佳答案 Whatarethedrawbacksofdrupal?对于Ruby和Rails,这确实是一个相当主观的问题。Drupal是一个可靠的内容管理选项,非常适合面向社区的站点。它

  9. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

  10. 【网络】-- 网络基础 - 2

    (本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展        是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。    如:有三个人,每个人做的不同的事物,但是是需要协作的完成。    而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据

随机推荐