仅当向 NSX 注册了一个或多个 Antrea 容器集群时,才能创建 Antrea 组。

如果检测到注册的 Antrea 容器集群,则 NSX Manager 在 UI 的添加组页面上显示一种名为 Antrea 的单独组类型。您必须选择该组类型才能添加 Antrea 组。

Antrea 组可以包含静态 IP 地址和/或成员资格条件。IP 地址可以是 Pod 或服务 IP 地址。

Antrea 组包含成员资格条件时,根据该成员资格条件计算的有效成员只能是 Pod。

注:
  • 仅当在分布式防火墙规则中使用 Antrea 组时,才会计算 Antrea 组的有效成员。

    如果添加了具有成员资格条件的 Antrea 组,但没有在任何分布式防火墙规则中使用这些组,则不会在 NSX 中计算或评估这些 Antrea 组的有效成员。换句话说,这些 Antrea 组的有效成员页面为空。

  • Antrea 组中添加静态 IP 地址时,无论是否在分布式防火墙规则中使用这些组,UI 中当前都不会显示有效成员。
要在 Antrea 组中添加成员资格条件,当前支持以下容器集群对象(成员类型):
  • 命名空间
  • 服务
  • Pod

成员资格条件概述

您可以使用单个或多个成员资格条件来添加 Antrea 组。成员资格条件由一个或多个条件组成。成员资格条件中的条件包含以下属性:
  • 容器集群对象(也称为成员类型)
  • 容器集群对象的名称或附加到容器对象的标记
  • 标记运算符和值(仅在使用标记时)
  • 范围运算符和值(仅在使用标记时)
成员资格条件中的条件可以使用相同的容器集群对象,也可以混合使用不同的容器集群对象。例如,如果成员资格条件包含三个条件,则前两个条件可以使用 Pod 对象,而第三个条件可以使用“命名空间”对象。但是,在成员资格条件中添加多个条件时,存在一些限制。请参见本主题后面的“支持和不支持的功能”部分。

默认情况下,NSX 会在成员资格条件中的每个条件后使用逻辑 AND 运算符。不支持使用其他逻辑运算符来连接成员资格条件中的条件。

示例:
成员资格条件 说明

条件 1:

Pod 标记等于 App,范围等于“服务器”

成员资格条件仅包含一个基于 Pod 对象的条件。未使用多个条件。此 Antrea 组的有效成员包括具有 App 标记的所有 Pod。

条件 2:

Pod 标记等于 App,范围等于“服务器”

Pod 标记等于 DB,范围等于“服务器”

Pod 标记等于 Web,范围等于“服务器”

成员资格条件包含三个条件。成员资格条件中的所有条件均基于 Pod 对象。此 Antrea 组的有效成员包括具有 App、DB 和 Web 标记的所有 Pod。

条件 3:

命名空间名称等于“生产”

服务名称等于“缓存”

成员资格条件包含两个混合使用“命名空间”对象和“服务”对象的条件。此 Antrea 组的有效成员包括与“生产”命名空间中“缓存”服务关联的所有 Pod。

使用 OR 或 AND 运算符连接成员资格条件

一个 Antrea 组支持多个成员资格条件。要连接条件,可以使用 OR 和 AND 运算符。默认情况下, NSX 会选择使用 OR 运算符来连接多个条件。只有在以下情况下才支持在两个条件之间使用 AND 运算符:
  • 这两个条件使用相同的容器集群对象。
  • 这两个成员资格条件都使用单个条件。
示例:
  • 成员资格条件 1、成员资格条件 2 和成员资格条件 3 均基于 Pod 对象,并且不包含多个条件。在这种情况下,可以使用 OR 或 AND 运算符来连接条件 1 和条件 2。同样,也可以使用 OR 或 AND 运算符来连接条件 2 和条件 3。
  • 成员资格条件 1 基于 Pod 对象,而成员资格条件 2 使用两个条件:一个条件使用“服务”对象,另一个条件使用“命名空间”对象。在这种情况下,仅支持使用 OR 运算符来连接条件 1 和条件 2。不允许使用 AND 运算符。
  • 成员资格条件 1 和成员资格条件 2 都基于 Pod 对象,而成员资格条件 3 使用两个条件:一个条件使用“服务”对象,另一个条件使用“命名空间”对象。在这种情况下,可以使用 AND 或 OR 运算符来连接条件 1 和条件 2。但是,只能使用 OR 运算符来连接条件 2 和条件 3。不允许使用 AND 运算符。

支持和不支持的功能

下表列出了在 Antrea 组中添加成员资格条件时支持的容器集群对象、标记运算符和范围运算符。
容器集群对象 对象属性 标记运算符 范围运算符 示例条件

命名空间

名称

等于

不适用

命名空间名称等于“生产”

命名空间

标记

等于

不等于

等于

命名空间标记等于 DB,范围等于“服务器”

服务

名称

不受支持

不受支持

服务名称等于“缓存”

Pod

标记

等于

不等于

等于

Pod 标记等于 App,范围等于“服务器”

  • “命名空间”对象和 Pod 对象当前不支持以下标记运算符:
    • 包含
    • 开头为
    • 结尾为
  • 在成员资格条件中,基于“服务”对象的条件必须与基于“命名空间”对象的“名称”属性的条件结合使用。换句话说,不允许仅使用“服务”对象的条件。
    示例:
    受支持 不受支持

    条件:

    服务名称等于“我的服务”

    命名空间名称等于“暂存”

    条件:

    服务名称等于“我的服务”

  • 在成员资格条件中,基于“服务”对象的条件不能与基于 Pod 对象的条件结合使用。但是,您可以在两个单独的成员资格条件中添加“服务”对象和 Pod 对象,然后使用 OR 运算符将它们连接起来。
    示例:
    受支持 不受支持

    条件 1:服务名称等于“我的服务”

    条件 2:Pod 标记等于 DB,范围等于“服务器”

    条件:

    服务名称等于“我的服务”

    Pod 标记等于 DB,范围等于“服务器”

  • 要在 Antrea 组中添加静态成员,支持使用“仅限 IP 地址”。容器集群对象不能作为静态成员添加到 Antrea 组中。
  • 在添加 Antrea 组时,如果尝试将组类型从 NSXAntrea 更改为常规,或者从 Antrea 更改为仅限 IP 地址 将显示一条信息消息。在确认更改后,组中的所有成员资格条件将会丢失。仅在组中保留 IP 地址。

    NSX 中实现(保存)Antrea 组后,您无法更改组类型。常规仅限 IP 地址组类型将灰显。

适用于 Kubernetes 版本 1.20 或更低版本的解决办法

Antrea 组条件“命名空间名称等于 Value”适用于 Kubernetes 版本 1.21 或更高版本。

Kubernetes 1.21 或更高版本会自动向所有命名空间添加一个特殊标签,条件“命名空间名称等于”将在内部使用此特殊标签。但是,对于 Kubernetes 版本 1.20 或更低版本,需要一种解决方法。您必须在用于创建事件的命名空间上注册 Antrea 控制器 Webhook。调用 Antrea 控制器 Webhook 时,Antrea 控制器 会向新命名空间添加一个特殊标签,以便条件“命名空间名称等于 Value”可以使用此标签。有关注册 Antrea 控制器 Webhook 的详细信息,请参见将 YAML 文件提交到 Kubernetes API 服务器中的步骤 3。

注: Antrea 控制器 Webhook 仅对在注册 Webhook 后创建的新命名空间有效。换言之,现有命名空间(如 kube-systemdefault)不会获取特殊标签,条件“命名空间名称等于 Value”也无法用于这些命名空间。