要保护 Antrea Kubernetes 集群中的 Pod 之间的流量,您可以在 NSX 中创建分布式防火墙策略(安全策略),并将其应用于一个或多个 Antrea Kubernetes 集群。

注: 本文档使用术语“Antrea Kubernetes 集群”来表示具有 Antrea CNI 的 Kubernetes 集群。术语“Kubernetes 集群”是一个通用术语,它表示具有 Antrea CNI 的 Tanzu Kubernetes Grid (TKG) 集群、具有 Antrea CNI 的 OpenShift 集群或具有 Antrea CNI 的自助式 (Do It Yourself, DIY) Kubernetes 集群。

对于少数 UI 字段或标签,UI 使用术语“Antrea 容器集群”。在本文档的过程部分中,这些 UI 字段或标签保留“Antrea 容器集群”一词。对于所有自由格式文本,将使用术语“Antrea Kubernetes 集群”。

前提条件

  • 已向 NSX 注册 Antrea Kubernetes 集群。
  • NSX 部署中应用相应的安全许可证,以授权系统配置分布式防火墙安全策略。

过程

  1. 从浏览器中,通过 https://nsx-manager-ip-address 登录到 NSX Manager
  2. 单击安全选项卡,然后在策略管理下单击分布式防火墙
    此时将显示 类别特定的规则页面。
    注: 在浏览器中启动 NSX Manager 应用程序时, NSX Manager UI 会获取有关已注册的 Antrea Kubernetes 集群的信息。如果该应用程序 UI 已打开,则不会自动获取 Antrea Kubernetes 集群注册信息。根据当前 UI 设计,这是预期行为。如果在打开 NSX Manager 应用程序后注册了首个 Antrea Kubernetes 集群,请确保在导航到 类别特定的规则页面后刷新浏览器。手动刷新可确保在执行此过程的第 4 步时,UI 中显示特定于 Antrea 的 UI 元素。

    此手动浏览器刷新只需执行一次,而无需在每次将新的 Antrea Kubernetes 集群注册到 NSX 后都执行。

  3. 选择要在其中创建安全策略的类别。
    Antrea Kubernetes 集群当前不支持基于 MAC 地址的 L2(以太网)防火墙规则。 NSX 中的类别对应于 Antrea 中的层。在 Antrea Kubernetes 集群中按以下优先顺序降序实施安全策略:
    • “紧急”类别(最高优先级)
    • “基础架构”类别
    • “环境”类别
    • “应用程序”类别(最低优先级)

    在类别中,将按照规则的设置顺序从上到下处理防火墙规则。类别提供了一种组织规则的方法。例如,多个用户角色可以创建安全策略,而不会覆盖彼此的策略或相互冲突。例如,安全管理员可以在“紧急”类别中为特定隔离或允许规则创建策略。应用程序开发人员可以在“应用程序”类别中创建策略来保护应用程序中特定 Pod 之间的流量。网络管理员可以在“基础架构”类别中创建策略来定义共享服务(如 DHCP、DNS、Active Directory 等)的访问规则。

  4. 单击添加策略并指定策略配置设置。
    1. 输入策略的唯一名称。
    2. 默认情况下,该策略将应用于分布式防火墙。单击应用对象旁边的编辑图标。
      此时将打开 设置应用对象页面。
    3. 选择 Antrea 容器集群选项。
    4. (必选) 至少选择一个集群以确定安全策略的实施范围或范围。
      策略的跨度可以是单个 Antrea Kubernetes 集群,也可以是多个 Antrea Kubernetes 集群。
    5. (可选) 通过选择 Antrea 组来限制策略的跨度。
      在策略的 应用对象中选择 Antrea 组后,此配置将用于策略中的所有规则。要为策略中的每个规则指定一组不同的 Antrea 组,请跳过此步骤,然后在策略中添加规则时指定 应用对象
      注: 不能在策略的 应用对象中使用具有 IP 地址的 Antrea 组,因为 NSX 无法通过 IP 地址计算有效的 Pod 成员。
    6. (可选) 单击最右上角的齿轮图标可指定策略的高级配置设置。
      对于应用于 Antrea Kubernetes 集群的安全策略, TCP 严格模式有状态设置将灰显。当前不支持这些设置。

      仅支持已锁定注释设置。默认情况下,不会锁定策略。要防止多个用户对策略进行更改,请打开已锁定选项。

    7. 单击发布
      您可以添加多个策略,然后将所有这些策略一起发布。

      策略状态最初会更改为“正在进行中”,在 Antrea Kubernetes 集群中成功实现策略后,其状态将更改为“成功”。如果策略实现因任何原因而失败,请单击失败状态以在弹出窗口中查看错误。

  5. 选中该策略名称旁边的复选框,然后单击添加规则。输入规则名称。
    默认情况下,规则的 目标服务应用对象列将显示为 任意
    注: 应用于 Antrea Kubernetes 集群的规则当前不支持上下文配置文件。
  6. 指定规则设置。
    1. 目标列中,单击编辑图标,然后选择一个或多个 Antrea 组。
      以下限制适用于指定规则源和目标:
      • 只能选择 Antrea 组。不能在规则中使用具有 NSX 成员的组。换句话说,规则不能同时包含 Antrea 组和类型为常规仅限 IP 地址的组。
      • 列中选择组后,目标列将不适用。您可以在规则的应用对象中添加目标。
      • 目标列中选择组后,列将不适用。您可以在规则的应用对象中添加源。

      如果在规则中设置应用对象,将筛选从应用对象的流量。在规则中设置目标应用对象,筛选从应用对象目标的流量。Antrea 数据路径对应用对象组成员进行筛选。

    2. (可选) 服务列中,单击编辑图标并选择服务。
      如果未选择任何服务,则会使用“任意”。

      指定服务时,以下限制适用:

      • 仅支持 TCP 和 UDP 服务。不支持所有其他服务。
      • 原始端口和协议组合仅支持 TCP 和 UDP 服务类型。
      • 仅支持目标端口。不支持源端口。
    3. 应用对象列中,单击编辑图标,然后选择要将规则应用到的 Antrea 组。

      如果未选择任何组,则会使用“任意”。

      注:
      • 不能在规则的应用对象中使用具有 IP 地址的 Antrea 组,因为 NSX 无法通过 IP 地址计算有效的 Pod 成员。
      • 如果在策略和规则的应用对象中都指定了 Antrea 组,则策略的应用对象中的组将优先于规则的应用对象中的组。
    4. 操作下拉菜单中,选择以下选项之一。
      选项 描述
      允许

      允许具有指定源、目标和协议的所有 L3 流量通过当前防火墙上下文。与规则匹配并被接受的数据包将通过 Kubernetes 集群,就好像没有防火墙一样。

      丢弃

      丢弃具有指定的源、目标和协议的数据包。丢弃数据包是一个静默操作,不会向源或目标发送通知。丢弃数据包将导致重试连接,直到达到重试阈值。

      拒绝

      拒绝具有指定的源、目标和协议的数据包。拒绝数据包是一种较友好的数据包阻止方式,因为将向发送方发送“无法到达目标 (destination unreachable)”消息。如果协议是 TCP,则会发送 TCP RST 消息。对于 UDP、ICMP 和其他 IP 连接,发送包含管理上被禁止的代码的 ICMP 消息。使用“拒绝”操作的一个好处是,在仅尝试一次后,就会向发送应用程序通知无法建立连接。

    5. 单击切换按钮可打开或关闭规则。
      默认情况下,规则处于打开状态。
    6. (可选) 单击齿轮图标以配置其他规则设置。
      规则设置 描述
      日志记录 默认情况下,日志记录处于关闭状态。防火墙日志包含在 Antrea 代理日志中。如果为 Antrea Kubernetes 集群创建支持包请求并从集群中选择节点,则支持包包含这些节点的 Antrea 代理 日志。
      方向

      指从目标 Pod 角度来看的流量方向。

      在以下情况下,规则方向为只读并且不可编辑:
      • 在规则中指定源时,方向为“入站”。
      • 在规则中指定目标时,方向为“出站”。

      将源和目标设置为“任意”时,规则方向是可编辑的。在这种情况下,默认方向为“双向”。但是,您可以将方向更改为“入站”或“出站”。

      注释

      如果需要,请输入有关规则的任何注释。

      这些注释不会传播到 Antrea Kubernetes 集群。因此,规则注释不会在 Antrea 集群网络策略 规范中显示为注释。

  7. 单击发布可将规则推送到 Antrea Kubernetes 集群。
    您可以添加多个规则,然后将这些规则一起发布。
    注:Antrea Kubernetes 集群中实现安全策略后,就无法编辑策略的 应用对象。也就是说, NSX 不允许将安全策略的跨度从 Antrea 容器集群更改为 DFW

结果

Antrea Kubernetes 集群中会出现以下结果:
  • Antrea 网络插件会创建一个与每个应用于 Antrea Kubernetes 集群的分布式防火墙策略对应的集群网络策略。
  • 如果规则包含源,则会在 Antrea 集群网络策略 中创建相应的输入规则。
  • 如果规则包含目标,则会在 Antrea 集群网络策略 中创建相应的输出规则。
  • 如果规则包含“任意-任意”配置,则集群中的 Antrea 控制器 会将“任意-任意”规则拆分为两个规则:一个具有“任意-任意”配置的输入规则和一个具有“任意-任意”配置的输出规则。
注: Antrea 网络插件不会阻止您通过 kubectl 命令行更新或删除 Antrea 集群网络策略。但是,您必须避免执行此操作。原因是安全策略由 NSX 进行管理。因此, Antrea Kubernetes 集群中的 中央控制平面适配器 会立即覆盖通过 kubectl 命令行所做的策略更改。换句话说, NSX 是策略的事实来源。通过 kubectl 命令行对这些集群网络策略所做的更改不会显示在 NSX Manager 中。

下一步做什么

Antrea Kubernetes 集群中成功实现安全策略后,您可以执行以下可选任务:

  • 确认 Antrea 集群网络策略已显示在 Kubernetes 集群中。在每个 Antrea Kubernetes 集群中运行以下 kubectl 命令:
    $ kubectl get acnp
    注: Antrea 集群网络策略中的 priority 参数显示一个浮点值。这是预期的结果。 NSX Manager UI 不会显示分布式防火墙策略的优先级。 NSX 会在内部为每个策略的优先级分配一个整数值。此整数值是从一个较大的范围中分配的。但是, Antrea 网络插件会为 Antrea 集群网络策略的优先级分配较小的浮点数(绝对值)。因此, NSX 优先级值会在内部标准化为较小的浮点数。但是,将为 Antrea 集群网络策略保留在分布式防火墙类别中添加策略的顺序。

    您还可以在 NSX 清单中查看 Antrea 集群网络策略的详细信息。在 NSX Manager 中,导航到清单 > 容器 > 集群。展开集群名称,然后单击集群网络策略旁边的数字以查看策略的详细信息,包括 YAML 规范。

  • 使用以下 NSX API 查看策略统计信息:
    GET https://{nsx-mgr-ip}/api/v1/infra/domains{domain-id}/security-policies/{security-policy-name}/statistics?container_cluster_path=/infra/sites/{site-id}/enforcement-points/{enforcement-point-id}/cluster-control-planes/{cluster-name}
  • 在 UI 中查看运行时规则统计信息:
    1. NSX Manager 中,导航到安全 > 分布式防火墙
    2. 展开策略名称,然后单击每个规则最右上角的图形图标。
    3. 从下拉菜单中选择 Kubernetes 集群以查看每个 Kubernetes 集群的规则统计信息。

      将为已实施规则的每个 Kubernetes 集群单独计算规则统计信息。将不会汇总所有 Kubernetes 集群的统计信息并将其显示在 UI 中。规则统计信息每分钟计算一次。