Skip to content

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:

  1. Download the kxi-terraform bundle version 1.18.3 or later.

  2. Untar into a new directory on the host used to run the terraform scripts.

    Note

    Make sure you don't overwrite your existing kxi-terraform dir.

  3. Set the following environment variables in your shell to point to the old and new kxi-terraform directories.

    export OLD_TF_DIR="<old kxi-terraform dir>"
    export NEW_TF_DIR="<new kxi-terraform dir>"
    
  4. Copy the client.ovpn and kxi-terraform.env files from your previous terraform directory to the new directory using the following commands.

    Note

    Ensure the client.ovpn file is located in the kxi-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" \;
    
  5. 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
    
  6. Ensure that the manage-cluster docker container is not currently running.

    source $NEW_TF_DIR/kxi-terraform.env
    docker stop $CLOUD-$ENV-manage-cluster
    
  7. Add the new TF environment variable to the kxi-terraform.env file.

    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:

  1. Build the new kxi-terraform docker image.

    cd $NEW_TF_DIR
    ./scripts/build-image.sh
    
  2. Run the manage-cluster.sh script.

    ./scripts/manage-cluster.sh
    
  3. Run the terraform init command.

    ./scripts/terraform.sh init config
    
  4. 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"
    
  5. Run the terraform apply command.

    ./scripts/terraform.sh apply config
    

Post deploy checks

  1. Run the manage-cluster.sh script.

    ./scripts/manage-cluster.sh
    
  2. Verify the nginx-community helm chart has been deployed.

    List any helm releases in the nginx-community namespace.

    helm ls -n nginx-community
    

    This 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
    
  3. Verify the nginx-community pods are running and healthy.

    List all pods in the nginx-community namespace.

    kubectl get pods -n nginx-community
    

    This 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          63m
    

    Note

    There should be one pod per Kubernetes node as the controller deployment is a DaemonSet.

  4. Verify the nginx-community controller has an associated service with an external IP or load balancer.

    Check for service endpoints in the ingress-nginx namespace.

    kubectl get svc -n nginx-community nginx-community-nginx-ingress-controller
    

    This 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
    
  5. Verify the nginx-community ingress class is available in the cluster.

    Check for the ingress class.

    kubectl get ingressclass -n nginx-community nginx-community
    

    This 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:

  1. Ensure that the manage-cluster docker container is not currently running.

    source $NEW_TF_DIR/kxi-terraform.env
    docker stop $CLOUD-$ENV-manage-cluster
    
  2. 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
    
  3. Run the manage-cluster.sh script.

    ./scripts/manage-cluster.sh
    
  4. Run the terraform init command.

    ./scripts/terraform.sh init config
    
  5. 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"
    
  6. Run the terraform apply command.

    ./scripts/terraform.sh apply config
    
  7. Verify the ingress-nginx helm chart has been removed.

    List any helm releases in the ingress-nginx namespace.

    helm ls -n ingress-nginx
    

    This should produce the following output:

    NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
    
  8. Verify the ingress-nginx pods and services have been deleted.

    Check for running pods in the ingress-nginx namespace.

    kubectl get pods -n ingress-nginx
    

    This should produce the following output:

    No resources found in ingress-nginx namespace
    

    Check for service endpoints in the ingress-nginx namespace.

    kubectl get svc -n ingress-nginx
    

    This should produce the following output.

    No resources found in ingress-nginx namespace