有两种方法可为 NCP 配置某些网络资源。本节介绍使用 NSX Manager web UI 中网络选项卡的方法。

在 NCP 配置文件 ncp.ini 中,您可以使用 UUID 或名称指定 NSX-T 资源。

网关和分段

  1. 为 Kubernetes 节点创建分段,例如 Segment1
  2. 创建 Tier-0 网关,例如 T0GW1。如果您没有共享的 Tier-1 拓扑,请在 ncp.ini[nsx_v3] 部分使用网关 ID 设置 top_tier_router 选项。有关配置共享 Tier-1 拓扑的信息,请参见下文。如果您打算在此网关上配置 NAT 规则,请将 HA 模式设置为活动-备用。否则,将其设置为活动-活动状态。启用路由重新分发。还要配置此网关以访问外部网络。
  3. 创建 Tier-1 网关,例如 T1GW1。将此网关连接到 Tier-0 网关。
  4. T1GW1 配置路由器通告。至少,应启用 NSX 连接和 NAT 路由。
  5. T1GW1 连接至 Segment1。请确保网关端口的 IP 地址与 Kubernetes 节点的 IP 地址不冲突。
  6. 对于每个节点虚拟机,请确保容器流量的 vNIC 连接到自动创建的逻辑交换机。您可以在高级网络和安全选项卡中找到与该分段相同的名称(即 Segment1)。
NCP 必须知道 vNIC 的 VIF ID。您可以通过导航到“网络 > 分段”来自动创建 Segment1 的端口。这些端口不可编辑,但其标记属性除外。这些端口必须具有以下标记:
scope: 'ncp/node_name', value: '<node_name>'
scope: 'ncp/cluster', value: '<cluster_name>'

这些标记会自动传播到相应的逻辑交换机端口。如果节点名称发生更改,您必须更新该标记。

如果要在 NCP 正在运行时扩展 Kubernetes 群集(例如,向群集中添加更多节点),必须在运行“kubeadm join”之前将标记添加到相应的交换机端口。如果您忘记在运行“kubeadm join”之前添加标记,新节点将不会连接。在这种情况下,您必须添加标记并重新启动 NCP 才能解决此问题。

要标识节点虚拟机的交换机端口,您可以进行以下 API 调用:
/api/v1/fabric/virtual-machines
在响应中,查找节点虚拟机并检索“external_id”属性的值。或者,您可以进行以下 API 调用:
/api/v1/search -G --data-urlencode "query=(resource_type:VirtualMachine AND display_name:<node_vm_name>)"
拥有外部 ID 后,您可以使用它通过以下 API 检索虚拟机的 VIF。请注意,在启动虚拟机后,才会填充 VIF。
/api/v1/search -G --data-urlencode \
"query=(resource_type:VirtualNetworkInterface AND external_id:<node_vm_ext_id> AND \
_exists_:lport_attachment_id)"

lport_attachment_id 属性是节点虚拟机的 VIF ID。然后,您可以找到此 VIF 的逻辑端口并添加所需的标记。

Kubernetes pod 的 IP 块

导航到网络 > IP 地址管理 > IP 地址块以创建一个或多个 IP 块。使用 CIDR 格式指定 IP 块。将 ncp.ini[nsx_v3] 部分的 container_ip_blocks 选项设置为 IP 块的 UUID。如果希望 NCP 自动创建 IP 块,您可以使用 CIDR 格式的逗号分隔地址列表设置 container_ip_blocks 选项。请注意,不能将 container_ip_blocks 同时设置为 UUID 和 CIDR 地址。

默认情况下,项目共享在 container_ip_blocks 中指定的 IP 块。您可以设置 ncp.ini[nsx_v3] 部分中的 no_snat_ip_blocks 选项,专门为非 SNAT 命名空间(对于 Kubernetes)或群集(对于 PCF)创建 IP 块。

如果在 NCP 运行时创建非 SNAT IP 块,您必须重新启动 NCP。否则,NCP 将继续使用共享 IP 块,直到这些块用尽。

在创建 IP 块时,前缀不能大于 NCP 配置文件 ncp.ini 中的 subnet_prefix 选项值。默认值为 24。

外部 IP 池

将使用外部 IP 池分配 IP 地址,这些地址将用于通过 SNAT 规则转换 pod IP 以及通过 SNAT/DNAT 规则公开 Ingress 控制器和 LoadBalancer 型服务,就像 OpenStack 浮动 IP 一样。这些 IP 地址也称为外部 IP。

导航到网络 > IP 地址管理 > IP 地址池以创建 IP 池。将 ncp.ini[nsx_v3] 部分的 external_ip_pools 选项设置为 IP 池的 UUID。如果希望 NCP 自动创建 IP 池,您可以使用 CIDR 格式的以逗号分隔的地址列表或 IP 范围设置 external_ip_pools 选项。请注意,不能将 external_ip_pools 同时设置为 UUID 和 CIDR 地址。

多个 Kubernetes 群集使用相同的外部 IP 池。每个 NCP 实例将该池的一部分用于它管理的 Kubernetes 群集。默认情况下,将使用 pod 子网的相同子网前缀。要使用不同的子网大小,请更新 ncp.ini[nsx_v3] 部分中的 external_subnet_prefix 选项。

可以通过更改配置文件并重新启动 NCP 来更改为不同的 IP 池。

共享的 Tier-1 拓扑

要启用共享的 Tier-1 拓扑,请执行以下配置:
  • top_tier_router 选项设置为 Tier-0 网关或 Tier-1 网关的 ID。如果它是 Tier-1 网关,则需要将其连接到 Tier-0 网关以实现外部连接。
  • 如果启用了 Pod 流量的 SNAT,请将 Kubernetes 节点的分段的上行链路修改为在 top_tier_router 中设置的同一 Tier-0 或 Tier-1 网关。
  • single_tier_topology 选项设置为 True。默认值为 False
  • 如果希望 NCP 自动将顶层路由器配置为 Tier-1 网关,请取消设置 top_tier_router 选项并设置 tier0_gateway 选项。NCP 将创建一个 Tier-1 网关,并将其上行链接至 tier0_gateway 选项中指定的 Tier-0 网关。