印花布计划:“全球政策”和“网络政策”之间的优先级

问题描述

我正在一个小型 Kubernetes 集群上测试 Project Calico,我试图找出“全局策略”和“网络策略”之间的一个将首先应用于数据流。

我的理解:

  • 使用 Calico 的数据路径是 pod 的主机总是下一跳,然后用 iptables 过滤
  • 策略(网络和全局)可以具有优先级(较低的优先级将在之前应用)

我做了很多测试,但有时全局网络策略优先于网络策略,有时正好相反。

你能解释一下并告诉我我哪里错了吗?

谢谢!

解决方法

如果有您的配置的确切示例以及预期和实际结果,那就太好了。非常广泛的主题,涉及大量设置。

一般来说,Calico Network policy 是与命名空间相关的资源,而 Calico Global network policy 不是。


Calico Network policy

网络策略资源 (NetworkPolicy) 表示一组有序的 应用于匹配一个端点的集合的规则 标签选择器。

NetworkPolicy 是一个命名空间资源。特定网络政策 命名空间仅适用于工作负载端点资源 命名空间。两个资源在同一个命名空间中,如果命名空间 两者的值设置相同。

Calico Global network policy

GlobalNetworkPolicy 不是命名空间资源。全球网络政策 适用于所有命名空间中的工作负载端点资源,以及托管 端点资源。在 GlobalNetworkPolicy 中选择一个命名空间 使用 projectcalico.org/namespace 作为标签的标准选择器 name 和命名空间名称作为要比较的值,例如, projectcalico.org/namespace ==“默认”。

Calico 全球网络策略适用于所有命名空间中的所有工作负载(虚拟机和容器),以及主机(运行虚拟机管理程序的计算机,或容器运行时的容器)。

优先级源自 Selectors,这是一种非常强大的资源管理和排序方式。大多数情况下,您在测试不同选项时遇到了问题。看,就像这里:globalnetworkpolicy with networkpolicy not allowing expected traffic 。检查您的标签、选择器以及与此相关的所有内容。

还有范围。那里的问题可能很容易:

enter image description here


另请查看官方示例 Enable default deny for Kubernetes pods - 开始了解政策的好点子,其中有很多很好的建议,如何以最佳方式进行管理。并且他们还同时使用这两种策略(全局/正常)。

,

全局与非全局不是决定策略应用顺序的因素。排序由 Calico NetworkPolicyGlobalNetworkPolicy 资源上的“order”字段决定,“order”较小" 首先应用政策。

如果未指定,“order”默认为无穷大,因此未指定“order”的策略将最后应用。

Calico 还实现了 Kubernetes NetworkPolicy 资源,该资源没有明确的“订单”字段。为了根据 Calico 资源对它们进行排序,我们将 Kubernetes NetworkPolicy 资源视为它们具有 1000 的隐式“顺序”。

对于具有相同顺序值的策略,代码中有一个决胜局,但您不需要知道那是什么或依赖它,因为最好使用明确的“顺序”值,无论何时订购事宜。