# EasyHAProxy Ingress Controller Generated on 19 Feb 2026 from [the EasyHAProxy Ingress Controller catalog page](https://marketplace.digitalocean.com/apps/easyhaproxy-ingress-controller) [EasyHAProxy](https://easyhaproxy.com/) is a Kubernetes Ingress Controller and auto-discovery service built on HAProxy, a high-performance, battle-tested load balancer and reverse proxy for TCP and HTTP-based applications. EasyHAProxy automatically detects Kubernetes Ingress resources and configures HAProxy to route HTTP, HTTPS, and TCP traffic — with no manual HAProxy configuration required. It supports automatic SSL certificate issuance via Let’s Encrypt (ACME), custom TLS certificates, custom error pages, and extends HAProxy’s capabilities through plugins such as JWT validation, IP whitelisting, and Cloudflare support. Getting started is straightforward: enable EasyHAProxy from the DigitalOcean Marketplace, point a Load Balancer to your cluster, and add `spec.ingressClassName: easyhaproxy` to your Ingress resources. ## Software Included | Package | Version | License | |---|---|---| | haproxy | 3.3.3 | GPL2 | ## Creating an App using the Control Panel Click the **Deploy to DigitalOcean** button to install a Kubernetes 1-Click Application. If you aren’t logged in, this link will prompt you to log in with your DigitalOcean account. [![Deploy to DO](https://www.deploytodo.com/do-btn-blue.svg)](https://cloud.digitalocean.com/kubernetes/clusters/new?addonslug=easyhaproxy&nodePools=s-1vcpu-2gb%3A3) ## Creating an App using the API In addition to creating EasyHAProxy Ingress Controller using the control panel, you can also use the [DigitalOcean API](https://docs.digitalocean.com/reference/api). As an example, to create a 3 node DigitalOcean Kubernetes cluster made up of Basic Droplets in the SFO2 region, you can use the following `doctl` command. You need to authenticate with `doctl` with your [API access token](https://docs.digitalocean.com/reference/api/create-personal-access-token/index.html.md) and replace the `$CLUSTER_NAME` variable with the chosen name for your cluster in the command below. ```shell doctl kubernetes clusters create --size s-4vcpu-8gb $CLUSTER_NAME --1-clicks easyhaproxy ``` ## Getting Started After Deploying EasyHAProxy Ingress Controller After enabling EasyHAProxy, you must **manually** create a DigitalOcean Load Balancer pointing to your Kubernetes cluster — EasyHAProxy does not create one automatically. [Here](https://docs.digitalocean.com/products/networking/load-balancers/how-to/create/index.html.md) are the instructions. ### How to Set Up Your Application for EasyHAProxy Add `spec.ingressClassName: easyhaproxy` to your application’s Ingress resource: ``` apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress namespace: example spec: ingressClassName: easyhaproxy rules: - host: example.org http: paths: - backend: service: name: example-service port: number: 8080 pathType: ImplementationSpecific ``` > **Backward compatibility:** The annotation `kubernetes.io/ingress.class: easyhaproxy-ingress` is still supported but deprecated. Use `spec.ingressClassName` for new deployments. ### Troubleshooting ### Verify EasyHAProxy is Running Check that the pod is running and review logs: ``` kubectl get pods -n easyhaproxy kubectl logs -n easyhaproxy -l app=easyhaproxy --tail=100 ``` ### Test with a Simple HTTP Server Install the Static HTTP Server to verify EasyHAProxy is routing traffic correctly: ``` helm repo add byjg https://opensource.byjg.com/helm helm repo update helm upgrade --install mysite byjg/static-httpserver \ --namespace default \ --set "ingress.hosts={www.example.org,example.org}" \ --set parameters.title=Welcome ``` ### EasyHAProxy Container Not Starting EasyHAProxy is designed for single-replica deployment. In the default DigitalOcean Marketplace configuration (`service.create: true`), it runs as a standard Deployment and can be scheduled on any available node. If the pod is not starting: 1. Check pod events: `kubectl describe pod -n easyhaproxy -l app=easyhaproxy` 2. Verify the Load Balancer is properly configured. 3. Reinstall using: `helm upgrade --install easyhaproxy byjg/easyhaproxy --namespace easyhaproxy --set service.create=true`