8.5. 关于生成策略

Kubernetes 网络策略控制哪些 pod 接收传入的网络流量,以及哪些 pod 可以发送传出流量。通过使用网络策略来启用和禁用 pod 的流量,您可以限制网络攻击面。

这些网络策略是 YAML 配置文件。通常很难深入了解网络流,并手动创建这些文件。您可以使用 Red Hat Advanced Cluster Security for Kubernetes (RHACS)生成这些文件。当您自动生成网络策略时,RHACS 遵循以下准则:

  • RHACS 为命名空间中的每个部署生成一个网络策略。策略的 pod 选择器是部署的 pod 选择器。

    • 如果部署已有网络策略,RHACS 不会生成新策略或删除现有策略。
  • 生成的策略只将流量限制到现有部署。

    • 您稍后创建的部署不会有任何限制,除非您为它们创建或生成新的网络策略。
    • 如果新部署需要与具有网络策略的部署联系,您可能需要编辑网络策略以允许访问。
  • 每个策略的名称与部署名称相同,前缀为 stackrox-generated-。例如,生成的网络策略中的部署 depABC 的策略名称为 stackrox-generated-depABC。所有生成的策略也都有一个标识标签。
  • 如果满足以下条件之一,RHACS 会生成一条规则,允许从任何 IP 地址的流量:

    • 部署在所选时间内具有来自集群外部的传入连接
    • 部署通过节点端口或负载均衡器服务公开
  • RHACS 为每个部署生成一个 入口 规则,从中有传入连接。

    • 对于同一命名空间中的部署,此规则使用来自其他部署的 pod 选择器标签。
    • 对于不同命名空间中的部署,此规则使用命名空间选择器。要实现此目的,RHACS 会自动将标签 namespace.metadata.stackrox.io/name 添加到每个命名空间中。
重要

在个别情况下,如果独立 pod 没有任何标签,则生成的策略允许来自或到 pod 的整个命名空间的流量。

8.5.1. 从网络图(1.0)生成网络策略

Kubernetes 网络策略控制哪些 pod 接收传入的网络流量,以及哪些 pod 可以发送传出流量。通过使用网络策略来启用和禁用 pod 的流量,您可以限制网络攻击面。

这些网络策略是 YAML 配置文件。通常很难深入了解网络流,并手动创建这些文件。Red Hat Advanced Cluster Security for Kubernetes 可让您根据环境中实际观察的网络流量流自动生成这些网络策略。

您可以从网络图形视图生成网络策略。

生成的策略应用到网络图中显示的部署,它们允许所选时间观察到的所有网络流量。

流程

  1. 在 RHACS 门户中,进入到 Network Graph
  2. 如果还没有选择正确的,请在顶栏的菜单中选择集群名称。
  3. 选择一个或多个命名空间。
  4. 如果只想为某些部署生成策略,请使用 Add one or multiple deployment filters 字段来添加用于过滤部署的条件。如果没有添加过滤器,Red Hat Advanced Cluster Security for Kubernetes 会为集群中的所有部署生成策略。
  5. 从顶栏的菜单中,选择适当的时间。如果选择的时间太短,它会留下定期或不经常的网络通信。
  6. 选择 Network Policy Simulator
  7. 在打开的面板中,如果您不希望在 Red Hat Advanced Cluster Security for Kubernetes 生成的策略中限定端口和协议,请选择 Exclude 端口 & amp; 协议。
  8. 选择 Generate and simulate network policies。生成的网络策略配置 YAML 在同一个面板中打开,网络图则显示策略的影响。

8.5.2. 保存生成的策略

您可以从 RHACS 下载并保存生成的网络策略。使用此选项将策略提交到 Git 等版本控制系统中。

流程

  • 生成网络策略后,点 Network Policy Simulator 面板中的 Download YAML 图标。

8.5.3. 测试生成的策略

下载 RHACS 生成的网络策略后,您可以通过将其应用到集群来测试它们。

流程

  1. 要使用保存的 YAML 文件创建策略,请使用以下命令:

    $ oc create -f "<generated_file>.yml" 1
    1
    如果使用 Kubernetes,请输入 kubectl 而不是 oc
  2. 如果生成的策略造成问题,您可以通过运行以下命令来删除它们:

    $ oc delete -f "<generated_file>.yml" 1
    1
    如果使用 Kubernetes,请输入 kubectl 而不是 oc
警告

直接应用网络策略可能会导致运行应用程序出现问题。在将网络策略应用到生产工作负载之前,始终在开发环境或测试集群中下载并测试网络策略。

8.5.4. 应用生成的策略

您可以从 RHACS 门户应用生成的网络策略。

流程

  • 要从 RHACS 中直接应用生成的策略,请选择 Apply Network Policies
警告

直接应用网络策略可能会导致运行应用程序出现问题。在将网络策略应用到生产工作负载之前,始终在开发环境或测试集群中下载并测试网络策略。

8.5.5. 删除生成的策略

如果您直接应用生成的策略并希望删除它们,请在 Network Policy Simulator 面板中选择 Revert 最近应用的 YAML 图标。

流程

  1. 在 RHACS 门户中,进入到 Network Graph (1.0)
  2. 如果还没有选择正确的,请在顶栏的菜单中选择集群名称。
  3. 选择一个或多个命名空间。
  4. 选择 Network Policy Simulator
  5. 选择 View active YAMLS
  6. 选择 Revert 最近应用的 YAML 图标。

8.5.6. 删除网络图(1.0)中自动生成的所有策略

您可以使用 RHACS 从您创建的集群中删除所有生成的策略。

流程

  • 运行以下命令:

    $ oc get ns -o jsonpath='{.items[*].metadata.name}' | \
    xargs -n 1 oc delete networkpolicies -l \
    'network-policy-generator.stackrox.io/generated=true' -n 1
    1
    如果使用 Kubernetes,请输入 kubectl 而不是 oc