global
    maxconn                 4000
    log                     127.0.0.1 local0

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option                  http-server-close
    option                  redispatch
    retries                 5
    timeout http-request    5m
    timeout queue           5m
    timeout connect         30s
    timeout client          30s
    timeout server          15m
    timeout http-keep-alive 30s
    timeout check           30s
    maxconn                 4000

frontend healthz
  bind *:{{ .kubernetes.control_plane_endpoint.haproxy.health_port }}
  mode http
  monitor-uri /healthz

frontend kube_api_frontend
  bind {{ .kubernetes.control_plane_endpoint.haproxy.address }}:{{ .kubernetes.control_plane_endpoint.port }}
  mode tcp
  option tcplog
  default_backend kube_api_backend

backend kube_api_backend
  mode tcp
  balance leastconn
  default-server inter 15s downinter 15s rise 2 fall 2 slowstart 60s maxconn 1000 maxqueue 256 weight 100
  option httpchk GET /healthz
  http-check expect status 200
{{- range .groups.kube_control_plane | default list }}
  {{- $internalIPv4 := index $.hostvars . "internal_ipv4" | default "" }}
  {{- $internalIPv6 := index $.hostvars . "internal_ipv6" | default "" }}
  {{- if $internalIPv4 | empty | not }}
  server {{ index $.hostvars . "hostname" }} {{ $internalIPv4 }}:{{ $.kubernetes.apiserver.port }} check check-ssl verify none
  {{- else if $internalIPv6 | empty | not }}
  server {{ index $.hostvars . "hostname" }} {{ $internalIPv6 }}:{{ $.kubernetes.apiserver.port }} check check-ssl verify none
  {{- end }}
{{- end }}
