Skip to content

Deploying with Helm

The Helm chart is the supported way to install HAPTIC. A default install deploys the controller, a 2-replica HAProxy Deployment, the CRDs, and a ready-to-use set of template libraries covering Ingress and Gateway API β€” so traffic routes without any template authoring. Cross-namespace HAProxy management, conditional resource watching, and which libraries load are all configured through Helm values.

Prerequisites

  • Kubernetes 1.21+ (the default PodDisruptionBudget uses policy/v1 and the controller watches discovery.k8s.io/v1 EndpointSlices)
  • Helm 3.0+
  • HAProxy 3.0 or newer (the chart deploys HAProxy by default; template libraries require 3.0+ for SSL/TLS features)

Note

The haproxyVersion value controls both the controller image tag and the HAProxy image tag, ensuring version compatibility between the two. See the configuration reference for details.

Installation

helm install my-controller oci://registry.gitlab.com/haproxy-haptic/haptic/charts/haptic --version 0.2.0-alpha.1

With custom values:

helm install my-controller oci://registry.gitlab.com/haproxy-haptic/haptic/charts/haptic \
  --version 0.2.0-alpha.1 \
  -f my-values.yaml

What's in this chart

The chart deploys:

  • Controller Deployment -- the controller that watches resources and generates configurations
  • HAProxy Deployment (optional, on by default) -- the load balancers that serve your traffic, with Dataplane API sidecars
  • CRDs -- five resource types under the haproxy-haptic.org API group: HAProxyTemplateConfig (input β€” templates, watched resources, settings) plus HAProxyCfg, HAProxyGeneralFile, HAProxyCRTListFile, and HAProxyMapFile (outputs the controller publishes for observability). Installed from charts/haptic/crds/; preserved across helm uninstall (delete them explicitly β€” see Uninstalling)
  • HAProxyTemplateConfig custom resource -- the merged template-library configuration that drives config rendering (created from the enabled controller.templateLibraries.* at render time)
  • IngressClass and GatewayClass -- routing API integration for Ingress and Gateway API resources
  • RBAC, NetworkPolicy, and ServiceAccount -- permissions and network security
  • Optional ServiceMonitor -- Prometheus integration for metrics scraping
  • Optional admission webhook -- configuration validation before deployment

New to HAPTIC? Getting Started walks through a first install and a sample app, end to end.

Where to go next

Jump to what you need:

I want to… See
Configure ingress class or filter namespaces Configuration
Set up TLS/HTTPS SSL Certificates
Use Ingress annotations (auth, rate limiting, etc.) Annotations
Tune HAProxy resource limits or service type HAProxy Deployment
Enable or disable template libraries Template Libraries
Run multiple controller replicas High Availability
Set up Prometheus scraping Monitoring
Restrict network access with NetworkPolicy Networking
Diagnose problems Troubleshooting

Upgrading

If you installed with a values file, re-pass it so your custom values survive the upgrade:

helm upgrade my-controller oci://registry.gitlab.com/haproxy-haptic/haptic/charts/haptic \
  --version 0.2.0-alpha.1 \
  -f my-values.yaml

Otherwise, upgrade without it:

helm upgrade my-controller oci://registry.gitlab.com/haproxy-haptic/haptic/charts/haptic \
  --version 0.2.0-alpha.1

Uninstalling

helm uninstall my-controller

Replace my-controller with whatever release name you used at install time. helm uninstall removes all resources created by the chart; the chart's CRDs are preserved so a reinstall picks up existing custom resources. To remove the CRDs as well, delete the whole haproxy-haptic.org API group explicitly:

kubectl delete crd \
  haproxytemplateconfigs.haproxy-haptic.org \
  haproxycfgs.haproxy-haptic.org \
  haproxygeneralfiles.haproxy-haptic.org \
  haproxycrtlistfiles.haproxy-haptic.org \
  haproxymapfiles.haproxy-haptic.org