第 4 章 网络策略
4.1. 关于网络策略 复制链接链接已复制到粘贴板!
了解网络策略对 MicroShift 的工作原理,以限制或允许到集群中的 pod 的网络流量。
4.1.1. 网络策略在 MicroShift 中如何工作 复制链接链接已复制到粘贴板!
在使用 MicroShift 的默认 OVN-Kubernetes Container Network Interface (CNI)插件的集群中,网络隔离由 firewalld 控制,它在主机上配置,并由 MicroShift 中创建的 NetworkPolicy
对象。支持同时使用 firewalld 和 NetworkPolicy
。
-
网络策略仅在 OVN-Kubernetes 控制的流量范围内工作,以便它们可以应用到除启用了
hostPort/hostNetwork
的 pod 以外的每个情况。 -
firewalld 设置也适用于启用了
hostPort/hostNetwork
的 pod。
在强制任何 NetworkPolicy
之前运行 firewalld 规则。
网络策略不适用于主机网络命名空间。启用主机网络的 Pod 不受网络策略规则的影响。但是,连接到 host-networked pod 的 pod 会受到网络策略规则的影响。
网络策略无法阻止来自 localhost 的流量。
默认情况下,MicroShift 节点中的所有 pod 都可从其他 pod 和网络端点访问。要隔离集群中的一个或多个 pod,您可以创建 NetworkPolicy
对象来指示允许的入站连接。您可以创建和删除 NetworkPolicy
对象。
如果一个 pod 由一个或多个 NetworkPolicy
对象中的选择器匹配,则 pod 只接受至少被其中一个 NetworkPolicy
对象允许的连接。未被任何 NetworkPolicy
对象选择的 pod 可以完全访问。
网络策略仅适用于 TCP、UDP、ICMP 和 SCTP 协议。其他协议不会受到影响。
以下示例 NetworkPolicy
对象演示了支持不同的情景:
拒绝所有流量:
要使项目默认为拒绝流量,请添加一个匹配所有 pod 但不接受任何流量的
NetworkPolicy
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 允许来自默认路由器的连接,这是 MicroShift 中的入口:
要允许 MicroShift 默认路由器的连接,请添加以下
NetworkPolicy
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 仅接受同一命名空间中的 pod 的连接:
要使 pod 接受同一命名空间中其他 pod 的连接,但拒绝其他命名空间中所有 pod 的连接,请添加以下
NetworkPolicy
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 仅允许基于 pod 标签的 HTTP 和 HTTPS 流量:
要对带有特定标签(以下示例中的
role=frontend
)的 pod 仅启用 HTTP 和 HTTPS 访问,请添加类似如下的NetworkPolicy
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用命名空间和 pod 选择器接受连接:
要通过组合使用命名空间和 pod 选择器来匹配网络流量,您可以使用类似如下的
NetworkPolicy
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
NetworkPolicy
对象是可添加的;也就是说,您可以组合多个 NetworkPolicy
对象来满足复杂的网络要求。
例如,对于上例中定义的 NetworkPolicy
对象,您可以定义 allow-same-namespace
和 allow-http-and-https
策略。该配置允许带有标签 role=frontend
的 pod 接受每个策略允许的任何连接。即,任何端口上来自同一命名空间中的 pod 的连接,以及端口 80
和 443
上的来自任意命名空间中 pod 的连接。
4.1.2. 使用 OVN-Kubernetes 网络插件优化网络策略 复制链接链接已复制到粘贴板!
在设计您的网络策略时,请参考以下指南:
-
对于具有相同
spec.podSelector
spec 的网络策略,使用带有多个ingress
或egress
规则的一个网络策略比带有ingress
或egress
子集的多个网络策略更高效。 每个基于
podSelector
或namespaceSelector
spec 的ingress
或egress
规则会生成一个的 OVS 流数量,它与由网络策略选择的 pod 数量 + 由 ingress 或 egress 选择的 pod 数量
成比例因此,最好使用在一个规则中可以选择您所需的 pod 的podSelector
或namespaceSelector
规格,而不是为每个 pod 创建单独的规则。例如,以下策略包含两个规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下策略表示这两个规则与以下相同的规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 相同的指南信息适用于
spec.podSelector
spec。如果不同的网络策略有相同的ingress
或egress
规则,则创建一个带有通用的spec.podSelector
spec 可能更有效率。例如,以下两个策略有不同的规则:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下网络策略将这两个相同的规则作为一个:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当只有多个选择器表示为一个选择器时,您可以应用此优化。如果选择器基于不同的标签,则可能无法应用此优化。在这些情况下,请考虑为网络策略优化应用一些新标签。
4.1.2.1. OVN-Kubernetes 中的 NetworkPolicy CR 和外部 IP 复制链接链接已复制到粘贴板!
在 OVN-Kubernetes 中,NetworkPolicy
自定义资源(CR)强制执行严格的隔离规则。如果服务使用外部 IP 公开,网络策略可以阻止来自其他命名空间的访问,除非明确配置为允许流量。
要允许在命名空间间访问外部 IP,请创建一个 NetworkPolicy
CR,该 CR 明确允许来自所需命名空间的入口流量,并确保允许流量在指定的服务端口中。在不允许流量到所需端口的情况下,访问可能仍然会被限制。
输出示例
其中:
<policy_name>
- 指定策略的名称。
<my_namespace>
- 指定部署策略的命名空间的名称。
如需了解更多详细信息,请参阅"关于网络策略"。