HAProxy has been has been successfully installed. This Chart is used to run HAProxy as a regular application, as opposed to HAProxy Ingress Controller Chart. Controller image deployed is: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}". Your HAProxy app is of a "{{ .Values.kind }}" kind. Service ports mapped are: {{- $nodePorts := .Values.service.nodePorts }} {{- $servicePortType := .Values.service.type }} {{- if eq .Values.kind "Deployment" }} {{- range $key, $value := .Values.containerPorts }} - name: {{ $key }} containerPort: {{ $value }} protocol: TCP {{- if and (hasKey $nodePorts $key) (eq $servicePortType "NodePort") }} nodePort: {{ get $nodePorts $key }} {{- end }} {{- end }} {{- end }} {{- if eq .Values.kind "DaemonSet" }} {{- $hostPorts := .Values.daemonset.hostPorts -}} {{- $useHostPort := .Values.daemonset.useHostPort -}} {{- range $key, $value := .Values.containerPorts }} - name: {{ $key }} containerPort: {{ $value }} protocol: TCP {{- if $useHostPort }} hostPort: {{ index $hostPorts $key | default $value }} {{- end }} {{- if and (hasKey $nodePorts $key) (eq $servicePortType "NodePort") }} nodePort: {{ get $nodePorts $key }} {{- end }} {{- end }} {{- end }} To be able to bind to privileged ports as non-root, the following is required: securityContext: enabled: true runAsUser: 1000 runAsGroup: 1000 initContainers: - name: sysctl image: "busybox:musl" command: - /bin/sh - -c - sysctl -w net.ipv4.ip_unprivileged_port_start=0 securityContext: privileged: true Node IP can be found with: $ kubectl --namespace {{ template "haproxy.namespace" . }} get nodes -o jsonpath="{.items[0].status.addresses[1].address}" For more examples and up to date documentation, please visit: * Helm chart documentation: https://github.com/haproxytech/helm-charts/tree/main/haproxy * HAProxy Alpine Docker container documentation: https://github.com/haproxytech/haproxy-docker-alpine * HAProxy documentation: https://www.haproxy.org/download/2.7/doc/configuration.txt