您可以将 NCP 配置为支持第三方 Ingress 控制器。

编辑 ncp.ini 文件

您必须编辑配置文件 /var/vcap/data/jobs/ncp/xxxxxxxx/config/ncp.ini(其中 xxxxxxxx 是 BOSH 部署 ID)。该文件随后将被复制到 rootfs,并在每次 NCP 重新启动时由 NCP 使用。该文件必须在每个主节点上进行编辑。

重要说明:ncp.ini 所做的更改不会跨 TKGI 集群更新进行保留。如果通过 TKGI 图标进行更改,然后更新 TKGI 部署,则对 ncp.ini 所做的更改将会丢失。
相关选项位于 nsx_v3 部分中。
  • use_native_loadbalancer - 如果设置为 False,NCP 将不会处理类型为 Loadbalancer 更新的任何 Ingress 或服务,而不论其注释为何。此设置适用于整个 TKGI 集群。默认值为 True
  • default_ingress_class_nsx - 如果设置为 True,NCP 将成为默认 Ingress 控制器,并将处理带有 kubernetes.io/ingress.class: "nsx" 注释的 Ingress 和不带任何注释的 Ingress。如果设置为 False,NCP 将仅处理带有 kubernetes.io/ingress.class: "nsx" 注释的 Ingress。默认值为 True
    从 NCP 3.2.1 开始,已弃用 default_ingress_class_nsx。在解析 Ingress 类时,NCP 将查看以下内容:
    • 注释
    • ingressClass 对象
    • 如果未指定注释并且 use_native_loadbalancer 为 True,NSX-LB 将处理 Ingress。否则,NSX-LB 不会处理 Ingress。
如果您希望 NCP 为 NGINX 控制器容器分配浮动 IP 并使用该浮动 IP 更新 Ingress 的状态,请执行以下操作:
  • ncp.inik8s 部分中,设置 ingress_mode=nat
  • 将注释 ncp/ingress-controller: "True" 添加到 NGINX Ingress 控制器容器中。

NCP 将使用 NGINX Ingress 控制器容器的浮动 IP 更新带有 kubernetes.io/ingress.class: "nginx" 注释的 Ingress 的状态。如果 default_ingress_class_nsx=False,NCP 还将使用 NGINX Ingress 控制器容器的浮动 IP 更新不带 kubernetes.io/ingress.class 注释的 Ingress 的状态。

注意:即使 NGINX Ingress 控制器容器不带 ncp/ingress-controller: "True" 注释,NCP 也会将上述 Ingress 的状态更新为 loadBalancer: {}。之后,Ingress 可能会陷入以下循环中:NGINX 控制器将 Ingress 状态更新为 loadBalancer: {ingress: [{ip: <IP>}]},然后 NCP 又将 Ingress 状态更新为 loadBalancer: {}。为了避免出现这种情况,请执行以下步骤:

对于在 NAT 模式下部署的第三方 Ingress 控制器,您可以在 k8s 部分中修改 http_ingress_porthttps_ingress_port 参数,以指定向 Ingress 控制器公开的 NAT 规则的自定义端口。

场景 1:NCP 处理 Ingress,但不是默认 Ingress 控制器。

请按照以下过程操作,让 NCP 处理 nsx 类 Ingress。
  1. 在每个主节点上编辑 ncp.ininsx_v3 部分。
    1. default_ingress_class_nsx 设置为 False
    2. 保留 use_native_loadbalancer 设置为默认值 True
  2. 在每个主节点上重新启动 NCP。这可能会导致发生主节点故障切换。
  3. 在希望 NCP 处理的所有 Ingress 中添加 kubernetes.io/ingress.class: "nsx" 注释。

场景 2:NCP 是默认 Ingress 控制器。

请按照以下过程操作:
  1. 无需编辑 ncp.ini,但需确保每个 Ingress 均已添加注释。
  2. 要由 NCP 处理的 Ingress 应添加 kubernetes.io/ingress.class: "nsx" 注释。

    尽管 NCP 将处理不带 kubernetes.io/ingress.class 注释的 Ingress,但在具有多个 Ingress 控制器的情况下,最佳做法是始终添加 kubernetes.io/ingress.class 注释,而不是依赖于默认 Ingress 控制器行为。

  3. 要由第三方 Ingress 控制器处理的 Ingress 必须使用这些 Ingress 控制器所需的值进行注释。
重要说明: 除非目标是将 NGINX 设为默认 Ingress 控制器,否则请勿使用 nginx 作为 NGINX Ingress 控制器,因为这会使 NGINX 成为默认 Ingress 控制器。

场景 3:NCP 不处理任何 Ingress,而不论其注释为何。

请按照以下过程操作:
  1. 在每个主节点上编辑 ncp.ininsx_v3 部分。
    1. use_native_loadbalancer 设置为 Falsedefault_ingress_class_nsx 的值现在无关紧要。
  2. 在每个主节点上重新启动 NCP。这可能会导致发生主节点故障切换。

请注意,NCP 也不会处理类型为 LoadBalancer 的服务