第三方 Ingress 控制器

您可以将 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.ini
    k8s
    部分中,设置
    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_port
https_ingress_port
参数,以指定向 Ingress 控制器公开的 NAT 规则的自定义端口。

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

请按照以下过程操作,让 NCP 处理
nsx
类 Ingress。
  1. 在每个主节点上编辑
    ncp.ini
    nsx_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.ini
    nsx_v3
    部分。
    1. use_native_loadbalancer
      设置为
      False
      default_ingress_class_nsx
      的值现在无关紧要。
  2. 在每个主节点上重新启动 NCP。这可能会导致发生主节点故障切换。
请注意,NCP 也不会处理类型为 LoadBalancer 的服务