Skip to content

Commit ca3ae48

Browse files
meteozonda.klimenko
authored andcommitted
[stable/redis-ha] Add optional encrypted communication between HAProxy and Redis/Sentinel
Signed-off-by: Alexander Klimenko <alex@erix.ru>
1 parent f4aadb7 commit ca3ae48

10 files changed

Lines changed: 2366 additions & 29 deletions

File tree

.github/workflows/test.yaml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,21 @@ jobs:
5656
kubectl get nodes -o wide
5757
kubectl get pods -n kube-system
5858
59+
- name: Create test TLS secret
60+
if: steps.list-changed.outputs.changed == 'true'
61+
run: |
62+
kubectl create namespace ct-test
63+
openssl req -x509 -newkey rsa:2048 -keyout tls.key -out tls.crt \
64+
-days 1 -nodes -subj "/CN=test"
65+
cat tls.crt tls.key > tls.pem
66+
cp tls.crt ca.crt
67+
kubectl create secret generic test-tls-secret \
68+
--namespace ct-test \
69+
--from-file=tls.crt --from-file=tls.key \
70+
--from-file=ca.crt --from-file=tls.pem
71+
5972
- name: Run chart-testing linting (lint)
6073
run: ct lint --config .ci/ct-config.yaml --chart-repos hashicorp=https://helm.releases.hashicorp.com
6174

6275
- name: Run chart-testing (install)
63-
run: ct install --config .ci/ct-config.yaml
76+
run: ct install --config .ci/ct-config.yaml --namespace ct-test

charts/redis-ha/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ keywords:
55
- redis
66
- keyvalue
77
- database
8-
version: 4.35.10
8+
version: 4.36.0
99
appVersion: 8.2.4
1010
description: This Helm chart provides a highly available Redis implementation with a master/slave configuration and uses Sentinel sidecars for failover management
1111
icon: https://img.icons8.com/external-tal-revivo-shadow-tal-revivo/24/external-redis-an-in-memory-data-structure-project-implementing-a-distributed-logo-shadow-tal-revivo.png

charts/redis-ha/README.md

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ The following table lists the configurable parameters of the Redis chart and the
8888
| `hostPath.path` | Use this path on the host for data storage. path is evaluated as template so placeholders are replaced | string | `""` |
8989
| `image.pullPolicy` | Redis image pull policy | string | `"IfNotPresent"` |
9090
| `image.repository` | Redis image repository | string | `"public.ecr.aws/docker/library/redis"` |
91-
| `image.tag` | Redis image tag | string | `"8.2.1-alpine"` |
91+
| `image.tag` | Redis image tag | string | `"8.2.4-alpine"` |
9292
| `imagePullSecrets` | Reference to one or more secrets to be used when pulling redis images | list | `[]` |
9393
| `init.resources` | Extra init resources | object | `{}` |
9494
| `labels` | Custom labels for the redis pod | object | `{}` |
@@ -173,8 +173,22 @@ The following table lists the configurable parameters of the Redis chart and the
173173
| `serviceAccount.automountToken` | opt in/out of automounting API credentials into container. Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ | bool | `false` |
174174
| `serviceAccount.create` | Specifies whether a ServiceAccount should be created | bool | `true` |
175175
| `serviceAccount.name` | The name of the ServiceAccount to use. If not set and create is true, a name is generated using the redis-ha.fullname template | string | `""` |
176+
| `podAnnotations` | Annotations for redis statefulset pods (top-level) | object | `{}` |
177+
| `serviceAnnotations` | Custom annotations for redis services | object | `{}` |
176178
| `serviceLabels` | Custom labels for redis service | object | `{}` |
177179
| `splitBrainDetection.interval` | Interval between redis sentinel and server split brain checks (in seconds) | int | `60` |
180+
| `splitBrainDetection.livenessProbe.exec.command` | Command for liveness probe exec check | list | `["cat", "/readonly-config/redis.conf"]` |
181+
| `splitBrainDetection.livenessProbe.failureThreshold` | Failure threshold for liveness probe | int | `5` |
182+
| `splitBrainDetection.livenessProbe.initialDelaySeconds` | Initial delay in seconds for liveness probe | int | `30` |
183+
| `splitBrainDetection.livenessProbe.periodSeconds` | Period in seconds after which liveness probe will be repeated | int | `15` |
184+
| `splitBrainDetection.livenessProbe.successThreshold` | Success threshold for liveness probe | int | `1` |
185+
| `splitBrainDetection.livenessProbe.timeoutSeconds` | Timeout seconds for liveness probe | int | `15` |
186+
| `splitBrainDetection.readinessProbe.exec.command` | Command for readiness probe exec check | list | `["sh", "-c", "test -d /proc/1"]` |
187+
| `splitBrainDetection.readinessProbe.failureThreshold` | Failure threshold for readiness probe | int | `5` |
188+
| `splitBrainDetection.readinessProbe.initialDelaySeconds` | Initial delay in seconds for readiness probe | int | `30` |
189+
| `splitBrainDetection.readinessProbe.periodSeconds` | Period in seconds after which readiness probe will be repeated | int | `15` |
190+
| `splitBrainDetection.readinessProbe.successThreshold` | Success threshold for readiness probe | int | `1` |
191+
| `splitBrainDetection.readinessProbe.timeoutSeconds` | Timeout seconds for readiness probe | int | `15` |
178192
| `splitBrainDetection.resources` | splitBrainDetection resources | object | `{}` |
179193
| `splitBrainDetection.retryInterval` | | int | `10` |
180194
| `sysctlImage.command` | sysctlImage command to execute | list | `[]` |
@@ -187,6 +201,7 @@ The following table lists the configurable parameters of the Redis chart and the
187201
| `sysctlImage.tag` | sysctlImage Init container tag | string | `"1.34.1"` |
188202
| `tls.caCertFile` | Name of CA certificate file | string | `"ca.crt"` |
189203
| `tls.certFile` | Name of certificate file | string | `"redis.crt"` |
204+
| `tls.secretName` | Name of existing secret with TLS certificates. Supports templates. | string | `""` |
190205
| `tls.dhParamsFile` | Name of Diffie-Hellman (DH) key exchange parameters file (Example: redis.dh) | string | `nil` |
191206
| `tls.keyFile` | Name of key file | string | `"redis.key"` |
192207
| `tolerations` | | list | `[]` |
@@ -202,6 +217,7 @@ The following table lists the configurable parameters of the Redis chart and the
202217
| `sentinel.auth` | Enables or disables sentinel AUTH (Requires `sentinel.password` to be set) | bool | `false` |
203218
| `sentinel.authClients` | It is possible to disable client side certificates authentication when "authClients" is set to "no" | string | `""` |
204219
| `sentinel.authKey` | The key holding the sentinel password in an existing secret. | string | `"sentinel-password"` |
220+
| `sentinel.bind` | Configure the bind directive for sentinel | string | `nil` |
205221
| `sentinel.config` | Valid sentinel config options in this section will be applied as config options to each sentinel (see below) | object | see values.yaml |
206222
| `sentinel.customArgs` | | list | `[]` |
207223
| `sentinel.customCommand` | | list | `[]` |
@@ -245,10 +261,10 @@ The following table lists the configurable parameters of the Redis chart and the
245261
| `haproxy.additionalAffinities` | Additional affinities to add to the haproxy pods. | object | `{}` |
246262
| `haproxy.additionalPorts` | Additional ports to expose on HAProxy service and deployment. Each port should have a name, containerPort, and optionally servicePort (defaults to containerPort) | list | `[]` |
247263
| `haproxy.affinity` | Override all other affinity settings for the haproxy pods with a string. | string | `""` |
248-
| `haproxy.annotations` | HAProxy template annotations | object | `{}` |
249264
| `haproxy.checkFall` | haproxy.cfg `check fall` setting | int | `1` |
250265
| `haproxy.checkInterval` | haproxy.cfg `check inter` setting | string | `"1s"` |
251266
| `haproxy.containerPort` | Modify HAProxy deployment container port | int | `6379` |
267+
| `haproxy.tlsPort` | Dedicated TLS port for HAProxy frontend. When set together with `haproxy.tls.enabled`, plaintext stays on `containerPort` and TLS binds to `tlsPort`. When not set, `haproxy.tls.enabled` replaces plaintext with TLS on `containerPort` (current behavior). | int | `nil` |
252268
| `haproxy.containerSecurityContext` | Security context to be added to the HAProxy containers. | object | `{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"runAsNonRoot":true,"seccompProfile":{"type":"RuntimeDefault"}}` |
253269
| `haproxy.customConfig` | Allows for custom config-haproxy.cfg file to be applied. If this is used then default config will be overwriten | string | `nil` |
254270
| `haproxy.deploymentAnnotations` | HAProxy deployment annotations | object | `{}` |
@@ -309,10 +325,10 @@ The following table lists the configurable parameters of the Redis chart and the
309325
| `haproxy.timeout.connect` | haproxy.cfg `timeout connect` setting | string | `"4s"` |
310326
| `haproxy.timeout.server` | haproxy.cfg `timeout server` setting | string | `"330s"` |
311327
| `haproxy.timeout.tunnel` | haproxy.cfg `timeout tunnel` setting | string | `"1h"` |
312-
| `haproxy.tls` | Enable TLS termination on HAproxy, This will create a volume mount | object | `{"certMountPath":"/tmp/","enabled":false,"keyName":null,"secretName":""}` |
328+
| `haproxy.tls` | Enable TLS termination on HAproxy, This will create a volume mount | object | `{"certMountPath":"/tmp/","enabled":false,"keyName":"tls.pem","secretName":""}` |
313329
| `haproxy.tls.certMountPath` | Path to mount the secret that contains the certificates. haproxy | string | `"/tmp/"` |
314330
| `haproxy.tls.enabled` | If "true" this will enable TLS termination on haproxy | bool | `false` |
315-
| `haproxy.tls.keyName` | Key file name | string | `nil` |
331+
| `haproxy.tls.keyName` | Key file name (PEM bundle containing cert and private key) | string | `"tls.pem"` |
316332
| `haproxy.tls.secretName` | Secret containing the .pem file | string | `""` |
317333

318334
### Prometheus exporter parameters
@@ -350,7 +366,8 @@ The following table lists the configurable parameters of the Redis chart and the
350366
| `exporter.serviceMonitor.relabelings` | | list | `[]` |
351367
| `exporter.serviceMonitor.telemetryPath` | Set path to redis-exporter telemtery-path (default is /metrics) | string | `""` |
352368
| `exporter.serviceMonitor.timeout` | Set timeout for scrape (default is 10s) | string | `""` |
353-
| `exporter.tag` | Exporter image tag | string | `"v1.67.0"` |
369+
| `exporter.sslEnabled` | Enable SSL for exporter connection to redis | bool | `false` |
370+
| `exporter.tag` | Exporter image tag | string | `"v1.80.2"` |
354371
| `prometheusRule.additionalLabels` | Additional labels to be set in metadata. | object | `{}` |
355372
| `prometheusRule.enabled` | If true, creates a Prometheus Operator PrometheusRule. | bool | `false` |
356373
| `prometheusRule.interval` | How often rules in the group are evaluated (falls back to `global.evaluation_interval` if not set). | string | `"10s"` |

charts/redis-ha/ci/haproxy-enabled-values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
## Enable HAProxy to manage Load Balancing
33
haproxy:
44
enabled: true
5-
annotations:
5+
deploymentAnnotations:
66
any.domain/key: "value"
77
serviceAccount:
88
create: true
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
## Enable HAProxy with backend TLS
3+
haproxy:
4+
enabled: true
5+
tls:
6+
enabled: true
7+
secretName: "test-tls-secret"
8+
keyName: tls.pem
9+
tlsPort: 6381
10+
11+
redis:
12+
tlsPort: 6479
13+
14+
sentinel:
15+
tlsPort: 26479
16+
17+
tls:
18+
secretName: "test-tls-secret"
19+
certFile: tls.crt
20+
keyFile: tls.key
21+
caCertFile: ca.crt

charts/redis-ha/templates/_configs.tpl

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
{{- else }}
77
dir "/data"
88
port {{ .Values.redis.port }}
9-
{{- if .Values.sentinel.tlsPort }}
9+
{{- if .Values.redis.tlsPort }}
1010
tls-port {{ .Values.redis.tlsPort }}
1111
tls-cert-file /tls-certs/{{ .Values.tls.certFile }}
1212
tls-key-file /tls-certs/{{ .Values.tls.keyFile }}
@@ -561,12 +561,16 @@
561561
{{- $fullName := include "redis-ha.fullname" . }}
562562
{{- $replicas := int (toString .Values.replicas) }}
563563
{{- $masterGroupName := include "redis-ha.masterGroupName" . }}
564+
{{- $sentinelPort := default .Values.sentinel.port .Values.sentinel.tlsPort }}
565+
{{- $sentinelTLS := .Values.sentinel.tlsPort }}
566+
{{- $redisPort := default .Values.redis.port .Values.redis.tlsPort }}
567+
{{- $redisTLS := .Values.redis.tlsPort }}
564568
{{- range $i := until $replicas }}
565569
# Check Sentinel and whether they are nominated master
566570
backend check_if_redis_is_master_{{ $i }}
567571
mode tcp
568572
option tcp-check
569-
tcp-check connect
573+
tcp-check connect default
570574
{{- if $root.Values.sentinel.auth }}
571575
tcp-check send "AUTH ${SENTINELAUTH}"\r\n
572576
tcp-check expect string +OK
@@ -578,19 +582,22 @@
578582
tcp-check send QUIT\r\n
579583
{{- range $i := until $replicas }}
580584
{{- if $.Values.sentinel.resolveHostnames }}
581-
server R{{ $i }} {{ $fullName }}-announce-{{ $i }}.{{ $.Release.Namespace }}.svc:26379 check inter {{ $root.Values.haproxy.checkInterval }}
585+
server R{{ $i }} {{ $fullName }}-announce-{{ $i }}.{{ $.Release.Namespace }}.svc:{{ $sentinelPort }} check inter {{ $root.Values.haproxy.checkInterval }}{{ if $sentinelTLS }} ssl verify required ca-file /tls-certs/{{ $root.Values.tls.caCertFile }} crt /usr/local/etc/haproxy/backend-tls.pem{{ end }}
582586
{{- else }}
583-
server R{{ $i }} {{ $fullName }}-announce-{{ $i }}:26379 check inter {{ $root.Values.haproxy.checkInterval }}
587+
server R{{ $i }} {{ $fullName }}-announce-{{ $i }}:{{ $sentinelPort }} check inter {{ $root.Values.haproxy.checkInterval }}{{ if $sentinelTLS }} ssl verify required ca-file /tls-certs/{{ $root.Values.tls.caCertFile }} crt /usr/local/etc/haproxy/backend-tls.pem{{ end }}
584588
{{- end }}
585589
{{- end }}
586590
{{- end }}
587591

588592
# decide redis backend to use
589593
#master
590594
frontend ft_redis_master
591-
{{- if .Values.haproxy.tls.enabled }}
595+
{{- if and .Values.haproxy.tls.enabled .Values.haproxy.tlsPort }}
596+
bind {{ if .Values.haproxy.IPv6.enabled }}[::]{{ end }}:{{ $root.Values.haproxy.containerPort }} {{ if .Values.haproxy.IPv6.enabled }}v4v6{{ end }}
597+
bind {{ if .Values.haproxy.IPv6.enabled }}[::]{{ end }}:{{ $root.Values.haproxy.tlsPort }} ssl crt {{ .Values.haproxy.tls.certMountPath }}{{ .Values.haproxy.tls.keyName }} {{ if .Values.haproxy.IPv6.enabled }}v4v6{{ end }}
598+
{{- else if .Values.haproxy.tls.enabled }}
592599
bind {{ if .Values.haproxy.IPv6.enabled }}[::]{{ end }}:{{ $root.Values.haproxy.containerPort }} ssl crt {{ .Values.haproxy.tls.certMountPath }}{{ .Values.haproxy.tls.keyName }} {{ if .Values.haproxy.IPv6.enabled }}v4v6{{ end }}
593-
{{ else }}
600+
{{- else }}
594601
bind {{ if .Values.haproxy.IPv6.enabled }}[::]{{ end }}:{{ if ne (int $root.Values.redis.port) 0 }}{{ $root.Values.redis.port }}{{ else }}{{ $root.Values.redis.tlsPort }}{{ end }} {{ if .Values.haproxy.IPv6.enabled }}v4v6{{ end }}
595602
{{- end }}
596603
use_backend bk_redis_master
@@ -608,7 +615,7 @@
608615
{{- end }}
609616
mode tcp
610617
option tcp-check
611-
tcp-check connect
618+
tcp-check connect default
612619
{{- if .Values.auth }}
613620
tcp-check send "AUTH ${AUTH}"\r\n
614621
tcp-check expect string +OK
@@ -622,9 +629,9 @@
622629
{{- range $i := until $replicas }}
623630
use-server R{{ $i }} if { srv_is_up(R{{ $i }}) } { nbsrv(check_if_redis_is_master_{{ $i }}) ge 2 }
624631
{{- if $.Values.sentinel.resolveHostnames }}
625-
server R{{ $i }} {{ $fullName }}-announce-{{ $i }}.{{ $.Release.Namespace }}.svc:{{ $root.Values.redis.port }} check inter {{ $root.Values.haproxy.checkInterval }} fall {{ $root.Values.haproxy.checkFall }} rise 1
632+
server R{{ $i }} {{ $fullName }}-announce-{{ $i }}.{{ $.Release.Namespace }}.svc:{{ $redisPort }} check inter {{ $root.Values.haproxy.checkInterval }} fall {{ $root.Values.haproxy.checkFall }} rise 1{{ if $redisTLS }} ssl verify required ca-file /tls-certs/{{ $root.Values.tls.caCertFile }} crt /usr/local/etc/haproxy/backend-tls.pem{{ end }}
626633
{{- else }}
627-
server R{{ $i }} {{ $fullName }}-announce-{{ $i }}:{{ $root.Values.redis.port }} check inter {{ $root.Values.haproxy.checkInterval }} fall {{ $root.Values.haproxy.checkFall }} rise 1
634+
server R{{ $i }} {{ $fullName }}-announce-{{ $i }}:{{ $redisPort }} check inter {{ $root.Values.haproxy.checkInterval }} fall {{ $root.Values.haproxy.checkFall }} rise 1{{ if $redisTLS }} ssl verify required ca-file /tls-certs/{{ $root.Values.tls.caCertFile }} crt /usr/local/etc/haproxy/backend-tls.pem{{ end }}
628635
{{- end }}
629636
{{- end }}
630637
{{- if .Values.haproxy.readOnly.enabled }}
@@ -635,7 +642,7 @@
635642
{{- end }}
636643
mode tcp
637644
option tcp-check
638-
tcp-check connect
645+
tcp-check connect default
639646
{{- if .Values.auth }}
640647
tcp-check send "AUTH ${AUTH}"\r\n
641648
tcp-check expect string +OK
@@ -648,9 +655,9 @@
648655
tcp-check expect string +OK
649656
{{- range $i := until $replicas }}
650657
{{- if $.Values.sentinel.resolveHostnames }}
651-
server R{{ $i }} {{ $fullName }}-announce-{{ $i }}.{{ $.Release.Namespace }}.svc:{{ $root.Values.redis.port }} check inter {{ $root.Values.haproxy.checkInterval }} fall {{ $root.Values.haproxy.checkFall }} rise 1
658+
server R{{ $i }} {{ $fullName }}-announce-{{ $i }}.{{ $.Release.Namespace }}.svc:{{ $redisPort }} check inter {{ $root.Values.haproxy.checkInterval }} fall {{ $root.Values.haproxy.checkFall }} rise 1{{ if $redisTLS }} ssl verify required ca-file /tls-certs/{{ $root.Values.tls.caCertFile }} crt /usr/local/etc/haproxy/backend-tls.pem{{ end }}
652659
{{- else }}
653-
server R{{ $i }} {{ $fullName }}-announce-{{ $i }}:{{ $root.Values.redis.port }} check inter {{ $root.Values.haproxy.checkInterval }} fall {{ $root.Values.haproxy.checkFall }} rise 1
660+
server R{{ $i }} {{ $fullName }}-announce-{{ $i }}:{{ $redisPort }} check inter {{ $root.Values.haproxy.checkInterval }} fall {{ $root.Values.haproxy.checkFall }} rise 1{{ if $redisTLS }} ssl verify required ca-file /tls-certs/{{ $root.Values.tls.caCertFile }} crt /usr/local/etc/haproxy/backend-tls.pem{{ end }}
654661
{{- end }}
655662
{{- end }}
656663
{{- end }}
@@ -674,6 +681,9 @@
674681
{{- define "config-haproxy_init.sh" }}
675682
HAPROXY_CONF=/data/haproxy.cfg
676683
cp /readonly/haproxy.cfg "$HAPROXY_CONF"
684+
{{- if or .Values.redis.tlsPort .Values.sentinel.tlsPort }}
685+
cat /tls-certs/{{ .Values.tls.certFile }} /tls-certs/{{ .Values.tls.keyFile }} > /data/backend-tls.pem
686+
{{- end }}
677687
{{- $fullName := include "redis-ha.fullname" . }}
678688
{{- $replicas := int (toString .Values.replicas) }}
679689
{{- $resolveHostnames := .Values.sentinel.resolveHostnames }}

charts/redis-ha/templates/redis-haproxy-deployment.yaml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,11 @@ spec:
122122
readOnly: true
123123
- name: data
124124
mountPath: /data
125+
{{- if or .Values.redis.tlsPort .Values.sentinel.tlsPort }}
126+
- name: tls-certs
127+
mountPath: /tls-certs
128+
readOnly: true
129+
{{- end }}
125130
{{- if .Values.haproxy.imagePullSecrets }}
126131
imagePullSecrets: {{ toYaml .Values.haproxy.imagePullSecrets | nindent 8 }}
127132
{{- end }}
@@ -172,6 +177,10 @@ spec:
172177
containerPort: 8888
173178
- name: redis
174179
containerPort: {{ default "6379" .Values.haproxy.containerPort }}
180+
{{- if and .Values.haproxy.tls.enabled .Values.haproxy.tlsPort }}
181+
- name: redis-tls
182+
containerPort: {{ .Values.haproxy.tlsPort }}
183+
{{- end }}
175184
{{- if .Values.haproxy.readOnly.enabled }}
176185
- name: readonlyport
177186
containerPort: {{ default "6380" .Values.haproxy.readOnly.port }}
@@ -194,6 +203,11 @@ spec:
194203
{{- if .Values.haproxy.tls.enabled }}
195204
- name: pemfile
196205
mountPath: {{ .Values.haproxy.tls.certMountPath }}
206+
{{- end }}
207+
{{- if or .Values.redis.tlsPort .Values.sentinel.tlsPort }}
208+
- name: tls-certs
209+
mountPath: /tls-certs
210+
readOnly: true
197211
{{- end }}
198212
lifecycle:
199213
{{ toYaml .Values.haproxy.lifecycle | indent 10 }}
@@ -205,6 +219,11 @@ spec:
205219
- name: pemfile
206220
secret:
207221
secretName: {{ tpl .Values.haproxy.tls.secretName . }}
222+
{{- end }}
223+
{{- if or .Values.redis.tlsPort .Values.sentinel.tlsPort }}
224+
- name: tls-certs
225+
secret:
226+
secretName: {{ tpl (.Values.tls.secretName | default (printf "%s-tls-secret" (include "redis-ha.fullname" .))) . }}
208227
{{- end }}
209228
- name: config-volume
210229
configMap:

charts/redis-ha/templates/redis-haproxy-service.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ spec:
4242
{{- if and (eq .Values.haproxy.service.type "NodePort") .Values.haproxy.service.nodePort }}
4343
nodePort: {{ .Values.haproxy.service.nodePort }}
4444
{{- end }}
45+
{{- if and .Values.haproxy.tls.enabled .Values.haproxy.tlsPort }}
46+
- name: tcp-haproxy-tls
47+
port: {{ .Values.haproxy.tlsPort }}
48+
protocol: TCP
49+
targetPort: redis-tls
50+
{{- end }}
4551
{{- if .Values.haproxy.readOnly.enabled }}
4652
- name: tcp-haproxyreadonly
4753
port: {{ .Values.haproxy.readOnly.port }}

0 commit comments

Comments
 (0)