Ingress Controller Change
This page outlines the steps to migrate from ingress-nginx to the F5 NGINX Ingress Controller.
Background
Following the Ingress NGINX Retirement in March 2026, kdb Insights Enterprise has been updated to ensure continued use of a supported ingress controller. Both the product and the kxi-terraform scripts now support the F5 NGINX Ingress Controller.
F5 NGINX on 1.18
If you switched to F5 ingress, then future upgrades must be to 1.18.3 or later. 1.18.0, 1.18.1 and 1.18.2 do not support F5 ingress.
Prerequisites
The F5 NGINX Ingress / nginx-community controller is included in the kxi-terraform scripts for kdb Insights Enterprise version 1.18.3 and later.
To install the new controller in an existing deployment, complete the following steps:
-
Download the
kxi-terraformbundle version1.18.3or later. -
Untar into a new directory on the host used to run the terraform scripts.
Note
Make sure you don't overwrite your existing
kxi-terraformdir. -
Set the following environment variables in your shell to point to the old and new
kxi-terraformdirectories.export OLD_TF_DIR="<old kxi-terraform dir>" export NEW_TF_DIR="<new kxi-terraform dir>" -
Copy the
client.ovpnandkxi-terraform.envfiles from your previous terraform directory to the new directory using the following commands.Note
Ensure the
client.ovpnfile is located in thekxi-terraform/terraform/<cloud>/directory.find $OLD_TF_DIR -type f -name kxi-terraform.env -exec cp {} "$NEW_TF_DIR" \; cd "$OLD_TF_DIR" && sudo find terraform -type f -name "client.ovpn" -exec cp --parents {} "$NEW_TF_DIR" \; -
Check that the files have been copied successfully.
find $NEW_TF_DIR -type f -name kxi-terraform.env find $NEW_TF_DIR -type f -name client.ovpn -
Ensure that the manage-cluster docker container is not currently running.
source $NEW_TF_DIR/kxi-terraform.env docker stop $CLOUD-$ENV-manage-cluster -
Add the new
TFenvironment variable to thekxi-terraform.envfile.sed -i '/^TF_VAR_enable_ingress_nginx=/a TF_VAR_enable_nginx_community=true' $NEW_TF_DIR/kxi-terraform.env
Installation steps
To install, follow the steps below:
-
Build the new kxi-terraform docker image.
cd $NEW_TF_DIR ./scripts/build-image.sh -
Run the
manage-cluster.shscript../scripts/manage-cluster.sh -
Run the
terraform initcommand../scripts/terraform.sh init config -
Run the terraform plan command.
Note
The output should only show the new controller that's being added.
./scripts/terraform.sh plan config -target="helm_release.nginx-community" -
Run the terraform apply command.
./scripts/terraform.sh apply config
Post deploy checks
-
Run the
manage-cluster.shscript../scripts/manage-cluster.sh -
Verify the
nginx-communityhelm chart has been deployed.List any helm releases in the
nginx-communitynamespace.helm ls -n nginx-communityThis should produce the following output.
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION nginx-community nginx-community 1 2026-03-19 17:20:12.728168049 +0000 UTC deployed nginx-ingress-2.4.1 5.3.1 -
Verify the
nginx-communitypods are running and healthy.List all pods in the
nginx-communitynamespace.kubectl get pods -n nginx-communityThis should produce the following output.
NAME READY STATUS RESTARTS AGE nginx-community-nginx-ingress-controller-4xwsm 2/2 Running 0 49m nginx-community-nginx-ingress-controller-9wrnf 2/2 Running 0 37m nginx-community-nginx-ingress-controller-ct52n 2/2 Running 0 63mNote
There should be one pod per Kubernetes node as the controller deployment is a DaemonSet.
-
Verify the
nginx-communitycontroller has an associated service with an external IP or load balancer.Check for service endpoints in the
ingress-nginxnamespace.kubectl get svc -n nginx-community nginx-community-nginx-ingress-controllerThis should produce the following output.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-community-nginx-ingress-controller LoadBalancer 10.218.45.152 k8s-nginxcom-nginxcom-512b7f8bf9-d94f30f006a91773.elb.eu-west-1.amazonaws.com 80:31173/TCP,443:30097/TCP 20h -
Verify the
nginx-communityingress class is available in the cluster.Check for the ingress class.
kubectl get ingressclass -n nginx-community nginx-communityThis should produce the following output.
NAME CONTROLLER PARAMETERS AGE nginx-community nginx.org/ingress-controller <none> 10m
Next steps
Once the new ingress controller has been installed you can proceed to Insights Migration Steps.
Removing ingress-nginx
Once kdb Insights Enterprise has been switched over fully to the new nginx-community controller, you can remove the original ingress-nginx controller from your cluster, as follows:
-
Ensure that the manage-cluster docker container is not currently running.
source $NEW_TF_DIR/kxi-terraform.env docker stop $CLOUD-$ENV-manage-cluster -
Set the Terraform Variable to ingress-nginx to false.
sed -i -e "s/TF_VAR_enable_ingress_nginx=.*/TF_VAR_enable_ingress_nginx=false/g" $NEW_TF_DIR/kxi-terraform.env -
Run the
manage-cluster.shscript../scripts/manage-cluster.sh -
Run the
terraform initcommand../scripts/terraform.sh init config -
Run the terraform plan command.
Note
The output should show the new controller being added.
./scripts/terraform.sh plan config -target="helm_release.ingress-nginx" -
Run the terraform apply command.
./scripts/terraform.sh apply config -
Verify the
ingress-nginxhelm chart has been removed.List any helm releases in the
ingress-nginxnamespace.helm ls -n ingress-nginxThis should produce the following output:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION -
Verify the
ingress-nginxpods and services have been deleted.Check for running pods in the
ingress-nginxnamespace.kubectl get pods -n ingress-nginxThis should produce the following output:
No resources found in ingress-nginx namespaceCheck for service endpoints in the
ingress-nginxnamespace.kubectl get svc -n ingress-nginxThis should produce the following output.
No resources found in ingress-nginx namespace