您需要配置的 NSX-T Data Center 资源包括覆盖网络传输区域、Tier-0 逻辑路由器、用于连接节点虚拟机的逻辑交换机、Kubernetes 节点的 IP 块以及 SNAT 的 IP 池。

重要:

如果与 NSX-T Data Center 2.4 或更高版本一起运行,则必须使用高级网络和安全选项卡配置 NSX-T 资源。

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

覆盖网络传输区域

登录到 NSX Manager,然后查找用于容器网络的覆盖网络传输区域,或者创建新的覆盖网络传输区域。

通过在 ncp.ini[nsx_v3] 部分中设置 overlay_tz 选项来指定群集的覆盖网络传输区域。此步骤是可选的。如果未设置 overlay_tz,NCP 将自动从 Tier-0 路由器检索覆盖网络传输区域 ID。

Tier-0 逻辑路由

登录到 NSX Manager,然后查找用于容器网络的路由器,或者创建新的路由器。

通过在 ncp.ini[nsx_v3] 部分中设置 tier0_router 选项来指定群集的 Tier-0 逻辑路由器。

注:

必须在活动-备用模式下创建路由器。

逻辑交换机

节点用于数据流量的 vNIC 必须连接到覆盖网络逻辑交换机。不要求将节点的管理接口连接到 NSX-T Data Center,但这样做将简化设置过程。可以通过登录到 NSX Manager 创建逻辑交换机。在交换机上创建逻辑端口,并将节点 vNIC 连接到这些端口。逻辑端口必须具有以下标记:

  • 标记:<cluster_name>,范围:ncp/cluster

  • 标记:<node_name>,范围:ncp/node_name

<cluster_name> 值必须与 ncp.ini[coe] 部分中的 cluster 选项值匹配。

Kubernetes pod 的 IP 块

登录到 NSX Manager,然后创建一个或多个 IP 块。使用 CIDR 格式指定 IP 块。

通过在 ncp.ini[nsx_v3] 部分中设置 container_ip_blocks 选项来指定 Kubernetes pod 的 IP 块。

您还可以专门为非 SNAT 命名空间创建 IP 块。

通过在 ncp.ini[nsx_v3] 部分中设置 no_snat_ip_blocks 选项来指定非 SNAT IP 块。

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

注:

在创建 IP 块时,前缀不能大于 NCP 配置文件 ncp.ini 中的 subnet_prefix 参数值。

SNAT 的 IP 池

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

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

登录到 NSX Manager,然后创建一个池,或者查找现有的池。

通过在 ncp.ini[nsx_v3] 部分中设置 external_ip_pools 选项来指定 SNAT 的 IP 池。

您还可以通过向特定服务添加注释来为此服务配置 SNAT。例如,

    apiVersion: v1
    kind: Service
    metadata:
      name: svc-example
      annotations:
        ncp/snat_pool: <external IP pool ID or name>
      selector:
        app: example
    ...

NCP 将为此服务配置 SNAT 规则。规则的源 IP 为后端 pod 集。目标 IP 是从指定外部 IP 池分配的 SNAT IP。请注意以下事项:

  • 配置服务之前,ncp/snat_pool 指定的 IP 池应该已存在于 NSX-T Data Center 中。IP 池必须具有标记 {"ncp/owner": cluster:<cluster>}

  • NSX-T Data Center 中,服务 SNAT 规则的优先级高于项目 SNAT 规则。

  • 如果 pod 配置了多个 SNAT 规则,则只有一个起作用。

可以通过在 SNAT IP 池中添加以下标记指定可为哪些命名空间分配 IP 池中的 IP。

  • 范围:ncp/owner,标记:ns:<namespace_UUID>

可以使用以下命令之一获取命名空间 UUID:

oc get ns -o yaml

请注意以下事项:

  • 每个标记应指定一个 UUID。可以为同一个池创建多个标记。

  • 如果根据旧标记为某些命名空间分配 IP 后更改了标记,则服务的 SNAT 配置更改或 NCP 重新启动之前,将不会回收这些 IP。

  • 命名空间所有者标记是可选的。如果没有此标记,任何命名空间的 IP 都可以从 SNAT IP 池分配。

(可选)防火墙标记区域

要允许管理员创建防火墙规则且不干扰 NCP 基于网络策略创建的防火墙区域,请登录到 NSX Manager,然后创建两个防火墙区域。

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

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