È possibile configurare NCP per il supporto di controller di ingresso di terze parti.

Modifica del file ncp.ini

È necessario modificare il file di configurazione /var/vcap/data/jobs/ncp/xxxxxxxx/config/ncp.ini (dove xxxxxxxx è l'ID di distribuzione BOSH). Questo file verrà quindi copiato in rootfs e utilizzato da NCP a ogni riavvio. Il file deve essere modificato in ciascun nodo master.

Importante: Le modifiche apportate a ncp.ini non sono persistenti negli aggiornamenti del cluster TKGI. Se si apportano modifiche tramite il riquadro TKGI e quindi si aggiorna la distribuzione di TKGI, le modifiche apportate a ncp.ini andranno perse.
Le opzioni pertinenti sono disponibili nella sezione nsx_v3.
  • use_native_loadbalancer: se è impostata su False, NCP non elaborerà alcun aggiornamento dell'ingresso o del servizio di tipo LoadBalancer, indipendentemente dalle relative annotazioni. Questa impostazione si applica all'intero cluster TKGI. Il valore predefinito è True .
  • default_ingress_class_nsx: se è impostata su True, NCP diventa il controller di ingresso predefinito e gestisce sia gli ingressi con annotazioni kubernetes.io/ingress.class: "nsx" sia gli ingressi senza alcuna annotazione. Se è impostata su False, NCP gestirà solo gli ingressi con annotazione kubernetes.io/ingress.class: "nsx". Il valore predefinito è True.
    A partire da NCP 3.2.1, default_ingress_class_nsx è deprecato. Per la risoluzione della classe di ingresso, NCP esaminerà quanto segue:
    • Annotazioni
    • Oggetti ingressClass
    • Se non viene specificata alcuna annotazione e use_native_loadbalancer è True, NSX-LB gestirà l'ingresso. In caso contrario, NSX-LB non lo gestirà.
Se si desidera che NCP assegni un IP mobile al pod del controller NGINX e aggiorni lo stato degli ingressi con l'IP mobile, eseguire le operazioni seguenti:
  • Nella sezione k8s di ncp.ini impostare ingress_mode=nat.
  • Aggiungere l'annotazione ncp/ingress-controller: "True" al pod del controller di ingresso NGINX.

NCP aggiornerà lo stato degli ingressi con annotazione kubernetes.io/ingress.class: "nginx" con l'IP mobile del pod del controller di ingresso NGINX. Se è default_ingress_class_nsx=False, NCP aggiornerà anche lo stato degli ingressi senza annotazione kubernetes.io/ingress.class con l'IP mobile del pod del controller di ingresso NGINX.

Nota: anche se il pod del controller di ingresso NGINX non ha l'annotazione ncp/ingress-controller: "True", NCP aggiornerà lo stato degli ingressi indicati in precedenza impostandolo su loadBalancer: {}. Gli ingressi possono quindi essere bloccati in un ciclo in cui il controller NGINX aggiorna lo stato dell'ingresso impostandolo su loadBalancer: {ingress: [{ip: <IP>}]} e NCP aggiorna lo stato dell'ingresso impostandolo su loadBalancer: {}. Per evitare questa situazione, eseguire i passaggi seguenti:

Per i controller di ingresso di terze parti distribuiti in modalità NAT, è possibile modificare i parametri http_ingress_port e https_ingress_port nella sezione k8s per specificare porte personalizzate per le regole NAT esposte per il controller di ingresso.

Scenario 1: NCP gestisce gli ingressi ma non è il controller di ingresso predefinito.

Eseguire questa procedura per consentire a NCP di gestire gli ingressi di classe nsx.
  1. Modificare la sezione nsx_v3 in ncp.ini in ogni nodo master.
    1. Impostare default_ingress_class_nsx su False.
    2. Lasciare use_native_loadbalancer impostato sul valore predefinito True.
  2. Riavviare NCP in ogni nodo master. Ciò potrebbe causare un failover del nodo master.
  3. Aggiungere l'annotazione kubernetes.io/ingress.class: "nsx" in tutti gli ingressi che si desidera vengano gestiti da NCP.

Scenario 2: NCP è il controller di ingresso predefinito.

Eseguire questa procedura:
  1. Non è necessario modificare ncp.ini. È sufficiente assicurarsi che ogni ingresso includa un'annotazione.
  2. Gli ingressi che devono essere gestiti da NCP devono includere l'annotazione kubernetes.io/ingress.class: "nsx".

    Anche se NCP gestirà gli ingressi senza annotazione kubernetes.io/ingress.class, nel caso di più controller di ingresso, è consigliabile fare sempre in modo che l'annotazione kubernetes.io/ingress.class sia presente e non basarsi sul comportamento del controller di ingresso predefinito.

  3. Gli ingressi da gestire con controller di ingresso di terze parti devono includere l'annotazione richiesta da tali controller di ingresso.
Importante: A meno che l'obiettivo non sia quello di rendere NGINX il controller di ingresso predefinito, non utilizzare nginx come controller di ingresso NGINX, perché in questo modo NGINX sarà il controller di ingresso predefinito.

Scenario 3: NCP non gestisce alcun ingresso indipendentemente dalla sua annotazione.

Eseguire questa procedura:
  1. Modificare la sezione nsx_v3 in ncp.ini in ogni nodo master.
    1. Impostare use_native_loadbalancer su False. Il valore di default_ingress_class_nsx è ora irrilevante.
  2. Riavviare NCP in ogni nodo master. Ciò potrebbe causare un failover del nodo master.

Si tenga presente che NCP non gestirà nemmeno i servizi di tipo LoadBalancer.