Install on Amazon EKS
Install HAProxy Enterprise Kubernetes Ingress Controller on AWS EKS using an HAProxy Enterprise license key
This section shows you how to install the HAProxy Enterprise Kubernetes Ingress Controller in Amazon Elastic Kubernetes Service using a license key acquired from HAProxy Technologies (not an Amazon Marketplace subscription).
The procedure should take approximately 15 minutes to complete.
Pre-installation checklist Jump to heading
Ensure you have met the following requirements before installing:
- A running EKS Kubernetes cluster with a configured node group
- The AWS CLI
- The helm command-line tool
- The kubectl command-line tool
Connect to your EKS cluster Jump to heading
Follow these steps to connect to your EKS cluster:
-
Register for your HAProxy Enterprise license key by requesting a free trial. You will use this to access the HAProxy Technologies container registry.
-
If you do not already have an access key for your AWS account, create a new one:
- From the AWS Console, expand your account menu, located in the upper right, and select Security credentials.
- On the My security credentials page, go to the Access keys section and create a new access key. This will give you an Access Key ID and Secret Access key. Store these somewhere so that you have them later.
-
On your local workstation, configure the AWS CLI to connect to your AWS account by creating a profile via the
aws configure
command. This will prompt you for your access key and secret access key.bashaws configurebashaws configureLearn more about profiles.
-
Connect to your Kubernetes cluster using the AWS CLI. This will create a
~/.kube/config
file:bashaws eks update-kubeconfig --region [Your region] --name [Your cluster name]bashaws eks update-kubeconfig --region [Your region] --name [Your cluster name]For example:
bashaws eks update-kubeconfig --region us-east-1 --name example-clusterbashaws eks update-kubeconfig --region us-east-1 --name example-cluster -
Check that you can access the cluster by calling
kubectl get pods
:bashkubectl get podsbashkubectl get podsoutputbashNo resources found in default namespace.outputbashNo resources found in default namespace.
Install 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 charts:
bashhelm repo updatebashhelm repo update -
Install the v1.9 version of the ingress controller, replacing
<KEY>
with your HAProxy Enterprise license key:bashhelm install 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.9 \--set controller.service.type=LoadBalancerbashhelm install 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.9 \--set controller.service.type=LoadBalancerThis will create an EC2 Classic Load Balancer that routes traffic to the ingress controller service. You can find its DNS name by going to the EC2 Dashboard and viewing Load Balancing > Load Balancers, then selecting the load balancer.
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 with kubectl Jump to heading
-
Download the deployment YAML file.
-
Edit the
haproxy-ingress
Service object in the YAML file, setting itstype
field toLoadBalancer
:haproxy-ingress.hapee.yamlyamlapiVersion: v1kind: Servicemetadata:labels:run: haproxy-ingressname: haproxy-ingressnamespace: haproxy-controllerspec:selector:run: haproxy-ingresstype: LoadBalancerports:- name: httpport: 80protocol: TCPtargetPort: 80- name: httpsport: 443protocol: TCPtargetPort: 443- name: statport: 1024protocol: TCPtargetPort: 1024haproxy-ingress.hapee.yamlyamlapiVersion: v1kind: Servicemetadata:labels:run: haproxy-ingressname: haproxy-ingressnamespace: haproxy-controllerspec:selector:run: haproxy-ingresstype: LoadBalancerports:- name: httpport: 80protocol: TCPtargetPort: 80- name: httpsport: 443protocol: TCPtargetPort: 443- name: statport: 1024protocol: TCPtargetPort: 1024 -
Use the
kubectl apply
command to deploy the controller:bashkubectl apply -f haproxy-ingress.hapee.yamlbashkubectl apply -f haproxy-ingress.hapee.yamlThis will create an EC2 Classic Load Balancer that routes traffic to the ingress controller service.
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
Get the External IP, which you can use to access your cluster:
bash
kubectl get services --namespace haproxy-controller
bash
kubectl get services --namespace haproxy-controller
outputbash
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEhaproxy-kubernetes-ingress LoadBalancer 10.104.173.167 a1234-5678-9012.us-east-2.elb.amazonaws.com 80:30264/TCP,443:31575/TCP,1024:31785/TCP 157m
outputbash
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEhaproxy-kubernetes-ingress LoadBalancer 10.104.173.167 a1234-5678-9012.us-east-2.elb.amazonaws.com 80:30264/TCP,443:31575/TCP,1024:31785/TCP 157m
If this page was useful, please, Leave the feedback.