8.10. 启用 NetworkPolicy


ovs-subnetovs-multitenant 插件具有自己的传统网络隔离模型,不支持 Kubernetes NetworkPolicy。但是,NetworkPolicy 支持可以通过 ovs-networkpolicy 插件获得。

注意

Egress 策略类型、ipBlock 参数以及 OpenShift Container Platform 中无法组合 podSelectornamespaceSelector 参数的能力。

注意

不要在默认的 OpenShift Container Platform 项目中应用 NetworkPolicy 功能,因为它们可能会破坏与集群的通信。

警告

NetworkPolicy 规则不适用于主机网络命名空间。启用主机网络的 Pod 不受 NetworkPolicy 规则的影响 。

配置为使用 ovs-networkpolicy 插件的 集群中,网络隔离完全由 NetworkPolicy 对象 控制。默认情况下,项目中的所有 pod 都可被其他 pod 和网络端点访问。要在一个项目中隔离一个或多个 Pod,您可以在该项目中创建 NetworkPolicy 对象来指示允许的入站连接。项目管理员可以在自己的项目中创建和删除 NetworkPolicy 对象。

没有指向它们的 NetworkPolicy 对象的 Pod 可以完全访问,而具有一个或多个指向它们的 NetworkPolicy 对象的 pod 会被隔离。这些隔离的 pod 只接受至少被其中一个 NetworkPolicy 对象接受的连接。

以下是一些支持不同场景的 NetworkPolicy 对象定义示例:

  • 拒绝所有流量

    要使项目"默认为拒绝"添加匹配所有 pod 但不接受任何流量的 NetworkPolicy 对象。

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: deny-by-default
    spec:
      podSelector:
      ingress: []
  • 仅接受项目中 pod 的连接

    要使 pod 接受同一项目中其他 pod 的连接,但拒绝其他项目中所有 pod 的连接:

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: allow-same-namespace
    spec:
      podSelector:
      ingress:
      - from:
        - podSelector: {}
  • 只允许基于 pod 标签的 HTTP 和 HTTPS 流量

    要对带有特定标签的 Pod 仅启用 HTTP 和 HTTPS 访问(以下示例中 role=frontend),请添加类似如下的 NetworkPolicy 对象:

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: allow-http-and-https
    spec:
      podSelector:
        matchLabels:
          role: frontend
      ingress:
      - ports:
        - protocol: TCP
          port: 80
        - protocol: TCP
          port: 443

NetworkPolicy 对象是可添加的;也就是说,您可以组合多个 NetworkPolicy 对象来满足复杂的网络要求。

例如,对于以上示例中定义的 NetworkPolicy 对象,您可以在同一个项目中定义 allow-same-namespaceallow-http-and-https 策略。因此,允许带有标签 role=frontend 的 pod 接受每一策略所允许的任何连接。也就是说,任何端口上来自同一 命名空间中的 pod 的连接,以及端口 80443 上的来自 任意 命名空间中 pod 的连接。

8.10.1. 高效地使用 NetworkPolicy

NetworkPolicy 对象允许您在命名空间中通过标签来相互隔离不同的 pod。

NetworkPolicy 对象应用到单一命名空间中的大量 pod 时,效率较低。pod 标签不存在于 IP 级别上,因此 NetworkPolicy 对象会为使用 pod Selector 选择的每个 pod 之间生成单独的 OVS 流规则。

例如,在一个 NetworkPolicy 对象中如果 spec podSelectoringress podSelector 每个都匹配 200 个 pod,则会产生 40,000 (200*200) 个 OVS 流规则。这可能会减慢机器的速度。

若要减少 OVS 流规则的数量,可使用命名空间来包含需要隔离的 pod 组。

使用 namespaceSelectors 或空 podSelectors 选择整个命名空间的 NetworkPolicy 对象只会生成与命名空间的 VXLAN VNID 匹配的 OVS 流规则。

保留不需要在原始命名空间中隔离的 pod,并将需要隔离的 pod 移到一个或多个不同的命名空间中。

创建额外的目标跨命名空间策略,以允许来自隔离 pod 的特定流量。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.