您可以创建子分段,以便通过 Antrea 为 Kubernetes 工作负载启用高级 IPAM、路由和 NAT。子分段旨在支持 Antrea 功能,例如可路由 Pod 的灵活 IPAM 和 Antrea Egress。

注: 此功能只能通过 API 提供。

下图显示了子分段连接到其他组件的方式。

父分段是常规 NSX 分段。无需进行任何配置即可将分段设置为父分段。子分段可与一个或多个父分段相关联,并为其每个父分段分配一个 VLAN ID。父分段将仅发送标记有特定 VLAN ID 的子分段流量。

子分段和父分段的属性:
  • 子分段可以与多个父分段相关联。
  • 父分段可以具有多个子分段。
  • 链接到父分段的每个子分段都必须具有不同的 VLAN ID,并且连接到同一父分段的两个子分段不能共享一个 VLAN ID。
  • 连接到多个父分段的子分段可以使用相同或不同的 VLAN ID 建立连接。
  • 子分段不能是另一子分段的父分段。
  • 子分段可以是覆盖网络分段或 VLAN 分段。
  • 虚拟机 (Virtual Machine, VM) 可以连接到子分段。如果这样做,将创建分段端口,类似于将虚拟机连接到标准分段时的情况。
  • 不会在子分段上创建用于父-子分段连接的分段端口。
  • 子分段和父分段是相互独立的。这意味着:
    • 它们可以连接到相同或不同的 Tier-1 或 Tier-0 网关。
    • 它们可以具有不同的配置或交换配置文件。
    • 子分段不会继承其父分段上的配置。
    • 包含父分段的组不会自动包含其子分段。
    • 在父分段上配置的服务(如分布式防火墙)不会扩展到子分段。

对于连接到子分段的虚拟机,支持所有分段相关的功能。对于通过子分段的容器流量,下表列出了支持和不支持的功能:

功能 受支持
分布式防火墙
IP 发现分段配置文件
MAC 发现分段配置文件
分段安全分段配置文件
SpoofGuard 分段配置文件
QoS 分段配置文件
端口镜像
IPFix
上行链路绑定
镜像配置(上行链路跨度)
NS 组
延迟

Antrea 的子分段使用情况

在 Antrea 中配置的每个可路由子网(例如,可路由 Pod 的 IP 池、Egresses 的外部 IP 池)都映射到一个子分段,Kubernetes 节点虚拟机的分段是子分段的父项。在通过 VNIC 发送数据包前,Kubernetes 节点虚拟机上的 OVS (Open vSwitch) 将使用正确的 VLAN ID 标记流量。

在父分段和子分段之间创建连接的工作流:
  • 创建父分段。您可以使用 API 或 NSX Manager UI。
  • 创建子分段。您可以使用 API 或 NSX Manager UI。
  • 使用 API,通过指定父分段路径和 VLAN ID,在子分段上创建连接绑定映射。
删除子分段的工作流:
  • 使用 API 删除子分段的所有现有连接绑定映射。
  • 删除子分段。您可以使用 API 或 NSX Manager UI。
删除父分段的工作流:
  • 使用 API 删除将此父分段连接到其所有子分段的所有现有连接绑定映射。
  • 删除父分段。您可以使用 API 或 NSX Manager UI。

API

可使用以下 API 调用管理子分段。有关详细信息,请参见NSX API 指南(转到 NSX 文档,并使用左侧的导航窗格找到 API 指南)。

GET /policy/api/v1/infra/segments/{segment-id}/segment-connection-binding-maps
GET /policy/api/v1/orgs/{org-id}/projects/{project-id}/infra/segments/{segment-id}/segment-connection-binding-maps
DELETE /policy/api/v1/infra/segments/{segment-id}/segment-connection-binding-maps/{map-id}
DELETE /policy/api/v1/orgs/{org-id}/projects/{project-id}/infra/segments/{segment-id}/segment-connection-binding-maps/{map-id}
GET /policy/api/v1/infra/segments/{segment-id}/segment-connection-binding-maps/{map-id}
GET /policy/api/v1/orgs/{org-id}/projects/{project-id}/infra/segments/{segment-id}/segment-connection-binding-maps/{map-id}
PATCH /policy/api/v1/infra/segments/{segment-id}/segment-connection-binding-maps/{map-id}
PATCH /policy/api/v1/orgs/{org-id}/projects/{project-id}/infra/segments/{segment-id}/segment-connection-binding-maps/{map-id}
PUT /policy/api/v1/infra/segments/{segment-id}/segment-connection-binding-maps/{map-id}
PUT /policy/api/v1/orgs/{org-id}/projects/{project-id}/infra/segments/{segment-id}/segment-connection-binding-maps/{map-id}
GET /policy/api/v1/infra/tier-1s/{tier-1-id}/segments/{segment-id}/segment-connection-binding-maps
GET /policy/api/v1/orgs/{org-id}/projects/{project-id}/infra/tier-1s/{tier-1-id}/segments/{segment-id}/segment-connection-binding-maps
DELETE /policy/api/v1/infra/tier-1s/{tier-1-id}/segments/{segment-id}/segment-connection-binding-maps/{map-id}
DELETE /policy/api/v1/orgs/{org-id}/projects/{project-id}/infra/tier-1s/{tier-1-id}/segments/{segment-id}/segment-connection-binding-maps/{map-id}
GET /policy/api/v1/infra/tier-1s/{tier-1-id}/segments/{segment-id}/segment-connection-binding-maps/{map-id}
GET /policy/api/v1/orgs/{org-id}/projects/{project-id}/infra/tier-1s/{tier-1-id}/segments/{segment-id}/segment-connection-binding-maps/{map-id}
PATCH /policy/api/v1/infra/tier-1s/{tier-1-id}/segments/{segment-id}/segment-connection-binding-maps/{map-id}
PATCH /policy/api/v1/orgs/{org-id}/projects/{project-id}/infra/tier-1s/{tier-1-id}/segments/{segment-id}/segment-connection-binding-maps/{map-id}
PUT /policy/api/v1/infra/tier-1s/{tier-1-id}/segments/{segment-id}/segment-connection-binding-maps/{map-id}
PUT /policy/api/v1/orgs/{org-id}/projects/{project-id}/infra/tier-1s/{tier-1-id}/segments/{segment-id}/segment-connection-binding-maps/{map-id}

创建连接绑定映射时,在 PUT API 中指定的映射 ID 必须是唯一的。使用 PUT /policy/api/v1/infra/segments/{segment-id}/segment-connection-binding-maps/{map-id} 创建绑定映射的示例:

API 请求:
PUT https://<nsx-manager>/policy/api/v1/infra/segments/test2/segment-connection-binding-maps/map-id-1
{
    "vlan_traffic_tag": "1002",
    "segment_path": "/infra/segments/openshift-segment"
}
API 响应:
{
  "vlan_traffic_tag" : 1002,
  "segment_path" : "/infra/segments/openshift-segment",
  "resource_type" : "SegmentConnectionBindingMap",
  "id" : "map-id-1",
  "display_name" : "map-id-1",
  "path" : "/infra/segments/test2/segment-connection-binding-maps/map-id-1",
  "relative_path" : "map-id-1",
  "parent_path" : "/infra/segments/test2",
  "remote_path" : "",
  "unique_id" : "7ac8c0fb-a0e1-471a-bed6-d15f1b85e0c6",
  "realization_id" : "7ac8c0fb-a0e1-471a-bed6-d15f1b85e0c6",
  "owner_id" : "210584d9-6329-452e-bb01-0133945ab675",
  "marked_for_delete" : false,
  "overridden" : false,
  "_system_owned" : false,
  "_protection" : "NOT_PROTECTED",
  "_create_time" : 1712718210160,
  "_create_user" : "admin",
  "_last_modified_time" : 1712718210160,
  "_last_modified_user" : "admin",
  "_revision" : 0
}

流跟踪

流跟踪支持以下与子分段相关的场景:
  • 源和目标都是子分段上的容器。
  • 源是子分段上的容器,目标是常规端口。
  • 源是父端口。没有子分段,因为 Antrea 容器正在虚拟机中运行。

要对将通过子分段的数据包执行流跟踪,必须使用 API。要设置流跟踪,请使用 API 调用 PUT https://<mgr-ip>/policy/api/v1/infra/traceflows/<traceflow-id>。例如,

PUT https://<mgr-ip>/policy/api/v1/infra/traceflows/<traceflow-id>
{
  "segment_port_path": "/infra/segments/parent/ports/default:658c6c45-286f-4a23-832f-a646253b200b",
  "connected_segment_path_as_source": "/infra/segments/child",
  "packet": {
    "eth_header": {
      "src_mac": "00:50:56:ad:28:d5",
      "dst_mac": "00:50:56:ad:c0:a4",
      "eth_type": 2048
    },
    "ip_header": {
      "src_ip": "192.168.100.10",
      "dst_ip": "192.168.100.20",
      "protocol": 1,
      "ttl": 64,
      "flags": 0
    },
    "transport_header": {
      "icmp_echo_request_header": {
        "id": 0,
        "sequence": 0
      }
    },
    "payload": "",
    "resource_type": "FieldsPacketData",
    "frame_size": 128,
    "routed": false,
    "transport_type": "UNICAST"
  },
  "timeout": 10,
  "is_transient": true
}

请注意,参数 connected_segment_path_as_source 指向子分段。如果未设置此参数,数据包将不会通过子分段。

有关详细信息,请参见NSX API 指南(转到 NSX 文档,并使用左侧的导航窗格找到 API 指南)。

子分段和父分段统计信息

子分段的统计信息将只包括连接到分段的虚拟机的统计信息。其中将不包括 Antrea 容器的统计信息。

对于父分段,输入统计信息将包括 Antrea 容器的统计信息。输出统计信息不包括 Antrea 容器的统计信息。