Installation
Install on premises
This guide shows you how to install HAProxy Kubernetes Ingress Controller into an on-premises Kubernetes cluster. You can install either with Helm or kubectl.
Pre-installation checklist Jump to heading
Choose one of the following installation methods:
Install with Helm Jump to heading
-
Add the HAProxy Technologies Helm repository:
bashhelm repo add haproxytech https://haproxytech.github.io/helm-chartsbashhelm repo add haproxytech https://haproxytech.github.io/helm-charts -
Update your list of Helm charts:
bashhelm repo updatebashhelm repo update -
Install the latest version of the ingress controller:
bashhelm install haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \--create-namespace \--namespace haproxy-controllerbashhelm install haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \--create-namespace \--namespace haproxy-controllerAbout ingress class
By default, the Helm chart adds
--ingress.class=haproxy
to the ingress controller. That means that it will useIngress
resources only if they specifyingressClassName: haproxy
. You can disable this by setting--set controller.ingressClass=null
when callinghelm install
.This change was introduced in version 1.6.
Install a Specific Version Jump to heading
-
You can use
helm search repo
with the--versions
flag to list all of the available versions of the Helm chart:bashhelm search repo haproxy --versionsbashhelm search repo haproxy --versionsoutputbashNAME CHART VERSION APP VERSION DESCRIPTIONhaproxytech/kubernetes-ingress 1.16.3 1.6.7 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.16.2 1.6.5 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.16.1 1.6.5 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.16.0 1.6.3 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.15.4 1.6.3 A Helm chart for HAProxy Kubernetes Ingress Con...outputbashNAME CHART VERSION APP VERSION DESCRIPTIONhaproxytech/kubernetes-ingress 1.16.3 1.6.7 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.16.2 1.6.5 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.16.1 1.6.5 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.16.0 1.6.3 A Helm chart for HAProxy Kubernetes Ingress Con...haproxytech/kubernetes-ingress 1.15.4 1.6.3 A Helm chart for HAProxy Kubernetes Ingress Con... -
Then, use a specific chart version when you call
helm install
:bashhelm install haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \--create-namespace \--namespace haproxy-controller \--version 1.16.2bashhelm install haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \--create-namespace \--namespace haproxy-controller \--version 1.16.2
Install with preset NodePort values Jump to heading
By default, the ingress controller creates a Kubernetes service that assigns random NodePort ports. You can see this by calling kubectl get service kubernetes-service
. In the example below, the ingress controller listens on port 30706 for HTTP traffic and 30675 for HTTPS traffic. Port 31441 publishes the HAProxy Stats page.
bash
kubectl get service haproxy-kubernetes-ingress --namespace haproxy-controller
bash
kubectl get service haproxy-kubernetes-ingress --namespace haproxy-controller
outputbash
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEhaproxy-kubernetes-ingress NodePort 10.97.154.7 <none> 80:30706/TCP,443:30675/TCP,1024:31441/TCP 32s
outputbash
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEhaproxy-kubernetes-ingress NodePort 10.97.154.7 <none> 80:30706/TCP,443:30675/TCP,1024:31441/TCP 32s
You can choose specific NodePort ports instead by setting the controller.service.nodePort.http
, controller.service.nodePort.https
, and controller.service.nodePort.stat
Helm chart fields.
bash
helm install haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \--create-namespace \--namespace haproxy-controller \--set controller.service.nodePorts.http=30000 \--set controller.service.nodePorts.https=30001 \--set controller.service.nodePorts.stat=30002
bash
helm install haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \--create-namespace \--namespace haproxy-controller \--set controller.service.nodePorts.http=30000 \--set controller.service.nodePorts.https=30001 \--set controller.service.nodePorts.stat=30002
Run the ingress controller as a DaemonSet Jump to heading
By default, the ingress controller is installed using a Deployment resource. To use a DaemonSet instead, set the controller.kind
field to DaemonSet and controller.daemonset.useHostPort
to true.
bash
helm install haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \--create-namespace \--namespace haproxy-controller \--set controller.kind=DaemonSet \--set controller.daemonset.useHostPort=true
bash
helm install haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \--create-namespace \--namespace haproxy-controller \--set controller.kind=DaemonSet \--set controller.daemonset.useHostPort=true
Install with kubectl Jump to heading
If you prefer to install without Helm, then you can install the Deployment YAML file directly.
-
Download the latest source code from the HAProxy Kubernetes Ingress Controller GitHub page.
-
Use the
kubectl apply
command to deploy the controller:bashkubectl apply -f deploy/haproxy-ingress.yamlbashkubectl apply -f deploy/haproxy-ingress.yamlYou can also download the YAML file and modify it for your needs before you apply it (such as changing the namespace in which the controller runs and/or its exposed ports).
Check your installation Jump to heading
Verify that the controller is installed into your Kubernetes cluster by using the command kubectl get pods
:
bash
kubectl get pods --namespace haproxy-controller
bash
kubectl get pods --namespace haproxy-controller
outputbash
NAME READY STATUS RESTARTS AGEhaproxy-kubernetes-ingress-7dd4cc4b-x5fkv 1/1 Running 0 1m
outputbash
NAME READY STATUS RESTARTS AGEhaproxy-kubernetes-ingress-7dd4cc4b-x5fkv 1/1 Running 0 1m
Call kubectl get svc
to see which ports were mapped. In this example, port 32063 forwards to port 80 on the ingress controller.
bash
kubectl get svc --namespace haproxy-controller
bash
kubectl get svc --namespace haproxy-controller
outputbash
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEhaproxy-kubernetes-ingress NodePort 10.104.173.167 <none> 80:30264/TCP,443:31575/TCP,1024:31785/TCP 155m
outputbash
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEhaproxy-kubernetes-ingress NodePort 10.104.173.167 <none> 80:30264/TCP,443:31575/TCP,1024:31785/TCP 155m
If this page was useful, please, Leave the feedback.