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

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

逻辑路由器和逻辑交换机

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

导航到高级网络和安全 > IPAM以创建一个或多个 IP 块。使用 CIDR 格式指定 IP 块。将 ncp.ini[nsx_v3] 部分的 container_ip_blocks 选项设置为 IP 块的 UUID。

默认情况下,项目共享在 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 池。将 ncp.ini[nsx_v3] 部分的 external_ip_pools 选项设置为 IP 池的 UUID。

多个 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 逻辑路由器以实现外部连接。此选项将替换 tier0_router 选项。
  • 如果启用了 Pod 流量的 SNAT,请将 T1LR1LS1(Kubernetes 节点的逻辑交换机)断开连接,然后将 top_tier_router 中设置的 Tier-0 或 Tier-1 路由器连接到 LS1
  • single_tier_topology 选项设置为 True。默认值为 False

(可选)防火墙标记区域

要允许管理员创建防火墙规则且不干扰 NCP 基于网络策略创建的防火墙区域,请导航到高级网络和安全 > 安全 > 分布式防火墙 > 常规,并创建两个防火墙区域。

通过在 ncp.ini[nsx_v3] 部分中设置 bottom_firewall_section_markertop_firewall_section_marker 选项来指定标记防火墙区域。

底部防火墙区域必须在顶部防火墙区域的下方。创建这些防火墙区域后,NCP 创建的用于隔离的所有防火墙区域将创建在底部防火墙区域的上方,NCP 创建的用于策略的所有防火墙区域将创建在顶部防火墙区域的下方。如果未创建这些标记区域,则将在底部创建所有隔离规则,在顶部创建所有策略区域。不支持每个群集中多个标记防火墙区域采用相同的值,这将会导致错误。