Community
Upgrade HAProxy Kubernetes Ingress Controller
When to use this procedure
You can use this procedure to upgrade HAProxy Kubernetes Ingress Controller anywhere you have installed it using Helm. This includes on-premises installations as well as installations in cloud providers.
When migrating TCP custom resources to version 3.1
For TCP custom resources that you deployed prior to upgrading to version 3.1, beware that you must update them to have an ingress.class annotation that matches the ingress.class set on the ingress controller. Otherwise, frontends and backends managed by that custom resource will be deleted. Add the annotation prior to performing the upgrade to 3.1. You can also set the empty-ingress-class startup argument.
If you installed the ingress controller using Helm, you can use the helm upgrade command to upgrade to the latest version. Helm will initiate a rolling update, waiting for the new ingress controller pods to start up before terminating the old ingress controller pods. That way, there is no interruption in service.
To perform the upgrade:
When calling helm upgrade, pass all arguments that you previously used when installing the ingress controller. Helm will install the latest version.
nixhelm upgrade haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \--create-namespace \--namespace haproxy-controller
nixhelm upgrade haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \--create-namespace \--namespace haproxy-controller
outputtextRelease "haproxy-kubernetes-ingress" has been upgraded. Happy Helming!NAME: haproxy-kubernetes-ingressLAST DEPLOYED: Fri Jan 19 21:30:16 2024NAMESPACE: haproxy-controllerSTATUS: deployedREVISION: 2TEST SUITE: NoneNOTES:HAProxy Kubernetes Ingress Controller has been successfully installed.Controller image deployed is: "haproxytech/kubernetes-ingress:1.10.10".[...]
outputtextRelease "haproxy-kubernetes-ingress" has been upgraded. Happy Helming!NAME: haproxy-kubernetes-ingressLAST DEPLOYED: Fri Jan 19 21:30:16 2024NAMESPACE: haproxy-controllerSTATUS: deployedREVISION: 2TEST SUITE: NoneNOTES:HAProxy Kubernetes Ingress Controller has been successfully installed.Controller image deployed is: "haproxytech/kubernetes-ingress:1.10.10".[...]
You can provide a specific version of the Helm chart you wish to use if you want to upgrade to a version that is not the latest version.
To see the list of available versions (and their corresponding Helm chart version) use the helm search repo command with the --versions flag to list all of the available versions of the Helm chart:
nixhelm search repo haproxytech/kubernetes-ingress --versions
nixhelm search repo haproxytech/kubernetes-ingress --versions
outputtextNAME CHART VERSION APP VERSION DESCRIPTIONhaproxytech/kubernetes-ingress 1.36.1 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.36.0 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.35.5 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.35.4 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.35.3 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.35.2 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.35.1 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.35.0 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.34.1 1.10.9 A Helm chart for HAProxy Kubernetes Ingress Con...[...]
outputtextNAME CHART VERSION APP VERSION DESCRIPTIONhaproxytech/kubernetes-ingress 1.36.1 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.36.0 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.35.5 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.35.4 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.35.3 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.35.2 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.35.1 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.35.0 1.10.10 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.34.1 1.10.9 A Helm chart for HAProxy Kubernetes Ingress Con...[...]
To upgrade to a specific version of the HAProxy Kubernetes Ingress Controller, use the --version parameter and provide the version of the Helm chart that corresponds to that version. For example, to install version 1.10.9, we will specify the Helm chart version as 1.34.1:
nixhelm upgrade haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \--create-namespace \--namespace haproxy-controller \--version 1.34.1
nixhelm upgrade haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \--create-namespace \--namespace haproxy-controller \--version 1.34.1
outputtextRelease "haproxy-kubernetes-ingress" has been upgraded. Happy Helming!NAME: haproxy-kubernetes-ingressLAST DEPLOYED: Fri Jan 19 21:32:28 2024NAMESPACE: haproxy-controllerSTATUS: deployedREVISION: 2TEST SUITE: NoneNOTES:HAProxy Kubernetes Ingress Controller has been successfully installed.Controller image deployed is: "haproxytech/kubernetes-ingress:1.10.9".[...]
outputtextRelease "haproxy-kubernetes-ingress" has been upgraded. Happy Helming!NAME: haproxy-kubernetes-ingressLAST DEPLOYED: Fri Jan 19 21:32:28 2024NAMESPACE: haproxy-controllerSTATUS: deployedREVISION: 2TEST SUITE: NoneNOTES:HAProxy Kubernetes Ingress Controller has been successfully installed.Controller image deployed is: "haproxytech/kubernetes-ingress:1.10.9".[...]
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:
-
Find the ingress controller pod using
kubectl get pods:nixkubectl get pods -n haproxy-controllernixkubectl get pods -n haproxy-controllerexample outputtextNAME READY STATUS RESTARTS AGEhaproxy-kubernetes-ingress-59f7587966-9kjtv 1/1 Running 0 11mexample outputtextNAME READY STATUS RESTARTS AGEhaproxy-kubernetes-ingress-59f7587966-9kjtv 1/1 Running 0 11m -
Using the name of the
haproxy-kubernetes-ingresspod (or one of the pods if you have more than one), callkubectl execwith the command/haproxy-ingress-controller --job-check-crdto 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.nixkubectl exec -it -n haproxy-controller haproxy-kubernetes-ingress-59f7587966-9kjtv -- /haproxy-ingress-controller --job-check-crdnixkubectl exec -it -n haproxy-controller haproxy-kubernetes-ingress-59f7587966-9kjtv -- /haproxy-ingress-controller --job-check-crdexample outputtext2024/05/24 18:35:41 maxprocs: Leaving GOMAXPROCS=2: CPU quota undefined2024/05/24 18:35:41 /src/main.go:83_ _ _ ____| | | | / \ | _ \ _ __ _____ ___ _| |_| | / _ \ | |_) | '__/ _ \ \/ / | | || _ |/ ___ \| __/| | | (_) > <| |_| ||_| |_/_/ \_\_| |_| \___/_/\_\\__, |_ __ _ |___/ ___ ____| |/ / _| |__ ___ _ __ _ __ ___| |_ ___ ___ |_ _/ ___|| ' / | | | '_ \ / _ \ '__| '_ \ / _ \ __/ _ \/ __| | | || . \ |_| | |_) | __/ | | | | | __/ || __/\__ \ | | |___|_|\_\__,_|_.__/ \___|_| |_| |_|\___|\__\___||___/ |___\____|2024/05/24 18:35:41 /src/main.go:84____ ____ ____ _ _ _ _/ ___| _ \| _ \ | | | |_ __ __| | __ _| |_ ___ _ __| | | |_) | | | | | | | | '_ \ / _` |/ _` | __/ _ \ '__|| |___| _ <| |_| | | |_| | |_) | (_| | (_| | || __/ |\____|_| \_\____/ \___/| .__/ \__,_|\__,_|\__\___|_||_|2024/05/24 18:35:41 INFO /src/main.go:85 HAProxy Ingress Controller CRD Updater v1.11.4 c336dcf2.dirty2024/05/24 18:35:41 INFO /src/main.go:86 Build from: github.com/haproxytech/kubernetes-ingress2024/05/24 18:35:41 INFO /src/main.go:87 Build date: 2024-05-03T08:58:19Z2024/05/24 18:35:41 INFO job/crd-check.go:31 checking CRDs2024/05/24 18:35:41 INFO job/crd-check.go:492024/05/24 18:35:41 INFO job/crd-check.go:50 checking CRD defaults.ingress.v1.haproxy.org2024/05/24 18:35:41 INFO job/crd-check.go:66 CRD defaults.ingress.v1.haproxy.org exists2024/05/24 18:35:41 INFO job/crd-check.go:92 CRD defaults.ingress.v1.haproxy.org exists as v1, CN[v5.1.4]2024/05/24 18:35:41 INFO job/crd-check.go:492024/05/24 18:35:41 INFO job/crd-check.go:50 checking CRD globals.ingress.v1.haproxy.org2024/05/24 18:35:41 INFO job/crd-check.go:66 CRD globals.ingress.v1.haproxy.org exists2024/05/24 18:35:41 INFO job/crd-check.go:92 CRD globals.ingress.v1.haproxy.org exists as v1, CN[v5.1.4]2024/05/24 18:35:41 INFO job/crd-check.go:492024/05/24 18:35:41 INFO job/crd-check.go:50 checking CRD backends.ingress.v1.haproxy.org2024/05/24 18:35:41 INFO job/crd-check.go:66 CRD backends.ingress.v1.haproxy.org exists2024/05/24 18:35:41 INFO job/crd-check.go:92 CRD backends.ingress.v1.haproxy.org exists as v1, CN[v5.1.4]2024/05/24 18:35:41 INFO job/crd-check.go:1112024/05/24 18:35:41 INFO job/crd-check.go:112 CRD update doneexample outputtext2024/05/24 18:35:41 maxprocs: Leaving GOMAXPROCS=2: CPU quota undefined2024/05/24 18:35:41 /src/main.go:83_ _ _ ____| | | | / \ | _ \ _ __ _____ ___ _| |_| | / _ \ | |_) | '__/ _ \ \/ / | | || _ |/ ___ \| __/| | | (_) > <| |_| ||_| |_/_/ \_\_| |_| \___/_/\_\\__, |_ __ _ |___/ ___ ____| |/ / _| |__ ___ _ __ _ __ ___| |_ ___ ___ |_ _/ ___|| ' / | | | '_ \ / _ \ '__| '_ \ / _ \ __/ _ \/ __| | | || . \ |_| | |_) | __/ | | | | | __/ || __/\__ \ | | |___|_|\_\__,_|_.__/ \___|_| |_| |_|\___|\__\___||___/ |___\____|2024/05/24 18:35:41 /src/main.go:84____ ____ ____ _ _ _ _/ ___| _ \| _ \ | | | |_ __ __| | __ _| |_ ___ _ __| | | |_) | | | | | | | | '_ \ / _` |/ _` | __/ _ \ '__|| |___| _ <| |_| | | |_| | |_) | (_| | (_| | || __/ |\____|_| \_\____/ \___/| .__/ \__,_|\__,_|\__\___|_||_|2024/05/24 18:35:41 INFO /src/main.go:85 HAProxy Ingress Controller CRD Updater v1.11.4 c336dcf2.dirty2024/05/24 18:35:41 INFO /src/main.go:86 Build from: github.com/haproxytech/kubernetes-ingress2024/05/24 18:35:41 INFO /src/main.go:87 Build date: 2024-05-03T08:58:19Z2024/05/24 18:35:41 INFO job/crd-check.go:31 checking CRDs2024/05/24 18:35:41 INFO job/crd-check.go:492024/05/24 18:35:41 INFO job/crd-check.go:50 checking CRD defaults.ingress.v1.haproxy.org2024/05/24 18:35:41 INFO job/crd-check.go:66 CRD defaults.ingress.v1.haproxy.org exists2024/05/24 18:35:41 INFO job/crd-check.go:92 CRD defaults.ingress.v1.haproxy.org exists as v1, CN[v5.1.4]2024/05/24 18:35:41 INFO job/crd-check.go:492024/05/24 18:35:41 INFO job/crd-check.go:50 checking CRD globals.ingress.v1.haproxy.org2024/05/24 18:35:41 INFO job/crd-check.go:66 CRD globals.ingress.v1.haproxy.org exists2024/05/24 18:35:41 INFO job/crd-check.go:92 CRD globals.ingress.v1.haproxy.org exists as v1, CN[v5.1.4]2024/05/24 18:35:41 INFO job/crd-check.go:492024/05/24 18:35:41 INFO job/crd-check.go:50 checking CRD backends.ingress.v1.haproxy.org2024/05/24 18:35:41 INFO job/crd-check.go:66 CRD backends.ingress.v1.haproxy.org exists2024/05/24 18:35:41 INFO job/crd-check.go:92 CRD backends.ingress.v1.haproxy.org exists as v1, CN[v5.1.4]2024/05/24 18:35:41 INFO job/crd-check.go:1112024/05/24 18:35:41 INFO job/crd-check.go:112 CRD update doneYou 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:text2024/05/24 18:41:05 INFO job/crd-check.go:57 CRD defaults.ingress.v1.haproxy.org does not exist2024/05/24 18:41:05 ERROR /src/main.go:91 customresourcedefinitions.apiextensions.k8s.io is forbidden: User "system:serviceaccount:haproxy-controller:haproxy-kubernetes-ingress" cannot create resource "customresourcedefinitions" in API group "apiextensions.k8s.io" at the cluster scopetext2024/05/24 18:41:05 INFO job/crd-check.go:57 CRD defaults.ingress.v1.haproxy.org does not exist2024/05/24 18:41:05 ERROR /src/main.go:91 customresourcedefinitions.apiextensions.k8s.io is forbidden: User "system:serviceaccount:haproxy-controller:haproxy-kubernetes-ingress" cannot create resource "customresourcedefinitions" in API group "apiextensions.k8s.io" at the cluster scopeThis means that the CRD is not installed. Install any missing CRDs and run the
kubectl execcommand again.
Do you have any suggestions on how we can improve the content of this page?