有两种方法可为 NCP 配置某些网络资源。本节介绍如何在策略模式下配置资源。

在 NCP 配置文件 ncp.ini 中,您必须使用其资源 ID 指定 NSX-T 资源。通常,资源的名称和 ID 是相同的。要完全确定,请在 NSX Manager web UI 上,单击显示为三个点的图标,显示资源的选项,然后选择将路径复制到剪贴板。将路径粘贴到应用程序(如记事本)。路径的最后一部分是资源 ID。

网关和分段

  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 连接到自动创建的逻辑交换机。您可以在网络选项卡中找到该 vNIC,其名称与分段相同(即 Segment1)。
NCP 必须知道 vNIC 的 VIF ID。您可以通过导航到“网络 > 分段”来自动创建 Segment1 的端口。这些端口不可编辑,但其标记属性除外。这些端口必须具有以下标记。对于其中一个标记,请指定节点的名称。对于另一个标记,请指定集群的名称。对于范围,请指定如下所示的相应值。
标记 范围
节点名称 ncp/node_name
集群名称 ncp/cluster
这些标记会自动传播到相应的逻辑交换机端口。如果节点名称发生更改,您必须更新该标记。要检索节点名称,您可以运行以下命令:
kubectl get nodes

如果要在 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 地址块以创建一个或多个 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)或集群(对于 TAS)创建 IP 块。

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

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

如果 NCP 已开始从 IP 块分配 IP 地址,则不得修改该 IP 块。如果要使用其他块,请确保 NCP 未从该块分配任何地址。

外部 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 池。

如果 NCP 已开始从 IP 池分配 IP 地址,则不得修改该 IP 池。如果要使用其他池,请确保 NCP 未从该池分配任何地址。

共享的 Tier-1 拓扑

要启用共享的 Tier-1 拓扑,请执行以下配置:
  • top_tier_router 选项设置为 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 网关。