1
+ {{- if .Values.haproxy.enabled }}
2
+ {{- if .Values.haproxy.pathbased.enabled }}
3
+ {{- $replicas := int .Values.replicaCount }}
4
+ {{- $releaseName := include "marklogic.fullname" . }}
5
+ {{- $namespace := .Release.Namespace }}
6
+ {{- $clusterDomain := .Values.clusterDomain }}
7
+ {{- $haproxyTlsEnabled := .Values.haproxy.tls.enabled }}
8
+ {{- $appServerTlsEnabled := .Values.tls.enableOnDefaultAppServers -}}
9
+ {{- $certFileName := .Values.haproxy.tls.certFileName }}
10
+ {{- $appservicespath := .Values.haproxy.defaultAppServers.appservices.path }}
11
+ {{- $adminpath := .Values.haproxy.defaultAppServers.admin.path }}
12
+ {{- $managepath := .Values.haproxy.defaultAppServers.manage.path }}
13
+ apiVersion : v1
14
+ kind : ConfigMap
15
+ metadata :
16
+ name : marklogic-haproxy
17
+ namespace : {{ .Release.Namespace }}
18
+ labels :
19
+ app.kubernetes.io/component : haproxy
20
+ data :
21
+ haproxy.cfg : |
22
+ global
23
+ log stdout format raw local0
24
+ maxconn 1024
25
+
26
+ defaults
27
+ log global
28
+ option forwardfor
29
+ timeout client 600s
30
+ timeout connect 600s
31
+ timeout server 600s
32
+
33
+ resolvers dns
34
+ # add nameserver from /etc/resolv.conf
35
+ parse-resolv-conf
36
+
37
+ hold valid 10s
38
+
39
+ # Maximum size of a DNS answer allowed, in bytes
40
+ accepted_payload_size 8192
41
+
42
+
43
+ # How long to "hold" a backend server's up/down status depending on the name resolution status.
44
+ # For example, if an NXDOMAIN response is returned, keep the backend server in its current state (up) for
45
+ # at least another 30 seconds before marking it as down due to DNS not having a record for it.
46
+ hold valid 10s
47
+ hold other 30s
48
+ hold refused 30s
49
+ hold nx 30s
50
+ hold timeout 30s
51
+ hold obsolete 30s
52
+
53
+ # How many times to retry a query
54
+ resolve_retries 3
55
+
56
+ # How long to wait between retries when no valid response has been received
57
+ timeout retry 5s
58
+
59
+ # How long to wait for a successful resolution
60
+ timeout resolve 5s
61
+
62
+
63
+ {{- if .Values.haproxy.stats.enabled }}
64
+ frontend stats
65
+ mode http
66
+ bind *:{{ .Values.haproxy.stats.port }}
67
+ stats enable
68
+ http-request use-service prometheus-exporter if { path /metrics }
69
+ stats uri /
70
+ {{- if .Values.haproxy.stats.auth.enabled }}
71
+ stats auth {{ .Values.haproxy.stats.auth.username }}:{{ .Values.haproxy.stats.auth.password }}
72
+ {{- end }}
73
+ stats refresh 10s
74
+ stats admin if LOCALHOST
75
+ {{- end }}
76
+
77
+ {{- if .Values.haproxy.tcpports.enabled }}
78
+ {{- range $_, $v := .Values.haproxy.tcpports.ports }}
79
+ {{ $portNumber := printf "%v" (default $v.port $v.targetPort) }}
80
+ listen odbc
81
+ bind :{{ $portNumber }}
82
+ mode tcp
83
+ balance leastconn
84
+ {{- range $i := until $replicas }}
85
+ server {{ printf "ml-%s-%s-%v" $releaseName $portNumber $i }} {{ $releaseName }}-{{ $i }}.{{ $releaseName }}.{{ $namespace }}.svc.{{ $clusterDomain }}:{{ $portNumber }} check resolvers dns init-addr none
86
+ {{- end }}
87
+ {{- end }}
88
+ {{- end }}
89
+
90
+ frontend marklogic
91
+ mode http
92
+ option httplog
93
+ bind :{{ .Values.haproxy.frontendPort }}
94
+ http-request set-header Host {{ $releaseName }}:80
95
+ http-request set-header REFERER http://{{ $releaseName }}:80
96
+ http-request set-header X-ML-QC-Path "{{ $appservicespath }}"
97
+ http-request set-header X-ML-ADM-Path "{{ $adminpath }}"
98
+ http-request set-header X-ML-MNG-Path "{{ $managepath }}"
99
+ use_backend marklogic-app-services if { path {{ $appservicespath }} } || { path_beg {{ $appservicespath }}/ }
100
+ use_backend marklogic-admin if { path {{ $adminpath }} } || { path_beg {{ $adminpath }}/ }
101
+ use_backend marklogic-manage if { path {{ $managepath }} } || { path_beg {{ $managepath }}/ }
102
+ {{- range $_, $v := .Values.haproxy.additionalAppServers }}
103
+ {{ $portNumber := printf "%v" (default $v.port $v.targetPort) }}
104
+ {{ $path := printf "%v" (default $v.path)}}
105
+ use_backend marklogic-{{$portNumber}} if { path {{ $path }} } || { path_beg {{ $path }}/ }
106
+ {{- end }}
107
+
108
+ backend marklogic-app-services
109
+ mode http
110
+ balance leastconn
111
+ option forwardfor
112
+ http-request replace-path {{ $appservicespath }}(/)?(.*) /\2
113
+ cookie haproxy insert indirect nocache maxidle 30m maxlife 4h
114
+ stick-table type string len 32 size 10k expire 4h
115
+ stick store-response res.cook(HostId)
116
+ stick store-response res.cook(SessionId)
117
+ stick match req.cook(HostId)
118
+ stick match req.cook(SessionId)
119
+ default-server check
120
+ {{- range $i := until $replicas }}
121
+ {{- if $appServerTlsEnabled }}
122
+ server {{ $releaseName }}-appservices-{{ $i }} {{ $releaseName }}-{{ $i }}.{{ $releaseName }}.{{ $namespace }}.svc.{{ $clusterDomain }}:8000 resolvers dns init-addr none cookie {{ $releaseName }}-appservices-{{ $i }} ssl verify none
123
+ {{- else }}
124
+ server {{ $releaseName }}-appservices-{{ $i }} {{ $releaseName }}-{{ $i }}.{{ $releaseName }}.{{ $namespace }}.svc.{{ $clusterDomain }}:8000 resolvers dns init-addr none cookie {{ $releaseName }}-appservices-{{ $i }}
125
+ {{- end }}
126
+ {{- end }}
127
+
128
+ backend marklogic-admin
129
+ mode http
130
+ balance leastconn
131
+ option forwardfor
132
+ http-request replace-path {{ $adminpath }}(/)?(.*) /\2
133
+ cookie haproxy insert indirect nocache maxidle 30m maxlife 4h
134
+ stick-table type string len 32 size 10k expire 4h
135
+ stick store-response res.cook(HostId)
136
+ stick store-response res.cook(SessionId)
137
+ stick match req.cook(HostId)
138
+ stick match req.cook(SessionId)
139
+ default-server check
140
+ {{- range $i := until $replicas }}
141
+ {{- if $appServerTlsEnabled }}
142
+ server {{ $releaseName }}-admin-{{ $i }} {{ $releaseName }}-{{ $i }}.{{ $releaseName }}.{{ $namespace }}.svc.{{ $clusterDomain }}:8001 resolvers dns init-addr none cookie {{ $releaseName }}-admin-{{ $i }} ssl verify none
143
+ {{- else }}
144
+ server {{ $releaseName }}-admin-{{ $i }} {{ $releaseName }}-{{ $i }}.{{ $releaseName }}.{{ $namespace }}.svc.{{ $clusterDomain }}:8001 resolvers dns init-addr none cookie {{ $releaseName }}-admin-{{ $i }}
145
+ {{- end }}
146
+ {{- end }}
147
+
148
+ backend marklogic-manage
149
+ mode http
150
+ balance leastconn
151
+ option forwardfor
152
+ http-request replace-path {{ $managepath }}(/)?(.*) /\2
153
+ cookie haproxy insert indirect nocache maxidle 30m maxlife 4h
154
+ stick-table type string len 32 size 10k expire 4h
155
+ stick store-response res.cook(HostId)
156
+ stick store-response res.cook(SessionId)
157
+ stick match req.cook(HostId)
158
+ stick match req.cook(SessionId)
159
+ default-server check
160
+ {{- range $i := until $replicas }}
161
+ {{- if $appServerTlsEnabled }}
162
+ server {{ $releaseName }}-manage-{{ $i }} {{ $releaseName }}-{{ $i }}.{{ $releaseName }}.{{ $namespace }}.svc.{{ $clusterDomain }}:8002 resolvers dns init-addr none cookie {{ $releaseName }}-manage-{{ $i }} ssl verify none
163
+ {{- else }}
164
+ server {{ $releaseName }}-manage-{{ $i }} {{ $releaseName }}-{{ $i }}.{{ $releaseName }}.{{ $namespace }}.svc.{{ $clusterDomain }}:8002 resolvers dns init-addr none cookie {{ $releaseName }}-manage-{{ $i }}
165
+ {{- end }}
166
+ {{- end }}
167
+
168
+ {{- range $_, $v := .Values.haproxy.additionalAppServers }}
169
+ {{ $portNumber := printf "%v" (default $v.port $v.targetPort) }}
170
+ {{ $portType := upper (printf "%s" $v.type) }}
171
+ {{ $path := printf "%v" (default $v.path)}}
172
+
173
+ backend marklogic-{{$portNumber}}
174
+ mode http
175
+ balance leastconn
176
+ option forwardfor
177
+ http-request replace-path {{$path}}(/)?(.*) /\2
178
+ cookie haproxy insert indirect nocache maxidle 30m maxlife 4h
179
+ stick-table type string len 32 size 10k expire 4h
180
+ stick store-response res.cook(HostId)
181
+ stick store-response res.cook(SessionId)
182
+ stick match req.cook(HostId)
183
+ stick match req.cook(SessionId)
184
+ default-server check
185
+ {{- range $i := until $replicas }}
186
+ {{- if $appServerTlsEnabled }}
187
+ server {{ printf "ml-%s-%s-%v" $releaseName $portNumber $i }} {{ $releaseName }}-{{ $i }}.{{ $releaseName }}.{{ $namespace }}.svc.{{ $clusterDomain }}:{{ $portNumber }} resolvers dns init-addr none cookie {{ $releaseName }}-{{ $portNumber }}-{{ $i }} ssl verify none
188
+ {{- else }}
189
+ server {{ printf "ml-%s-%s-%v" $releaseName $portNumber $i }} {{ $releaseName }}-{{ $i }}.{{ $releaseName }}.{{ $namespace }}.svc.{{ $clusterDomain }}:{{ $portNumber }} resolvers dns init-addr none cookie {{ $releaseName }}-{{ $portNumber }}-{{ $i }}
190
+ {{- end }}
191
+ {{- end }}
192
+ {{- end }}
193
+
194
+
195
+ {{- end }}
196
+ {{- end }}
0 commit comments