Tungsten Fabric+K8s轻松上手丨通过Kubernetes网络策略进行应用程序微分段

在大多数生产环境中,需要实施网络访问控制。Kubernetes 提供了一种方法来描述Pod 组应该如何通过使用NetworkPolicy资源进行通信。

与Kubernetes中的大多数事情一样,要使网络策略正常运行,您需要一个支持它们的Kubernetes CNI插件。
使用场景
在几乎所有环境中,为应用程序需要通信的组件建立明确的规则,都是一个好主意。Kubernetes网络策略规范是一种直接的方法,可让您将NetworkPolicy直接与应用程序清单集成在一起。

NetworkPolicy定义资源的方式,使您可以精确地指定哪些网络通信是被允许的,而哪些则不允许,同时使用podSelector定义处理在Kubernetes上运行的应用程序的动态属性。

这意味着您的策略可以针对单个Pod或Pod组,从而将安全范围“缩小”到Pod的大小。

严格定义的网络策略与default-deny配置相结合,可以避免由于恶意应用程序入侵,和/或行为不当,或者配置错误而造成的麻烦。例如,一个应用程序组件可能具有滞留的缓存DNS条目或错误的配置参数,导致它与错误的后端进行通信。或者应用程序可能会被攻陷并被用作跳板,执行侦查,尝试横向渗透,或者只是使用Pod对Kubernetes API的访问权限来启动一些加密货币挖矿Pod,以窃取您的计算资源。
使用网络策略保护示例应用程序的安全
网络策略设计的主题比本指南中允许的空间要大得多。在此示例中,我们将执行以下操作:
 为我们的default命名空间创建一个default-deny Ingress策略。这意味着命名空间内的所有传入Pods的连接必须明确被允许;
 为每个示例应用程序组件创建一个Ingress NetworkPolicy对象,仅允许那些我们确定的对象。
步骤1:明确哪些组件应当可以相互通信
首先,我们需要提醒自己,应用程序的各个组件应该如何通信。为此,我们将回到在简介中看到的应用程序图:

11111111

从该图中可以看到:

1. 外界需要到达yelb-ui的TCP端口80-(1)和(2)
2. yelb-ui需要到达yelb-appserver的TCP端口4567
3. yelb-appserver反过来将需要到达yelb-db的TCP端口5432,以及
4. .. yelb-cache的TCP端口6379。

步骤2:如何识别组件?
请记住,NetworkPolicy资源使用选择器来识别策略适用于哪个Pod,以及该策略将要控制的流量的源和目的地是什么。

在本演示中,我们将使用podSelectror方法,因此需要获取应用到应用程序Pod的标签列表。让我们查看cnawebapp-loadbalancer.yaml示例应用程序的清单,并收集标签:

现在准备编写我们的策略。

部署后,这些策略将以以下方式控制应用程序组件之间的通信:

33333333333

步骤3:“default-deny”策略
确保您位于沙箱控制节点上,以root用户身份登录,并且位于正确的目录中:
# 确认您是root账户
whoami | grep root || sudo -s

# 切换到清单目录
cd /home/centos/yelb/deployments/platformdeployment/Kubernetes/yaml

在此步骤中,我们将创建一个策略,该策略将阻止所有未明确允许的网络通信。在这一演示中,我们将只限制Ingress流量;但实际上,您也可以控制Egress流量(但是这样做时要注意这可能会阻止DNS查询!):

cat > yelb-policy.yaml <> yelb-policy.yaml <> yelb-policy.yaml < “Traffic Groups”。然后在顶部的标签链,在其末尾选择“k8s-default”:

444444

继续测试。您看到的流,代表示例应用程序在做的事情,包括无法从 yelb-uiping到yelb-db,以及yelb-appserver的出站请求(如果我们去查看,将转到yelb-db的DNS查询)。
清理
一旦进行了足够的探索,可以随时清理:
# 卸载Network Policy
kubectl delete -f yelb-policy.yaml

# 删除我们的示例应用程序:
kubectl delete -f cnawebapp-loadbalancer.yaml

# 删除策略清单:
rm -f yelb-policy.yaml
回顾和资源
对于许多(即使不是全部)生产部署,控制应用程序的网络通信能力至关重要。在Kubernetes上运行的应用程序实现此类控件的方法是通过NetwokPolicy资源。但是,要使这些资源真正起作用,您需要一个支持它们的CNI插件。

Tungsten Fabric提供了完整的NetworkPolicy支持,无论集成Tungsten Fabric的Kubernetes在哪里运行,是在私有数据中心,还是在公共云中。

网络策略可以变得非常简单或非常复杂,而找出最适合您的应用程序的最佳方法,就是在我们提供的用例和示例基础上更深入地研究。这里有一些资源可能会有所帮助:

 网络策略的详细介绍
 一个不错的GitHub存储库,其中包含大量具有详细文档的网络策略清单示例
 在2019 Kubecon上的演讲中有一个介绍网络策略的很好的材料

关于Tungsten Fabric:
Tungsten Fabric项目是一个开源项目协议,它基于标准协议开发,并且提供网络虚拟化和网络安全所必需的所有组件。项目的组件包括:SDN控制器,虚拟路由器,分析引擎,北向API的发布,硬件集成功能,云编排软件和广泛的REST API。

关于TF中文社区:
TF中文社区由中国的一群关注和热爱SDN的志愿者自发发起,有技术老鸟,市场老炮,也有行业专家,资深用户。将作为连接社区与中国的桥梁,传播资讯,提交问题,组织活动,联合一切对多云互联网络有兴趣的力量,切实解决云网络建设过程中遇到的问题。


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/23921.html
分享到:
相关文章
条评论

登录后才可以评论

SDNLAB君 发表于20-03-24
0