HAProxy Kubernetes Ingress Controller Documentation 1.4

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

  • A running Kubernetes cluster
  • The helm command-line tool
  • The kubectl command-line tool

Choose one of the following installation methods:

Install with Helm

  1. Add the HAProxy Technologies Helm repository:

    $ helm repo add haproxytech https://haproxytech.github.io/helm-charts
  2. Update your list of charts:

    $ helm repo update
  3. Install the latest version of the ingress controller:

    $ helm install haproxy-kubernetes-ingress haproxytech/kubernetes-ingress \
        --create-namespace \
        --namespace haproxy-controller

Install a Specific Version

  1. 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
    
      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...
  2. 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

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.

  1. Use the kubectl apply command to deploy the controller:

    $ kubectl apply -f https://raw.githubusercontent.com/haproxytech/kubernetes-ingress/v1.4/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

  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

  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