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.

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