问题描述
我正在一个小型 Kubernetes 集群上测试 Project Calico,我试图找出“全局策略”和“网络策略”之间的哪一个将首先应用于数据流。
我的理解:
- 使用 Calico 的数据路径是 pod 的主机总是下一跳,然后用 iptables 过滤
- 策略(网络和全局)可以具有优先级(较低的优先级将在之前应用)
我做了很多测试,但有时全局网络策略优先于网络策略,有时正好相反。
你能解释一下并告诉我我哪里错了吗?
谢谢!
解决方法
如果有您的配置的确切示例以及预期和实际结果,那就太好了。非常广泛的主题,涉及大量设置。
一般来说,Calico Network policy 是与命名空间相关的资源,而 Calico Global network policy 不是。
网络策略资源 (NetworkPolicy) 表示一组有序的 应用于匹配一个端点的集合的规则 标签选择器。
NetworkPolicy 是一个命名空间资源。特定网络政策 命名空间仅适用于工作负载端点资源 命名空间。两个资源在同一个命名空间中,如果命名空间 两者的值设置相同。
GlobalNetworkPolicy 不是命名空间资源。全球网络政策 适用于所有命名空间中的工作负载端点资源,以及托管 端点资源。在 GlobalNetworkPolicy 中选择一个命名空间 使用 projectcalico.org/namespace 作为标签的标准选择器 name 和命名空间名称作为要比较的值,例如, projectcalico.org/namespace ==“默认”。
Calico 全球网络策略适用于所有命名空间中的所有工作负载(虚拟机和容器),以及主机(运行虚拟机管理程序的计算机,或容器运行时的容器)。
优先级源自 Selectors,这是一种非常强大的资源管理和排序方式。大多数情况下,您在测试不同选项时遇到了问题。看,就像这里:globalnetworkpolicy with networkpolicy not allowing expected traffic 。检查您的标签、选择器以及与此相关的所有内容。
还有范围。那里的问题可能很容易:
另请查看官方示例 Enable default deny for Kubernetes pods - 开始了解政策的好点子,其中有很多很好的建议,如何以最佳方式进行管理。并且他们还同时使用这两种策略(全局/正常)。
,全局与非全局不是决定策略应用顺序的因素。排序由 Calico NetworkPolicy 和 GlobalNetworkPolicy 资源上的“order”字段决定,“order”较小" 首先应用政策。
如果未指定,“order”默认为无穷大,因此未指定“order”的策略将最后应用。
Calico 还实现了 Kubernetes NetworkPolicy 资源,该资源没有明确的“订单”字段。为了根据 Calico 资源对它们进行排序,我们将 Kubernetes NetworkPolicy 资源视为它们具有 1000 的隐式“顺序”。
对于具有相同顺序值的策略,代码中有一个决胜局,但您不需要知道那是什么或依赖它,因为最好使用明确的“顺序”值,无论何时订购事宜。