Network Policy的实现-睿云智合Wise2C

时间:2022-06-01 19:57:55

当我们逐渐向着微服务、云原生迈进的时候,传统静态的、相对简单的网络安全策略开始显得吃力。Kubernetes的NetworkPolicy特性正是来解决这个问题的。在刚刚出炉不久的1.7版本中,该特性也被扶正成为GA。让我们来一起看看NetworkPolicy是什么,能为我们做什么,以及是如何实现的。

    CNI

    Kubernetes对网络做了较好的抽象。它将对网络的需求交给外部的组件完成,也就是CNIdriver。

    Pod的网络必须满足以下三个需求:

    1所有Pod之间无需NAT即可互通

    2主机和Pod之间无需NAT即可互通

    3Pod自省的IP地址和之外部看到该Pod的地址一致

    CNI对网络的实现做了详细的定义。CNI的实现可以被分成三种:

    13层路由实现

    2Overlay实现

    32层交换实现

    现在比较常用的CNI实现有:Flannel、Calico、Weave。Flannel通过VXLanOverlay来实现跨主机Pod网络,Calico则完全通过3层路由来实现了跨主机的容器网络,Weave也是Overlay的实现。

    什么是NetworkPolicy

    随着业务逻辑的复杂化,微服务的流行,越来越多的云服务平台需要大量模块之间的网络调用。

    传统的单一外部防火墙,或依照应用分层的防火墙的做法渐渐无法满足需求。在一个大的集群里面,各模块,业务逻辑层,或者各个职能团队之间的网络策略的需求越来越强。

    Kubernetes在1.3引入了NetworkPolicy这个功能来解决这个问题。这些Policy允许用户在同一个Cluster内实现网络的隔离。也就是在某些需要的Pod之间架起防火墙。可以简单的理解为各个微服务之间的动态防火墙。也有人把这叫做分布式防火墙。

    并非所有的网络驱动都支持这个功能。比如大家比较熟悉的,比较流行的Flannel就还没有加入对NetworkPolicy的支持。Calico和Weave都各自实现了NPC(networkpolicycontroller)。虽然Flannel不支持NetworkPolicy。但是,可以使用Flannel提供网络方案,同时使用Calico或者Weave的NPC组件来共同完成。Canal就提供了将Flannel和CalicoNPC组合的方案。