×

一个 Kubernetes 网络策略 指定了 Pod 组之间以及与其他网络端点如何通信的规范。这些网络策略配置为 YAML 文件。仅查看这些文件,通常很难确定应用的网络策略是否实现了所需的网络拓扑。

Red Hat Advanced Cluster Security for Kubernetes (RHACS) 收集来自您的编排器的所有已定义网络策略,并提供工具来简化这些策略的使用。

为了支持网络策略执行,RHACS 提供以下工具:

  • 网络拓扑图 (Network graph)

  • 网络策略生成器 (Network policy generator)

  • 网络策略模拟器

  • 构建时网络策略生成器

网络图

关于网络图

网络图提供有关您环境中部署、网络流量和网络策略的高级和详细信息。

RHACS 处理每个安全集群中的所有网络策略,以显示哪些部署可以相互联系以及哪些部署可以访问外部网络。它还监控运行中的部署并跟踪它们之间的流量。您可以在网络图中查看以下项目

内部实体

这些表示部署和属于私有地址空间(如RFC 1918中定义)的 IP 地址之间的连接。更多信息,请参阅“涉及内部实体的连接”。

外部实体

这些表示部署和不属于私有地址空间(如RFC 1918中定义)的 IP 地址之间的连接。更多信息,请参阅“网络图中的外部实体和连接”。

网络组件

您可以从顶部菜单中选择要显示在图上的命名空间(由NS标签指示)和部署(由D标签指示),以选择集群(由CL标签指示)。您可以通过使用下拉列表并选择过滤条件(例如常见漏洞和披露 (CVE)、标签和镜像)来进一步过滤部署。

网络流量

您可以为图表选择以下流量之一

活动流量

选择此默认选项将显示观察到的流量,重点关注您选择的命名空间或特定部署。您可以选择要显示信息的期间。

非活动流量

选择此选项将显示网络策略允许的潜在流量,帮助您识别实现更严格隔离所需的缺失网络策略。您可以选择要显示信息的期间。

网络策略

您可以查看所选组件的现有策略,或查看没有策略的组件。您还可以从网络图视图模拟网络策略。有关更多信息,请参阅“从网络图模拟网络策略”。

您可以使用下图所示的网络图单击项目并查看有关它们的附加信息。您还可以执行图中的操作,例如将网络流量添加到基线。

Overview of the Network graph showing deployments
图 1. 网络图示例

以下提示可以帮助您使用网络图

  • 打开图例可以提供有关所用符号及其含义的信息。图例显示了代表网络图上的命名空间、部署和连接的符号的解释性文本。

  • 从下拉列表中选择其他显示选项可以控制图表是否显示图标,例如网络策略状态徽章、活动外部流量徽章以及边缘连接的端口和协议标签。

  • RHACS 检测网络流量的变化,例如节点加入或离开。如果检测到更改,网络图将显示通知,显示可用的更新数量。为了避免打断您的注意力,图表不会自动更新。单击通知以更新图表。

当您单击图表中的项目时,重新排列的侧面板以及可折叠的部分将显示有关该项目的信息。您可以点击以下项目

  • 部署

  • 命名空间

  • 外部实体

  • CIDR 块

  • 外部组

侧面板根据您选择的图表中的项目显示相关信息。标题(在此示例中为“visa-processor”)中项目名称旁边的DNS标签指示它是部署还是命名空间。以下示例说明了部署的侧面板。

Side panel for a deployment
图 2. 部署示例的侧面板

查看命名空间时,侧面板包含搜索栏和部署列表。您可以单击部署以查看其信息。侧面板还包含一个网络策略选项卡。在此选项卡中,您可以查看、复制到剪贴板或导出在该命名空间中定义的任何网络策略,如下例所示。

Side panel for a namespace showing network policy information
图 3. 命名空间示例的侧面板

网络图中的外部实体和连接

网络图视图显示托管集群和外部源之间的网络连接。此外,RHACS 会自动发现并突出显示公共无类别域间路由 (CIDR) 地址块,例如 Google Cloud、AWS、Microsoft Azure、Oracle Cloud 和 Cloudflare。使用此信息,您可以识别具有活动外部连接的部署,并确定它们是否正在进行或接收来自网络外部的未授权连接。

默认情况下,外部连接指向网络图中的公共外部实体图标和不同的 CIDR 地址块。但是,您可以选择不显示自动发现的 CIDR 块,方法是单击管理 CIDR 块并取消选择自动发现的 CIDR 块

RHACS 包含以下云提供商的 IP 范围

  • Google Cloud

  • AWS

  • Microsoft Azure

  • Oracle Cloud

  • Cloudflare

RHACS 每 7 天获取并更新一次云提供商的 IP 范围,并每天更新 CIDR 块。如果您使用离线模式,则可以通过安装新的支持包来更新这些范围。

下图提供了网络图的示例。在此示例中,根据用户选择的选项,图表描绘了所选命名空间中的部署。在您单击部署等项目之前,不会显示流量流。图表使用红色徽章指示缺少策略并因此允许所有网络流量的部署。

涉及内部实体的连接

网络图可用于识别与任何已知部署或 CIDR 块都不属于的实体具有活动连接的部署。其中一些连接从未到达集群外部,而是在集群的私有网络内建立。网络图将其表示为与内部实体的连接。

与内部实体的连接表示部署和属于私有地址空间(如RFC 1918中定义)的 IP 地址之间的连接。在某些情况下,Sensor 无法识别连接中涉及的一个或两个部署。在这种情况下,系统会分析 IP 地址并确定连接是内部连接还是外部连接。

以下场景可能导致连接被分类为涉及内部实体的连接

  • 接受连接的部署(服务器)的 IP 地址更改或删除,而发起连接的一方(客户端)仍在尝试访问它

  • 与编排器 API 通信的部署

  • 使用网络 CNI 插件(例如 Calico)进行通信的部署

  • 传感器重启会重置IP地址与过去部署的映射,例如,当传感器无法识别过去实体的IP地址或现有实体的过去IP地址时。

  • 连接涉及一个未由编排器管理的实体(在某些情况下,这可能被视为集群外部),但它使用的是RFC 1918中定义的私有地址空间中的IP地址。

内部实体用以下图形所示的图标表示。点击**内部实体**显示这些实体的流量。

Network graph showing internal entities
图4. 内部实体示例

访问控制和权限

要查看网络图,用户必须至少拥有授予**网络图查看器**默认权限集的权限。

以下权限授予**网络图查看器**权限集:

  • 读取Deployment

  • 读取NetworkGraph

  • 读取NetworkPolicy

更多信息,请参阅“附加资源”部分中的“系统权限集”。

附加资源

查看部署信息

网络图提供RHACS已发现的部署、命名空间和连接的可视化映射。通过点击图中的部署,您可以查看有关部署的信息,包括以下详细信息:

  • 网络安全,例如流量数量、现有或缺失的网络策略规则以及监听端口。

  • 标签和注释

  • 端口配置

  • 容器信息

  • 入口和出口连接的异常和基线流量,包括协议和端口号。

  • 网络策略

步骤

要查看命名空间中部署的详细信息:

  1. 在RHACS门户中,转到**网络图**,然后从下拉列表中选择您的集群。

  2. 点击**命名空间**列表,并使用搜索字段查找命名空间,或选择单个命名空间。

  3. 点击**部署**列表,并使用搜索字段查找部署,或选择要显示在网络图中的单个部署。

  4. 在网络图中,点击部署以查看信息面板。

  5. 点击**详细信息**、**流量**、**基线**或**网络策略**选项卡以查看相应的信息。

在网络图中查看网络策略

网络策略指定一组 Pod 如何相互通信以及与其他网络端点通信。Kubernetes NetworkPolicy 资源使用标签来选择 Pod 并定义规则,这些规则指定允许哪些流量进入或离开所选 Pod。RHACS 在网络图中发现并显示所有 Kubernetes 集群、命名空间、部署和 Pod 的网络策略信息。

步骤
  1. 在RHACS门户中,转到**网络图**,然后从下拉列表中选择您的集群。

  2. 点击**命名空间**列表并选择单个命名空间,或使用搜索字段查找命名空间。

  3. 点击**部署**列表并选择单个部署,或使用搜索字段查找部署。

  4. 在网络图中,点击部署以查看信息面板。

  5. 在**详细信息**选项卡的**网络安全**部分,您可以查看有关网络策略规则的摘要消息,这些消息提供以下信息:

    • 如果网络中存在规范入口或出口流量的策略。

    • 如果您的网络缺少策略,因此允许所有入口或出口流量。

  6. 要查看网络策略的YAML文件,您可以点击策略规则,或点击**网络策略**选项卡。

在网络图中配置CIDR块

您可以指定自定义CIDR块或配置网络图中自动发现的CIDR块的显示。

步骤
  1. 在RHACS门户中,转到**网络图**,然后选择**管理CIDR块**。您可以执行以下操作:

    • 切换**自动发现的CIDR块**以隐藏网络图中的自动发现的CIDR块。

      隐藏自动发现的CIDR块后,所有集群(而不仅仅是网络图中选定的集群)都会隐藏自动发现的CIDR块。

    • 通过执行以下步骤,将自定义CIDR块添加到图表:

      1. 在字段中输入CIDR名称和CIDR地址。要添加其他CIDR块,请点击**添加CIDR块**并输入每个块的信息。

      2. 点击**更新配置**保存更改。

使用网络图生成和模拟网络策略

关于从网络图生成策略

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

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

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

    • 如果部署已具有网络策略,则 RHACS 不会生成新策略或删除现有策略。

      生成的策略仅限制与现有部署的流量。

    • 您以后创建的部署将没有任何限制,除非您为其创建或生成新的网络策略。

    • 如果新的部署需要联系具有网络策略的部署,您可能需要编辑网络策略以允许访问。

  • 每个策略的名称与部署名称相同,前缀为stackrox-generated-。例如,生成的网络策略中部署depABC的策略名称为stackrox-generated-depABC。所有生成的策略也都有一个标识标签。

  • 如果满足以下条件之一,RHACS 将生成一条允许来自任何 IP 地址的流量的规则:

    • 部署在选定时间内从集群外部收到传入连接。

    • 部署通过节点端口或负载均衡器服务公开。

  • RHACS 为每个存在传入连接的部署生成一个ingress规则。

    • 对于同一命名空间中的部署,此规则使用其他部署的 Pod 选择器标签。

    • 对于不同命名空间中的部署,此规则使用命名空间选择器。为了实现这一点,RHACS 会自动向每个命名空间添加一个标签namespace.metadata.stackrox.io/name

在极少数情况下,如果独立 Pod 没有任何标签,则生成的策略允许来自或去往 Pod 的整个命名空间的流量。

在网络图中生成网络策略

RHACS 允许您根据环境中实际观察到的网络通信流自动生成网络策略。

您可以根据在网络图中选择的集群、命名空间和部署生成策略。策略将为网络图当前范围中包含的任何部署生成。例如,当前范围可能包括整个集群、集群和命名空间,或在所选命名空间中单独选择的部署。您还可以通过应用过滤部署字段中的任何筛选器(以及集群、命名空间和部署选择的任何组合)来进一步缩小范围。例如,您可以将范围缩小到特定集群和命名空间中受特定 CVE 影响的部署。策略是从基线发现期间观察到的流量生成的。

  1. 在 RHACS 门户中,转到网络图

  2. 选择一个集群,然后选择一个或多个命名空间。

  3. 可选:选择单个部署以将生成的策略限制为仅这些部署。您还可以使用过滤部署功能来进一步缩小范围。

  4. 在网络图标题中,选择网络策略生成器

  5. 可选:在打开的信息面板中,选择排除端口和协议,以便在从基线生成网络策略时删除端口/协议限制。

    例如,nginx3 部署与 nginx4 建立端口 80 连接,这包含在 nginx4 的基线中。如果生成策略且未选中此复选框(默认行为),则生成的策略会将 nginx3nginx4 的允许连接限制为仅端口 80。如果选中此选项生成策略,则生成的策略将允许 nginx3nginx4 的连接中的任何端口。

  6. 单击生成并模拟网络策略。RHACS 将为您选择的范围生成策略。此范围显示在生成网络策略面板的顶部。

    单击范围内的部署信息将显示包含的部署列表。

  7. 可选:单击面板中的下载图标,将生成的网络策略配置 YAML 文件复制到剪贴板或下载。

  8. 可选:要将生成的网络策略与现有网络策略进行比较,请单击比较。现有和生成的网络策略的 YAML 文件将并排显示。

    某些项目没有生成的策略,例如具有现有入口策略的命名空间或某些受保护命名空间(例如 stackroxacs)中的部署。

  9. 可选:单击操作菜单以执行以下活动

    • 与通知程序共享 YAML 文件:将 YAML 文件发送到您已配置的系统通知程序之一,例如 Slack、ServiceNow 或使用通用 Webhook 的应用程序。这些通知程序是通过导航到平台配置集成来配置的。有关更多信息,请参阅“其他资源”部分中的文档。

    • 根据活动流量重建规则:刷新显示的生成策略。

    • 将规则恢复到先前应用的 YAML:删除模拟策略并恢复到上次网络策略。

在网络图中保存生成的策略

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

步骤
  • 生成网络策略后,单击网络策略模拟器面板中的下载 YAML 图标。

在网络图中测试生成的策略

下载 RHACS 生成的网络策略后,您可以通过使用 CLI 或您的自动化部署过程将其应用到您的集群来测试它们。您不能直接在网络图中应用生成的网络策略。

步骤
  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

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

在网络图中恢复到先前应用的策略

您可以删除策略并恢复到先前应用的策略。

步骤
  1. 在 RHACS 门户中,转到网络图

  2. 从顶部栏的菜单中选择集群名称。

  3. 选择一个或多个命名空间和部署。

  4. 选择模拟网络策略

  5. 选择查看活动 YAML

  6. 操作菜单中,选择将规则恢复到先前应用的 YAML

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

删除网络图中所有自动生成的策略

您可以删除使用 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

从网络图模拟网络策略

您当前的网络策略可能会允许不需要的网络通信。您可以使用网络策略生成器创建网络策略,以将入口流量限制为一组部署的计算基线。

网络图不会在可视化中显示生成的策略。生成的策略仅用于入口流量,并且不会生成限制出口流量的策略。

步骤
  1. 在 RHACS 门户中,转到网络图

  2. 选择一个集群,然后选择一个或多个命名空间。

  3. 在网络图标题上,选择网络策略生成器

  4. 可选:要生成包含用于模拟的网络策略的 YAML 文件,请单击生成并模拟网络策略。有关更多信息,请参阅“在网络图中生成网络策略”。

  5. 上传要用于模拟的网络策略的 YAML 文件。网络图视图将显示您提出的网络策略将实现的目标。执行以下步骤

    1. 单击上传 YAML,然后选择文件。

    2. 单击打开。系统将显示一条消息以指示上传策略的处理状态。

  6. 您可以通过单击查看活动 YAML 选项卡,然后从下拉列表中选择策略来查看与当前网络策略相对应的活动 YAML 文件。您还可以执行以下操作

    • 单击相应的按钮以复制或下载显示的 YAML 文件。

    • 使用操作菜单根据活动流量重建规则或将规则恢复到先前应用的 YAML。有关更多信息,请参阅“在网络图中生成网络策略”。

关于网络图中的网络基线

在 RHACS 中,您可以通过使用网络基线来最大限度地降低风险。这是一种主动方法,可以确保您的基础设施安全。RHACS 首先发现现有的网络流量并创建一个基线,然后将此基线之外的网络流量视为异常。

安装 RHACS 时,没有默认的网络基线。随着 RHACS 发现网络流量,它会创建一个基线,然后将所有发现的网络流量添加到其中,遵循以下准则

  • 当 RHACS 发现新的网络活动时,它会将该网络流量添加到网络基线。

  • 网络流量不会显示为异常流量,也不会触发任何违规。

发现阶段结束后,将执行以下操作

  • RHACS 将停止向网络基线添加网络流量。

  • 不在网络基线中的新网络流量将显示为异常流量,但不会触发任何违规。

从网络图查看网络基线

您可以从网络图视图查看网络基线。

步骤
  1. 点击**命名空间**列表,并使用搜索字段查找命名空间,或选择单个命名空间。

  2. 点击**部署**列表,并使用搜索字段查找部署,或选择要显示在网络图中的单个部署。

  3. 在网络图中,点击部署以查看信息面板。

  4. 选择**基线**选项卡。使用**按实体名称筛选**字段进一步限制显示的流量。

  5. 可选:您可以通过执行以下一项操作将基线流量标记为异常

    • 选择单个实体。单击溢出菜单,kebab,然后选择**标记为异常**。

    • 选择多个实体,然后单击**批量操作**并选择**标记为异常**。

  6. 可选:选中复选框以排除端口和协议。

  7. 可选:要将基线保存为网络策略 YAML 文件,请单击**将基线下载为网络策略**。

从网络图下载网络基线

您可以从网络图视图将网络基线下载为 YAML 文件。

步骤
  1. 在 RHACS 门户中,转到网络图

  2. 点击**命名空间**列表,并使用搜索字段查找命名空间,或选择单个命名空间。

  3. 点击**部署**列表,并使用搜索字段查找部署,或选择要显示在网络图中的单个部署。

  4. 在网络图中,点击部署以查看信息面板。

  5. **基线**选项卡列出了基线流量。使用**按实体名称筛选**字段进一步限制流量列表。

  6. 可选:选中复选框以排除端口和协议。

  7. 单击**将基线下载为网络策略**。

配置网络基线时间范围

您可以使用ROX_NETWORK_BASELINE_OBSERVATION_PERIODROX_BASELINE_GENERATION_DURATION环境变量来配置观察期和网络基线生成持续时间。

步骤
  1. 通过运行以下命令设置ROX_NETWORK_BASELINE_OBSERVATION_PERIOD环境变量

    $ oc -n stackrox set env deploy/central \(1)
      ROX_NETWORK_BASELINE_OBSERVATION_PERIOD=<value> (2)
    1 如果您使用 Kubernetes,请输入 kubectl 代替 oc
    2 值必须是时间单位,例如:300ms-1.5h2h45m。有效时间单位为nsusµsmssmh
  2. 通过运行以下命令设置ROX_BASELINE_GENERATION_DURATION环境变量

    $ oc -n stackrox set env deploy/central \(1)
      ROX_BASELINE_GENERATION_DURATION=<value> (2)
    1 如果您使用 Kubernetes,请输入 kubectl 代替 oc
    2 值必须是时间单位,例如:300ms-1.5h2h45m。有效时间单位为nsusµsmssmh

在网络图中启用基线违规警报

您可以配置 RHACS 以检测异常网络流量并为不在基线中的流量触发违规。这可以帮助您在使用网络策略阻止流量之前确定网络中是否包含不需要的流量。

步骤
  1. 点击**命名空间**列表,并使用搜索字段查找命名空间,或选择单个命名空间。

  2. 点击**部署**列表,并使用搜索字段查找部署,或选择要显示在网络图中的单个部署。

  3. 在网络图中,点击部署以查看信息面板。

  4. 在**基线**选项卡中,您可以查看基线流量。使用**按实体名称筛选**字段进一步限制显示的流量。

  5. 切换**基线违规警报**选项。

    • 切换**基线违规警报**选项后,异常网络流量将触发违规。

    • 您可以再次切换**基线违规警报**选项以停止接收异常网络流量的违规。