您可以创建子分段,以便通过 Antrea 为 Kubernetes 工作负载启用高级 IPAM、路由和 NAT。子分段旨在支持 Antrea 功能,例如可路由 Pod 的灵活 IPAM 和 Antrea Egress。
下图显示了子分段连接到其他组件的方式。
父分段是常规 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}
创建绑定映射的示例:
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" }
{ "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 容器的统计信息。