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
Choose one of the following installation methods:
Install with Helm
-
Add the HAProxy Technologies Helm repository:
$ helm repo add haproxytech https://haproxytech.github.io/helm-charts
-
Update your list of charts:
$ helm repo update
-
Install the latest version of the ingress controller:
$ helm install haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \ --create-namespace \ --namespace haproxy-controller
By default, the Helm chart adds
--ingress.class=haproxy
to the ingress controller. That means that it will useIngress
resources only if they specify an annotation ofkubernetes.io/ingress.class: haproxy
. You can disable this by setting--set controller.ingressClass=null
when callinghelm install
.
Install a Specific Version
-
You can use
helm search repo
with the--versions
flag to list all of the available versions of the Helm chart:$ helm search repo haproxy --versions
output
NAME CHART VERSION APP VERSION DESCRIPTION haproxytech/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
:$ helm install haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \ --create-namespace \ --namespace haproxy-controller \ --version 1.16.2
Install with preset NodePort values
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.
$ kubectl get service haproxy-kubernetes-ingress --namespace haproxy-controller
output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
haproxy-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.
$ 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
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.
$ 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
If you prefer to install without Helm, then you can install the Deployment YAML file directly.
-
Use the
kubectl apply
command to deploy the controller:$ kubectl apply -f https://raw.githubusercontent.com/haproxytech/kubernetes-ingress/v1.10/deploy/haproxy-ingress.yaml
You 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
Verify that the controller is installed into your Kubernetes cluster by using the command kubectl get pods
:
$ kubectl get pods --namespace haproxy-controller
output
NAME READY STATUS RESTARTS AGE
haproxy-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.
$ kubectl get svc --namespace haproxy-controller
output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
haproxy-kubernetes-ingress NodePort 10.104.173.167 <none> 80:30264/TCP,443:31575/TCP,1024:31785/TCP 155m
Next up
Install on Rancher