Kubernetes:网络政策 - 全部拒绝所有人

时间:2018-05-19 12:18:24

标签: kubernetes

我在所有命名空间中的所有pod中都默认拒绝所有pod。如果允许all添加到某个命名空间中的pod,该怎么办?什么优先?在梳理多个策略时是否存在任何和/或逻辑?

由于

3 个答案:

答案 0 :(得分:0)

我发现的内容并不完全清楚但the documentation暗示任何允许优先于拒绝

  

通过使用选择它们的NetworkPolicy来隔离Pod。一旦命名空间中有任何NetworkPolicy选择特定的pod,该pod将拒绝任何NetworkPolicy不允许的任何连接。 (名称空间中未被任何NetworkPolicy选中的其他pod将继续接受所有流量。)

基本上,将NetworkPolicy应用于任何pod都包含隐式“拒绝其他任何”策略。通过创建“默认拒绝”策略,您可以隔离所有pod,因为没有它的任何策略都不会将它们作为目标(没有策略=没有隔离)。

答案 1 :(得分:0)

由于我们无法在网络策略中指定优先级,因此解决问题的最佳方法是将两个策略合并为一个策略,以避免冲突规则。

答案 2 :(得分:0)

网络策略将连接列入白名单,因此存在隐式“或”-如果至少一个网络策略允许连接,则将允许该连接。

更详细的说明(由https://geonb.snb.ca/downloads2/imagery/2014/D19077/geotiffs/26220E74598N.tif提供):

  

每个网络策略都有一个podSelector字段,该字段选择一组(零个或多个)pod。当通过网络策略选择了Pod时,该网络策略被认为适用于该Pod。

     

每个网络策略还指定一个允许的(入口和出口)连接列表。创建网络策略后,将允许其应用的所有Pod建立或接受其中列出的连接。换句话说,网络策略本质上是允许连接的白名单-如果适用于该Pod的至少一个网络策略允许,则允许与Pod进行连接或从Pod进行连接。

     

但是,这个故事有一个重要的转折:根据到目前为止所描述的所有内容,人们会认为,如果没有对Pod应用任何网络策略,则不允许与之建立连接。实际上,情况恰恰相反:如果没有适用于Pod的网络策略,则允许与该Pod进行来回的所有网络连接(除非该连接被应用于该连接中的其他对等方的网络策略禁止该连接)。      

此行为与“隔离”的概念有关:如果荚适用至少一种网络策略,则荚是“隔离的”。如果没有政策适用,那么它们是“非隔离的”。网络策略未在非隔离的Pod上强制执行。尽管有些违反直觉,但这种行为的存在是为了使群集的启动和运行变得更加容易–不了解网络策略的用户可以在不创建应用程序的情况下运行其应用程序。