您可以使用动态成员资格条件中的 Kubernetes 成员类型(资源)创建组,以匹配流入或流出 Antrea Kubernetes 集群的流量。

然后,可以在分布式防火墙规则或网关防火墙规则中使用这些通用组来保护 NSX 环境中的虚拟机与 Antrea Kubernetes 集群中的 Pod 之间的流量。

此功能需要使用 VMware Container Networking™ with Antrea™ 1.6.0 或更高版本提供的 Antrea-NSX Interworking 版本。请参见 1.6.0 发行说明

本文档使用短语“Kubernetes 成员类型”来指代可用于配置动态成员资格条件的“Kubernetes 资源”。

目前,使用 Kubernetes 成员类型的通用组仅支持动态成员资格条件。无法在通用组定义中以静态方式添加 Kubernetes 成员类型。

注: 要对包含使用 Kubernetes 成员类型定义的动态成员资格条件的通用组中的有效成员进行评估, NSX 将考虑由具有 Antrea CNI 的 Kubernetes 集群报告的资源清单。在评估有效组成员时,将忽略由具有 NCP CNI 的 Kubernetes 集群报告的资源清单。

成员资格条件中的 Kubernetes 成员类型

在通用组中,仅当至少有一个 Antrea Kubernetes 集群注册到 NSX 环境中时,Kubernetes 成员类型才会显示在成员资格条件页面上。

注: 在多租户 NSX 环境中,Kubernetes 集群资源不会向项目清单公开。因此,在项目中,您无法使用动态成员资格条件中的 Kubernetes 成员类型创建通用组。

下表列出了 NSX 4.1 及更高版本的默认视图中提供的用于在通用组中添加动态成员资格条件的 Kubernetes 成员类型。每个 Kubernetes 成员类型都属于集群范围或命名空间范围。

成员类型 范围

Kubernetes 集群

集群

Kubernetes 命名空间

命名空间

Kubernetes 节点

集群

Kubernetes 服务

命名空间

Kubernetes Ingress

命名空间

Kubernetes Gateway

命名空间

Antrea Egress

集群

Antrea IP 池

集群

用于使用 Kubernetes 成员类型的条件的命名约定

下表介绍了本文档中用于表示可在动态成员资格条件中添加的不同条件的命名约定,这些条件基于 Kubernetes 成员类型。

用于条件的命名约定 含义

Kubernetes 集群条件

动态成员资格条件中的条件基于 Kubernetes 集群成员类型。

Kubernetes 命名空间条件

动态成员资格条件中的条件基于 Kubernetes 命名空间成员类型。

资源条件

动态成员资格条件中的条件基于以下任意 Kubernetes 成员类型:
  • Kubernetes 服务
  • Kubernetes Ingress
  • Kubernetes Gateway
  • Antrea Egress
  • Antrea IP 池
  • Kubernetes 节点

集群范围的资源条件

动态成员资格条件中的条件基于以下任意 Kubernetes 成员类型:
  • Antrea Egress
  • Antrea IP 池
  • Kubernetes 节点

命名空间范围的资源条件

动态成员资格条件中的条件基于以下任意 Kubernetes 成员类型:
  • Kubernetes 服务
  • Kubernetes Ingress
  • Kubernetes Gateway

使用 Kubernetes 成员类型的成员资格条件概述

一个成员资格条件可以具有一个或多个条件。这些条件可以使用相同的 Kubernetes 成员类型,也可以混合使用不同的 Kubernetes 成员类型。不过,在成员资格条件中添加多个混合成员类型的条件时,存在一些限制。请参见本文档后面的在成员资格条件中使用 Kubernetes 成员类型的限制一节。

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

要连接成员资格条件,可以使用 OR 和 AND 运算符。默认情况下, NSX 选择 OR 运算符以连接两个成员资格条件。只有在以下情况下才支持在两个成员资格条件之间使用 AND 运算符:
  • 这两个成员资格条件使用相同的 Kubernetes 成员类型。
  • 这两个成员资格条件都使用单个条件。
在添加多个条件时,存在以下限制:
  • 在单个成员资格条件中,最多支持 5 个相同 Kubernetes 成员类型的条件。例如,在一个成员资格条件中,您最多可以添加 5 个 Kubernetes 服务条件。
  • 在单个成员资格条件中,最多支持 15 个混合 Kubernetes 成员类型的条件。例如,在一个成员资格条件中,您可以混合添加 Kubernetes 命名空间条件和 Kubernetes Ingress 条件,这两种条件的总数最多为 15 个。
  • 在一个通用组中,最多支持 35 个混合成员类型的条件。

一个组最多可以具有 5 个成员资格条件。不过,您可以在通用组中添加的成员资格条件总数取决于每个成员资格条件中的条件数。请参见以下示例。

示例 1
一个通用组具有 3 个成员资格条件和总共 35 个条件:
  • 成员资格条件 1 具有 15 个混合成员类型的条件。
  • 成员资格条件 2 具有 15 个混合成员类型的条件。
  • 成员资格条件 3 具有 5 个相同成员类型的条件。
示例 2
一个通用组具有 4 个成员资格条件和总共 35 个条件:
  • 成员资格条件 1 具有 15 个混合成员类型的条件。
  • 成员资格条件 2 具有 14 个混合成员类型的条件。
  • 成员资格条件 3 具有 4 个相同成员类型的条件。
  • 成员资格条件 4 具有两个相同成员类型的条件。
示例 3
一个通用组具有 5 个成员资格条件和总共 22 个条件:
  • 成员资格条件 1 具有 10 个混合成员类型的条件。
  • 成员资格条件 2 具有三个相同成员类型的条件。
  • 成员资格条件 3 具有 4 个相同成员类型的条件。
  • 成员资格条件 4 具有三个相同成员类型的条件。
  • 成员资格条件 5 具有两个混合成员类型的条件。
由于该组已达到成员资格条件限制(5 个),因此,您无法添加其他成员资格条件。不过,如果需要,您可以在 5 个成员资格条件中的任何成员资格条件中添加更多条件,但不能超过前面提到的以下上限:
  • 在单个成员资格条件中最多具有 5 个相同成员类型的条件。
  • 在单个成员资格条件中最多具有 15 个混合成员类型的条件。
  • 在通用组中总共具有 35 个条件。

在成员资格条件中使用 Kubernetes 成员类型的限制

下表简要概述了在单个成员资格条件中使用 Kubernetes 成员类型时适用的限制或验证。有关验证的示例,请参见本文档后面的验证使用 Kubernetes 成员类型的动态分组一节。

成员类型 在成员资格条件中使用成员类型的限制 支持的属性 标记运算符 范围运算符

Kubernetes 集群

不能在成员资格条件中单独使用。

一个成员资格条件中只允许使用一个集群条件。

必须与至少一个 Kubernetes 资源条件混合使用。

(可选)可以与 Kubernetes 命名空间条件和 Kubernetes 资源条件混合使用。

名称

不受支持

不受支持

Kubernetes 命名空间

不能在成员资格条件中单独使用。

不能与集群范围的资源条件混合使用。

必须与命名空间范围的资源条件混合使用。

(可选)可以与 Kubernetes 集群条件混合使用。

名称

标记

等于 - 可以选择一个标记

等于

Antrea Egress

可以在成员资格条件中单独使用。

(可选)可以与 Kubernetes 集群条件混合使用。

名称

标记

等于 - 可以选择一个标记

等于

Antrea IP 池

可以在成员资格条件中单独使用。

(可选)可以与 Kubernetes 集群条件混合使用。

名称

标记

等于 - 可以选择一个标记

等于

Kubernetes Ingress

可以在成员资格条件中单独使用。

(可选)可以只与 Kubernetes 命名空间条件或只与 Kubernetes 集群条件混合使用,也可以同时与这两种条件混合使用。

名称

标记

等于 - 可以选择一个标记

等于

Kubernetes Gateway

可以在成员资格条件中单独使用。

(可选)可以只与 Kubernetes 命名空间条件或只与 Kubernetes 集群条件混合使用,也可以同时与这两种条件混合使用。

名称

标记

等于 - 可以选择一个标记

等于

Kubernetes 服务

可以在成员资格条件中单独使用。

(可选)可以只与 Kubernetes 命名空间条件或只与 Kubernetes 集群条件混合使用,也可以同时与这两种条件混合使用。

名称

标记

等于 - 可以选择一个标记

等于

Kubernetes 节点

可以在成员资格条件中单独使用。

仅允许使用单个节点条件。

(可选)可以与 Kubernetes 集群条件混合使用。

不能与 Kubernetes 命名空间条件或 Kubernetes 资源条件混合使用。

IP 地址

Pod CIDR

不受支持

请参见此表后面的“备注”。

不受支持

注: 通过 API 创建使用 Kubernetes 节点成员类型的通用组时,仅允许使用“匹配”运算符。此运算符只能接受 * 值。* 通配符将匹配 K8s 集群中的所有节点(如果 Kubernetes 节点条件与 Kubernetes 集群条件混合使用),或者将匹配所有集群中的节点(如果单独使用 Kubernetes 节点条件)。

验证使用 Kubernetes 成员类型的动态分组

验证 1
一个成员资格条件最多具有一个 Kubernetes 集群条件。要按名称匹配单个 Kubernetes 集群,请使用“等于”运算符并输入集群名称。
注: Kubernetes 集群必须是唯一的。
如果要在单个 Kubernetes 集群条件中匹配多个集群,可以使用以下运算符之一:
  • 位于
  • 开头为
  • 结尾为

示例:

匹配单个 K8s 集群 匹配多个 K8s 集群
成员资格条件:

Kubernetes 集群名称等于 ClusterA

成员资格条件:

Kubernetes 集群名称位于 ClusterA,ClusterB,ClusterC

最多允许使用五个以逗号分隔的值。这些值不能以空格分隔。

验证 2

可以将具有一个 Kubernetes 集群条件的成员资格条件与任一 Kubernetes 资源条件混合使用。如果在同一成员资格条件中添加 Kubernetes 命名空间条件,则资源条件必须仅限于命名空间范围的资源条件。

示例:
  • 具有一个 Kubernetes 集群条件和三个 Kubernetes Ingress 条件的成员资格条件有效。
  • 具有一个 Kubernetes 集群条件和两个 Antrea Egress 条件的成员资格条件有效。
  • 具有一个 Kubernetes 集群条件和三个 Antrea IP 池条件的成员资格条件有效。
  • 具有一个 Kubernetes 集群条件、一个 Kubernetes 命名空间条件和三个 Kubernetes Gateway 条件的成员资格条件有效。
验证 3
成员资格条件必须至少包含一个 Kubernetes 资源条件。如果成员资格条件包含以下条件,则无效:
  • 仅 Kubernetes 集群条件
  • 仅 Kubernetes 命名空间条件
  • 仅 Kubernetes 集群条件和 Kubernetes 命名空间条件
示例:
  • 具有一个 Kubernetes 集群条件、一个 Kubernetes 命名空间条件和一个 Kubernetes Ingress 条件的成员资格条件有效。
  • 具有一个 Kubernetes 集群条件、两个 Kubernetes 命名空间条件和三个 Kubernetes Ingress 条件的成员资格条件有效。
验证 4

成员资格条件只能有一个 Kubernetes 节点条件。(可选)一个 Kubernetes 节点条件只能与一个 Kubernetes 集群条件混合使用。

Kubernetes 节点条件不能与 Kubernetes 命名空间条件或 Kubernetes 资源条件混合使用。

仅具有一个 Kubernetes 节点条件的成员资格条件可以独立使用。但是,仅具有一个 Kubernetes 节点条件的组将匹配注册到 NSX 的所有 Antrea Kubernetes 集群的节点。

Kubernetes 节点条件当前不支持标记运算符和范围运算符。

Kubernetes 节点条件支持以下两个属性。

属性 描述

IP 地址

匹配指定 Antrea Kubernetes 集群的所有节点的内部 IP 地址。

Pod CIDR

匹配指定 Antrea Kubernetes 集群的所有节点的 Pod CIDR。

验证 5
如果成员资格条件包含 Kubernetes 集群条件和 Kubernetes 命名空间条件,则必须至少包含一个命名空间范围的 Kubernetes 资源条件。不能在同一成员资格条件中混合使用以下任意集群范围的 Kubernetes 资源条件:
  • Antrea Egress
  • Antrea IP Pool
  • Kubernetes 节点
示例:
  • 具有一个 Kubernetes 集群条件、两个 Kubernetes 命名空间条件和 Kubernetes Gateway 条件的成员资格条件有效。
  • 具有一个 Kubernetes 集群条件、四个 Kubernetes 命名空间条件和三个 Kubernetes 服务条件的成员资格条件有效。
  • 具有一个 Kubernetes 集群条件、一个 Kubernetes 命名空间条件和一个 Antrea Egress 条件的成员资格条件无效,因为 Antrea Egress 是集群范围的资源。
验证 6
成员资格条件必须至少包含一个 Kubernetes 资源条件。资源条件可以在成员资格条件中单独使用。但是,如果在一个成员资格条件中添加多个资源条件,则所有资源条件必须具有相同的成员类型。
注: Kubernetes 集群条件和 Kubernetes 命名空间条件用于定义成员资格条件的范围。它们不是 Kubernetes 资源条件,因此不受此验证规则的限制。
示例:
  • 具有五个 Kubernetes 服务条件的成员资格条件有效。
  • 具有一个 Kubernetes 集群条件、三个 Kubernetes 命名空间条件和四个 Kubernetes 服务条件的成员资格条件有效。
  • 具有一个 Kubernetes 集群条件、三个 Kubernetes 命名空间条件、四个 Kubernetes 服务条件和三个 Kubernetes Ingress 条件的成员资格条件无效。原因是,您将两种不同成员类型(Kubernetes 服务和 Kubernetes Ingress)的资源条件混合用在同一成员资格条件中。

    但是,您可以使用基于单个成员类型的资源条件创建单独的成员资格条件,然后使用“或”运算符将两个成员资格条件连接在一起,如下所示:

    成员资格条件 1:

    一个 Kubernetes 集群条件 + 三个 Kubernetes 命名空间条件 + 四个 Kubernetes 服务条件

    成员资格条件 2:

    一个 Kubernetes 集群条件 + 三个 Kubernetes 命名空间条件 + 三个 Kubernetes Ingress 条件

验证 7

在单个成员资格条件中,基于 NSX 成员类型的条件不能与基于 Kubernetes 成员类型的条件混合使用。但是,您可以创建一个组,其中一个成员资格条件仅基于 NSX 成员类型,另一个成员资格条件仅基于 Kubernetes 成员类型,然后使用“或”运算符将这两个成员资格条件连接在一起。

示例:

有效 无效

成员资格条件 1:

虚拟机条件

成员资格条件 2:

Kubernetes 集群条件 + Kubernetes Gateway 条件

成员资格条件:

NSX 分段条件 + 分段端口条件

Kubernetes 集群条件 + Kubernetes Gateway 条件

使用 Kubernetes 成员类型的条件的有效成员

NSX 角度来看,使用 Kubernetes 成员类型的组的有效成员可以是离散 IP 地址、IP 范围或 IP 地址和端口列表。

下表提供了一些示例。

示例组定义 用例 描述 有效的成员

Kubernetes 集群条件

Kubernetes 节点条件(基于 IP 地址)

Antrea Kubernetes 集群流向 NSX 的流量

匹配指定集群中的所有节点 IP 地址

IP 地址

Kubernetes 集群条件

Kubernetes 节点条件(基于 Pod CIDR)

Antrea Kubernetes 集群流向 NSX 的流量

匹配指定集群中所有节点的 Pod CIDR

Pod CIDR

Kubernetes 集群条件

Antrea Egress 条件(基于名称)

Antrea Kubernetes 集群流向 NSX 的流量

按名称匹配指定集群中的 Egress

Egress IP 地址

Kubernetes 集群条件

Antrea Egress 条件(基于标记)

更多 Antrea Egress 条件(基于标记)

Antrea Kubernetes 集群流向 NSX 的流量

按标记匹配指定集群中的 Egress

Egress IP 地址

Kubernetes 集群条件

Antrea IP 池条件(基于名称)

Antrea Kubernetes 集群流向 NSX 的流量

NSX 流向 Antrea Kubernetes 集群的流量

按名称匹配指定集群中的 IP 池

IP 范围

Kubernetes 集群条件

Antrea IP 池条件(基于标记)

更多 Antrea IP 池条件(基于标记)

Antrea Kubernetes 集群流向 NSX 的流量

NSX 流向 Antrea Kubernetes 集群的流量

按标记匹配指定集群中的 IP 池

IP 范围

Kubernetes 集群条件

Kubernetes 命名空间条件

Kubernetes Ingress 条件(基于名称)

NSX 流向 Antrea Kubernetes 集群的流量

按名称匹配指定集群和命名空间中的 Ingress

Ingress IP 地址

Kubernetes 集群条件

Kubernetes 命名空间条件

Kubernetes Gateway 条件(基于名称)

NSX 流向 Antrea Kubernetes 集群的流量

按名称匹配指定集群和命名空间中的网关

网关 IP 地址

Kubernetes 集群条件

Kubernetes 命名空间条件

Kubernetes Ingress 条件(基于标记)

更多 Kubernetes Ingress 条件(基于标记)

NSX 流向 Antrea Kubernetes 集群的流量

按标记匹配指定集群和命名空间中的 Ingress

Ingress IP 地址

Kubernetes 集群条件

Kubernetes 命名空间条件

Kubernetes Gateway 条件(基于标记)

更多 Kubernetes Gateway 条件(基于标记)

NSX 流向 Antrea Kubernetes 集群的流量

按标记匹配指定集群和命名空间中的网关

网关 IP 地址

Kubernetes 集群条件

Kubernetes 命名空间条件

Kubernetes 服务条件(基于标记且类型=LoadBalancer)

更多 Kubernetes 服务条件(基于标记且类型=LoadBalancer)

NSX 流向 Antrea Kubernetes 集群的流量

按标记匹配指定集群和命名空间中的服务 (LoadBalancer)

LoadBalancer Ingress IP 地址

Kubernetes 集群条件

Kubernetes 命名空间条件

Kubernetes 服务条件(基于名称、类型=ClusterIP 且已启用 NodePortLocal 功能)

NSX 流向 Antrea Kubernetes 集群的流量 按名称匹配指定集群和命名空间中的服务(ClusterIP 且已启用 NodePortLocal)。

节点 IP 地址、NodePortLocal 范围