È 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.
- 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à.
- 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.
- Se il controller di ingresso proviene da https://github.com/kubernetes/ingress-nginx,
- nel controller di ingresso modificare ingress-class in modo che non sia "nginx".
- Se è presente un ingresso con l'annotazione kubernetes.io/ingress-class: "nginx", modificare l'annotazione impostandola su un valore diverso.
- Per ulteriori informazioni, vedere https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress.
- Se il controller di ingresso proviene da https://github.com/nginxinc/kubernetes-ingress,
- nel controller di ingresso modificare ingress-class in modo che non sia "nginx".
- Se è presente un ingresso con l'annotazione kubernetes.io/ingress-class: "nginx", modificare l'annotazione impostandola su un valore diverso.
- Nel pod del controller di ingresso impostare use-ingress-class-only su True. In questo modo, il controller non potrà aggiornare gli ingressi senza annotazione kubernetes.io/ingress-class.
- Per ulteriori informazioni, vedere https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/multiple-ingress.md.
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.
- Modificare la sezione nsx_v3 in ncp.ini in ogni nodo master.
- Impostare default_ingress_class_nsx su False.
- Lasciare use_native_loadbalancer impostato sul valore predefinito True.
- Riavviare NCP in ogni nodo master. Ciò potrebbe causare un failover del nodo master.
- 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.
- Non è necessario modificare ncp.ini. È sufficiente assicurarsi che ogni ingresso includa un'annotazione.
- 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.
- Gli ingressi da gestire con controller di ingresso di terze parti devono includere l'annotazione richiesta da tali controller di ingresso.
Scenario 3: NCP non gestisce alcun ingresso indipendentemente dalla sua annotazione.
- Modificare la sezione nsx_v3 in ncp.ini in ogni nodo master.
- Impostare use_native_loadbalancer su False. Il valore di default_ingress_class_nsx è ora irrilevante.
- 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.