使用 Alauda Security Service 生成网络策略

Alauda Security Service 可基于已观察到的网络流量自动生成 Kubernetes 网络策略,帮助你保护 pod 通信并缩小攻击面。

概述

Kubernetes 网络策略定义了哪些 pod 可以接收或发送网络流量。手动创建这些 YAML 文件可能很复杂。Alauda Security Service 通过按照以下原则生成策略来简化这一过程:

  • 每个 Deployment 对应一个策略: Alauda Security Service 会为所选 namespace 中的每个 deployment 生成一个网络策略,并使用该 deployment 的 pod selector。

    • 如果某个 deployment 已经存在网络策略,Alauda Security Service 不会覆盖或删除它。
    • 新的 deployment 在你为其生成或创建新策略之前,不受限制。
    • 如果新的 deployment 需要访问受保护的 deployment,你可能需要更新该策略。
  • 命名规范: 每个策略的名称为 stackrox-generated-<deployment-name>,并包含一个用于标识的 label。

  • 允许外部流量: 如果满足以下条件之一,Alauda Security Service 会生成一条允许来自任意 IP 的流量的规则:

    • 该 deployment 在所选时间段内接收到了来自集群外部的连接,或者
    • 该 deployment 通过 node port 或 load balancer service 暴露。
  • Ingress 规则: 对于每个已观察到的入站连接:

    • 如果来自相同的 namespace,Alauda Security Service 会使用来源 deployment 的 pod selector。
    • 如果来自不同的 namespace,Alauda Security Service 会使用 namespace selector,并在需要时自动为 namespace 添加 label。

注意: 如果某个独立 pod 缺少 label,生成的策略可能会允许来自整个 namespace 的流量,或允许流向整个 namespace 的流量。

如何生成网络策略

你可以通过 Network Graph 页面为集群、namespace 或特定 deployment 生成策略。

要生成网络策略,请按以下步骤操作:

  1. 在 Alauda Security Service 门户中,进入 Network Graph
  2. 选择一个集群和一个或多个 namespace。
  3. (可选)选择特定 deployment,或使用 Filter deployments 缩小范围。
  4. 在标题栏中单击 Network policy generator
  5. 查看生成器面板中显示的当前范围。在当前 UI 中,范围摘要可以显示所选 deployment 数量、namespace 和集群。
  6. 在生成器中,根据需要使用以下可用区域:
    • Simulate network policies
    • View active YAMLS
  7. (可选)选择 Exclude ports & protocols,从生成的规则中移除端口和协议限制。
  8. 单击 Generate and simulate network policies
  9. (可选)如果你希望预览现有网络策略文件的效果,而不是生成新文件,可以使用 Upload YAML。当前 UI 提供拖放上传区域。
  10. (可选)在对比或生成新输出之前,先在 View active YAMLS 中查看当前生效的策略 YAML。
  11. (可选)在输出准备好后,复制或下载生成的 YAML 文件。

注意: 某些 namespace(例如已有 ingress 策略或受保护的 namespace)可能不会生成策略。

提示: 生成器基于当前图表范围运行。首先选择目标集群和 namespace,通常会比保持范围过大得到更聚焦的结果。

下载并应用策略

生成策略后,你可以使用 CLI 或自动化工具将其下载并应用到集群。

应用策略:

$ kubectl create -f "<generated_file>.yml"

删除策略:

$ kubectl delete -f "<generated_file>.yml"

警告: 在将网络策略应用到生产环境之前,请务必先在开发或测试环境中进行验证,因为它们可能会影响正在运行的应用。

回滚和删除策略

  • 要回滚到之前的策略,请在 Alauda Security Service 门户中,针对所选范围使用可用的回滚或对比操作(如果页面提供了这些操作)。

  • 要删除所有自动生成的策略:

    $ kubectl get ns -o jsonpath='{.items[*].metadata.name}' | \
    xargs -n 1 kubectl delete networkpolicies -l \
    'network-policy-generator.stackrox.io/generated=true' -n

其他说明

  • Network Graph 不会可视化已生成的策略。
  • 生成的策略仅限制 ingress 流量;不会生成 egress 策略。