Upgrade

Upgrade on premises

Upgrade the ingress controller Jump to heading

When to use this procedure

Use this procedure if you have an HAProxy Enterprise license key.

If you installed the ingress controller using Helm, then you can use the helm upgrade command to upgrade to the latest version. Helm will initiate a rolling update, wherein it waits for the new ingress controller pods to start up before terminating the old ingress controller pods. That way, there is no break in service.

To perform the upgrade:

  • When calling helm upgrade, pass all arguments that you previously used when installing the ingress controller, including your license key, but set controller.image.tag to v1.11.

    nix
    helm upgrade haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \
    --create-namespace \
    --namespace haproxy-controller \
    --set controller.imageCredentials.registry=kubernetes-registry.haproxy.com \
    --set controller.imageCredentials.username=<KEY> \
    --set controller.imageCredentials.password=<KEY> \
    --set controller.image.repository=kubernetes-registry.haproxy.com/hapee-ingress \
    --set controller.image.tag=v1.11
    nix
    helm upgrade haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \
    --create-namespace \
    --namespace haproxy-controller \
    --set controller.imageCredentials.registry=kubernetes-registry.haproxy.com \
    --set controller.imageCredentials.username=<KEY> \
    --set controller.imageCredentials.password=<KEY> \
    --set controller.image.repository=kubernetes-registry.haproxy.com/hapee-ingress \
    --set controller.image.tag=v1.11

Update CRDs Jump to heading

If you installed the ingress controller with Helm, updates to CRDs are applied automatically upon installation (helm install) and upgrade (helm upgrade). If you installed the ingress controller via kubectl, you will need to run a CRD update job using kubectl.

Prerequisites

This procedure does not install CRDs. Before updating them, you must make sure they are installed. See each CRD page under the Reference section for more information.

To update your CRDs:

  1. Find the ingress controller pod using kubectl get pods:

    nix
    kubectl get pods -n haproxy-controller
    nix
    kubectl get pods -n haproxy-controller
    example output
    text
    NAME READY STATUS RESTARTS AGE
    haproxy-kubernetes-ingress-59f7587966-9kjtv 1/1 Running 0 11m
    example output
    text
    NAME READY STATUS RESTARTS AGE
    haproxy-kubernetes-ingress-59f7587966-9kjtv 1/1 Running 0 11m
  2. Using the name of the haproxy-kubernetes-ingress pod (or one of the pods if you have more than one), call kubectl exec with the command /haproxy-ingress-controller --job-check-crd to update the CRDs. Note that this does not actually run an instance of the ingress controller, but rather, runs the ingress controller in a special mode that updates CRDs only.

    nix
    kubectl exec -it -n haproxy-controller haproxy-kubernetes-ingress-59f7587966-9kjtv -- /haproxy-ingress-controller --job-check-crd
    nix
    kubectl exec -it -n haproxy-controller haproxy-kubernetes-ingress-59f7587966-9kjtv -- /haproxy-ingress-controller --job-check-crd
    example output
    text
    2024/05/24 18:50:45 maxprocs: Leaving GOMAXPROCS=2: CPU quota undefined
    2024/05/24 18:50:45 /src/main.go:91
    _ _ _ ____ _____ _____
    | | | | / \ | _ \ _ __ _____ ___ _ | ____| ____|
    | |_| | / _ \ | |_) | '__/ _ \ \/ / | | | | _| | _|
    | _ |/ ___ \| __/| | | (_) > <| |_| | | |___| |___
    |_| |_/_/ \_\_| |_| \___/_/\_\\__, | |_____|_____|
    _ __ _ |___/ ___ ____
    | |/ / _| |__ ___ _ __ _ __ ___| |_ ___ ___ |_ _/ ___|
    | ' / | | | '_ \ / _ \ '__| '_ \ / _ \ __/ _ \/ __| | | |
    | . \ |_| | |_) | __/ | | | | | __/ || __/\__ \ | | |___
    |_|\_\__,_|_.__/ \___|_| |_| |_|\___|\__\___||___/ |___\____|
    2024/05/24 18:50:45 /src/main.go:92
    ____ ____ ____ _ _ _ _
    / ___| _ \| _ \ | | | |_ __ __| | __ _| |_ ___ _ __
    | | | |_) | | | | | | | | '_ \ / _` |/ _` | __/ _ \ '__|
    | |___| _ <| |_| | | |_| | |_) | (_| | (_| | || __/ |
    \____|_| \_\____/ \___/| .__/ \__,_|\__,_|\__\___|_|
    |_|
    2024/05/24 18:50:45 INFO /src/main.go:93 HAProxy Ingress Controller CRD Updater v1.11.3-ee4 38342bbb.dirty
    2024/05/24 18:50:45 INFO /src/main.go:94 Build from: github.com/haproxytech/kubernetes-ingress
    2024/05/24 18:50:45 INFO /src/main.go:95 Build date: 2024-04-26T07:37:43Z
    2024/05/24 18:50:45 INFO job/crd-check.go:31 checking CRDs
    2024/05/24 18:50:45 INFO job/crd-check.go:49
    2024/05/24 18:50:45 INFO job/crd-check.go:50 checking CRD defaults.ingress.v1.haproxy.com
    2024/05/24 18:50:45 INFO job/crd-check.go:66 CRD defaults.ingress.v1.haproxy.com exists
    2024/05/24 18:50:45 INFO job/crd-check.go:92 CRD defaults.ingress.v1.haproxy.com exists as v1, CN[v5.1.3-ee2]
    2024/05/24 18:50:45 INFO job/crd-check.go:49
    2024/05/24 18:50:45 INFO job/crd-check.go:50 checking CRD globals.ingress.v1.haproxy.com
    2024/05/24 18:50:45 INFO job/crd-check.go:66 CRD globals.ingress.v1.haproxy.com exists
    2024/05/24 18:50:45 INFO job/crd-check.go:92 CRD globals.ingress.v1.haproxy.com exists as v1, CN[v5.1.3-ee2]
    2024/05/24 18:50:45 INFO job/crd-check.go:49
    2024/05/24 18:50:45 INFO job/crd-check.go:50 checking CRD backends.ingress.v1.haproxy.com
    2024/05/24 18:50:45 INFO job/crd-check.go:66 CRD backends.ingress.v1.haproxy.com exists
    2024/05/24 18:50:45 INFO job/crd-check.go:92 CRD backends.ingress.v1.haproxy.com exists as v1, CN[v5.1.3-ee2]
    2024/05/24 18:50:45 INFO job/crd-check.go:111
    2024/05/24 18:50:45 INFO job/crd-check.go:112 CRD update done
    example output
    text
    2024/05/24 18:50:45 maxprocs: Leaving GOMAXPROCS=2: CPU quota undefined
    2024/05/24 18:50:45 /src/main.go:91
    _ _ _ ____ _____ _____
    | | | | / \ | _ \ _ __ _____ ___ _ | ____| ____|
    | |_| | / _ \ | |_) | '__/ _ \ \/ / | | | | _| | _|
    | _ |/ ___ \| __/| | | (_) > <| |_| | | |___| |___
    |_| |_/_/ \_\_| |_| \___/_/\_\\__, | |_____|_____|
    _ __ _ |___/ ___ ____
    | |/ / _| |__ ___ _ __ _ __ ___| |_ ___ ___ |_ _/ ___|
    | ' / | | | '_ \ / _ \ '__| '_ \ / _ \ __/ _ \/ __| | | |
    | . \ |_| | |_) | __/ | | | | | __/ || __/\__ \ | | |___
    |_|\_\__,_|_.__/ \___|_| |_| |_|\___|\__\___||___/ |___\____|
    2024/05/24 18:50:45 /src/main.go:92
    ____ ____ ____ _ _ _ _
    / ___| _ \| _ \ | | | |_ __ __| | __ _| |_ ___ _ __
    | | | |_) | | | | | | | | '_ \ / _` |/ _` | __/ _ \ '__|
    | |___| _ <| |_| | | |_| | |_) | (_| | (_| | || __/ |
    \____|_| \_\____/ \___/| .__/ \__,_|\__,_|\__\___|_|
    |_|
    2024/05/24 18:50:45 INFO /src/main.go:93 HAProxy Ingress Controller CRD Updater v1.11.3-ee4 38342bbb.dirty
    2024/05/24 18:50:45 INFO /src/main.go:94 Build from: github.com/haproxytech/kubernetes-ingress
    2024/05/24 18:50:45 INFO /src/main.go:95 Build date: 2024-04-26T07:37:43Z
    2024/05/24 18:50:45 INFO job/crd-check.go:31 checking CRDs
    2024/05/24 18:50:45 INFO job/crd-check.go:49
    2024/05/24 18:50:45 INFO job/crd-check.go:50 checking CRD defaults.ingress.v1.haproxy.com
    2024/05/24 18:50:45 INFO job/crd-check.go:66 CRD defaults.ingress.v1.haproxy.com exists
    2024/05/24 18:50:45 INFO job/crd-check.go:92 CRD defaults.ingress.v1.haproxy.com exists as v1, CN[v5.1.3-ee2]
    2024/05/24 18:50:45 INFO job/crd-check.go:49
    2024/05/24 18:50:45 INFO job/crd-check.go:50 checking CRD globals.ingress.v1.haproxy.com
    2024/05/24 18:50:45 INFO job/crd-check.go:66 CRD globals.ingress.v1.haproxy.com exists
    2024/05/24 18:50:45 INFO job/crd-check.go:92 CRD globals.ingress.v1.haproxy.com exists as v1, CN[v5.1.3-ee2]
    2024/05/24 18:50:45 INFO job/crd-check.go:49
    2024/05/24 18:50:45 INFO job/crd-check.go:50 checking CRD backends.ingress.v1.haproxy.com
    2024/05/24 18:50:45 INFO job/crd-check.go:66 CRD backends.ingress.v1.haproxy.com exists
    2024/05/24 18:50:45 INFO job/crd-check.go:92 CRD backends.ingress.v1.haproxy.com exists as v1, CN[v5.1.3-ee2]
    2024/05/24 18:50:45 INFO job/crd-check.go:111
    2024/05/24 18:50:45 INFO job/crd-check.go:112 CRD update done

    You should see in the output the text CRD update done, which means that the update was successful. If you receive an error like the following:

    text
    2024/05/24 18:51:59 INFO job/crd-check.go:57 CRD backends.ingress.v1.haproxy.com does not exist
    2024/05/24 18:51:59 ERROR /src/main.go:99 customresourcedefinitions.apiextensions.k8s.io is forbidden: User "system:serviceaccount:haproxy-controller:haproxy-ingress-service-account" cannot create resource "customresourcedefinitions" in API group "apiextensions.k8s.io" at the cluster scope
    text
    2024/05/24 18:51:59 INFO job/crd-check.go:57 CRD backends.ingress.v1.haproxy.com does not exist
    2024/05/24 18:51:59 ERROR /src/main.go:99 customresourcedefinitions.apiextensions.k8s.io is forbidden: User "system:serviceaccount:haproxy-controller:haproxy-ingress-service-account" cannot create resource "customresourcedefinitions" in API group "apiextensions.k8s.io" at the cluster scope

    This means that the CRD is not installed. Install any missing CRDs and run the kubectl exec command again.

Do you have any suggestions on how we can improve the content of this page?