Skip to main content

Helm Values Reference

Complete reference for all configurable values in the byjg/easyhaproxy Helm chart.

Image Configuration​

ValueDescriptionDefault
image.repositoryContainer image repositorybyjg/easy-haproxy
image.tagImage tag. Defaults to the chart appVersion.""
image.pullPolicyImage pull policyAlways
imagePullSecretsList of image pull secret names[]
nameOverrideOverride the chart name""
fullnameOverrideOverride the full release name""

Deployment Mode​

Controls whether EasyHAProxy runs as a Deployment (with a Service) or a DaemonSet (binding to host ports).

ValueDescriptionDefault
replicaCountNumber of replicas (only used when service.create: true; a DaemonSet runs one pod per labeled node)1
service.createtrue → Deployment + Service (NodePort, ClusterIP or LoadBalancer). false → DaemonSet with host ports.false
service.typeService type when service.create: true: NodePort, ClusterIP or LoadBalancerClusterIP
service.annotationsAnnotations to add to the Service resource{}
Recommended mode

Set service.create: true and service.type: NodePort for most setups. DaemonSet mode (service.create: false) requires maintaining a node label across node replacements, which can cause outages if forgotten.

Port Binding​

ValueDescriptionDefault
binding.ports.httpHTTP host port (DaemonSet mode)80
binding.ports.httpsHTTPS host port (DaemonSet mode)443
binding.ports.statsHAProxy stats host port (DaemonSet mode)1936
binding.ports.dashboardMonitoring dashboard host port (always stats + 10000 inside the pod)11936
binding.nodePorts.httpHTTP node port (service.type: NodePort)31080
binding.nodePorts.httpsHTTPS node port (service.type: NodePort)31443
binding.nodePorts.statsHAProxy stats node port (service.type: NodePort)31936
binding.nodePorts.dashboardMonitoring dashboard node port (service.type: NodePort)31937
binding.additionalPortsList of additional ports to expose[]
Node ports

Kubernetes only accepts node ports in its node port range (30000-32767 by default). Before chart 2.0.7 the NodePort Service used binding.ports.*, so the defaults (80, 443, …) were rejected. If you set binding.ports.* to make NodePort work, move those values to binding.nodePorts.*.

EasyHAProxy Settings​

ValueDescriptionDefault
easyhaproxy.stats.usernameHAProxy stats usernameadmin
easyhaproxy.stats.enabledServe the stats endpoint and dashboard. false also removes ports 1936/11936 from the pod and Service.true
easyhaproxy.stats.passwordLogin password for the stats endpoint and dashboard. Empty serves them without a login.password
easyhaproxy.stats.corsOriginAllowed origin for stats API CORS (e.g. http://node01:11936). Required for the dashboard to load in a browser.""
easyhaproxy.refreshSeconds between service discovery polls"10"
easyhaproxy.customErrorsEnable custom HTML error pages"true"
easyhaproxy.sslModeTLS mode: strict, default, or looseloose
easyhaproxy.logLevel.certbotLog level for CertbotDEBUG
easyhaproxy.logLevel.easyhaproxyLog level for EasyHAProxyDEBUG
easyhaproxy.logLevel.haproxyLog level for HAProxyDEBUG
easyhaproxy.certbot.emailEmail address for Let's Encrypt / ACME registration""

Certificate Persistence​

Keeps the ACME/Certbot certificates (/etc/easyhaproxy/certs/certbot) on a PersistentVolumeClaim, so a pod restart does not request them again and run into the CA rate limits. Recommended whenever easyhaproxy.certbot.email is set.

ValueDescriptionDefault
persistence.certbot.enabledMount a PVC at /etc/easyhaproxy/certs/certbotfalse
persistence.certbot.existingClaimUse this existing PVC instead of creating one""
persistence.certbot.storageClassStorage class of the created PVC. Empty = default.""
persistence.certbot.accessModeAccess mode of the created PVCReadWriteOnce
persistence.certbot.sizeSize of the created PVC1Gi
note

With service.create: true and persistence enabled, the Deployment uses the Recreate strategy: a ReadWriteOnce volume cannot attach to the new pod while the old one still holds it. Expect a short gap during upgrades.

The created PVC has helm.sh/resource-policy: keep, so helm uninstall leaves the certificates in place. Delete the PVC by hand to remove them.

Ingress Status​

Controls how EasyHAProxy updates Kubernetes Ingress resources with load-balancer IPs.

ValueDescriptionDefault
ingressStatus.enabledUpdate Ingress resources with load-balancer IPstrue
ingressStatus.deploymentModeHow to detect/report IPs: auto, daemonset, nodeport, or clusterip. auto is recommended.auto
ingressStatus.externalHostnameHostname to report in Ingress status (for ClusterIP mode without a LoadBalancer)""
ingressStatus.updateIntervalSeconds between Ingress status updates30

DaemonSet Node Selection​

Only applies when service.create: false

These values are ignored when running as a Deployment (service.create: true).

ValueDescriptionDefault
masterNode.labelNode label key used for nodeAffinityeasyhaproxy/node
masterNode.valuesAccepted values for the node label["master"]

Label the target node before installing:

kubectl label nodes node-01 "easyhaproxy/node=master"
Label exactly one node

replicaCount does not apply to a DaemonSet: it runs one EasyHAProxy pod on every node with the label. Two labeled nodes mean two copies, with the problems described in Limitations, in particular failing ACME certificates.

Standard Kubernetes Fields​

ValueDescriptionDefault
podAnnotationsAnnotations added to the EasyHAProxy pod{}
resourcesCPU/memory requests and limits for the pod{}
nodeSelectorNode selector for pod scheduling{}
tolerationsTolerations for pod scheduling[]
affinityAffinity rules for pod scheduling. In DaemonSet mode nodeAffinity comes from masterNode; other keys (e.g. podAntiAffinity) are kept.{}
podSecurityContextPod-level security context{}
securityContextContainer-level security context{}

Service Account​

ValueDescriptionDefault
serviceAccount.createCreate a dedicated ServiceAccounttrue
serviceAccount.annotationsAnnotations to add to the ServiceAccount{}
serviceAccount.nameName of the ServiceAccount. Auto-generated if empty.""

Ingress Class​

ValueDescriptionDefault
ingressClass.createCreate an IngressClass resource named easyhaproxytrue
ingressClass.annotationsAnnotations to add to the IngressClass{}

Open source ByJG