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.
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