Skip to content

Commit f40f32c

Browse files
authored
[cherry-pick] Add Insecure TLS verify (#172) (#173)
Signed-off-by: Shaad7 <abdullah.alshaad@appscode.com>
1 parent f5cfc4b commit f40f32c

File tree

12 files changed

+185
-52
lines changed

12 files changed

+185
-52
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ else
4343
endif
4444

4545
RESTIC_VER := 0.13.1
46-
REDIS_DUMP_VER := 0.8.0-ac
46+
REDIS_DUMP_VER := 0.8.1-ac
4747

4848
###
4949
### These variables should not need tweaking.

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module stash.appscode.dev/redis
33
go 1.18
44

55
require (
6-
github.com/mediocregopher/radix/v3 v3.8.0
6+
github.com/mediocregopher/radix/v3 v3.8.1
77
github.com/spf13/cobra v1.6.0
88
github.com/yannh/redis-dump-go v0.0.0-00010101000000-000000000000
99
go.bytebuilders.dev/license-verifier/kubernetes v0.12.0
@@ -97,4 +97,4 @@ require (
9797
sigs.k8s.io/yaml v1.3.0 // indirect
9898
)
9999

100-
replace github.com/yannh/redis-dump-go => github.com/kubedb/redis-dump-go v0.8.1-0.20230429151509-2f2a7ce60763
100+
replace github.com/yannh/redis-dump-go => github.com/kubedb/redis-dump-go v0.8.1-ac

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,8 @@ github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn
293293
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
294294
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
295295
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
296-
github.com/kubedb/redis-dump-go v0.8.1-0.20230429151509-2f2a7ce60763 h1:HyNjcmSJSLEPXN+y6wNNLtNPfEcZiPotGPHbnkhj1g0=
297-
github.com/kubedb/redis-dump-go v0.8.1-0.20230429151509-2f2a7ce60763/go.mod h1:u6sFg98XPtTAaIyUv5oq+4D8D6krErkijf78cV30VOA=
296+
github.com/kubedb/redis-dump-go v0.8.1-ac h1:Cv126EMUQxBOKvVJCO/d4SRuBQBIuQzFvgPayG0mSlI=
297+
github.com/kubedb/redis-dump-go v0.8.1-ac/go.mod h1:nEQHeV2eDU9UjWkd+PXjU5skPdS9CAGXaQs39VGi1NA=
298298
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
299299
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
300300
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
@@ -306,8 +306,8 @@ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx
306306
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
307307
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
308308
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
309-
github.com/mediocregopher/radix/v3 v3.8.0 h1:HI8EgkaM7WzsrFpYAkOXIgUKbjNonb2Ne7K6Le61Pmg=
310-
github.com/mediocregopher/radix/v3 v3.8.0/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8=
309+
github.com/mediocregopher/radix/v3 v3.8.1 h1:rOkHflVuulFKlwsLY01/M2cM2tWCjDoETcMqKbAWu1M=
310+
github.com/mediocregopher/radix/v3 v3.8.1/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8=
311311
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
312312
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
313313
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=

pkg/backup.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,19 +205,23 @@ func (opt *redisOptions) backupRedis(targetRef api_v1beta1.TargetRef) (*restic.B
205205
if err != nil {
206206
return nil, err
207207
}
208+
err = opt.writeTLSCertsToFile(appBinding)
209+
if err != nil {
210+
return nil, err
211+
}
208212

209213
s := redisdump.Host{
210214
Host: hostname,
211215
Port: int(port),
212216
Username: username,
213217
Password: password,
214-
TlsHandler: nil, // TODO(Shaad7): Add support for tls protected redis
218+
TlsHandler: nil,
215219
}
216220

217221
session := opt.newSessionWrapper(RedisDumpCMD)
218222
session.setDatabaseCredentials(password)
219223

220-
err = opt.setTLSParameters(appBinding, session.cmd)
224+
opt.setTLSParametersToCMD(appBinding, session.cmd)
221225
if err != nil {
222226
return nil, err
223227
}
@@ -227,6 +231,13 @@ func (opt *redisOptions) backupRedis(targetRef api_v1beta1.TargetRef) (*restic.B
227231
return nil, err
228232
}
229233

234+
if appBinding.Spec.ClientConfig.CABundle != nil {
235+
// clear all the args ( tls args )
236+
session.cmd.Args = session.cmd.Args[:0]
237+
session.cmd.Args = append(session.cmd.Args, "--tls")
238+
session.cmd.Args = append(session.cmd.Args, "--insecure")
239+
}
240+
230241
session.cmd.Args = append(session.cmd.Args, "-host", s.Host)
231242
// if port is specified, append port in the arguments
232243
if s.Port != 0 {

pkg/restore.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,12 +184,27 @@ func (opt *redisOptions) restoreRedis(targetRef api_v1beta1.TargetRef) (*restic.
184184
return nil, err
185185
}
186186

187+
err = opt.writeTLSCertsToFile(appBinding)
188+
if err != nil {
189+
return nil, err
190+
}
191+
192+
var tlsHandler *redisdump.TlsHandler = nil
193+
ca, cert, key := opt.getTLSParameter(appBinding)
194+
if ca != "" {
195+
tlsHandler = &redisdump.TlsHandler{
196+
CACertPath: ca,
197+
CertPath: cert,
198+
KeyPath: key,
199+
}
200+
}
201+
187202
s := redisdump.Host{
188203
Host: hostname,
189204
Port: int(port),
190205
Username: username,
191206
Password: password,
192-
TlsHandler: nil, // TODO(Shaad7): Add support for tls protected redis
207+
TlsHandler: tlsHandler,
193208
}
194209

195210
if hosts, err := redisdump.GetHosts(s, opt.NWorkers); err != nil {
@@ -200,6 +215,13 @@ func (opt *redisOptions) restoreRedis(targetRef api_v1beta1.TargetRef) (*restic.
200215
startTime := time.Now()
201216
beforeKeys := 0
202217
afterKeys := 0
218+
if appBinding.Spec.ClientConfig.CABundle != nil {
219+
for i := range hosts {
220+
hosts[i].TlsHandler = &redisdump.TlsHandler{
221+
SkipVerify: true,
222+
}
223+
}
224+
}
203225

204226
for _, host := range hosts {
205227
session := opt.newSessionWrapper(RedisRestoreCMD)
@@ -209,7 +231,7 @@ func (opt *redisOptions) restoreRedis(targetRef api_v1beta1.TargetRef) (*restic.
209231
return nil, err
210232
}
211233

212-
err = opt.setTLSParameters(appBinding, session.cmd)
234+
opt.setTLSParametersToCMD(appBinding, session.cmd)
213235
if err != nil {
214236
return nil, err
215237
}

pkg/util.go

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ func (session *sessionWrapper) setDatabaseCredentials(password string) {
115115
session.sh.SetEnv(EnvRedisDumpGoAuth, password)
116116
}
117117

118-
func (opt *redisOptions) setTLSParameters(appBinding *appcatalog.AppBinding, cmd *restic.Command) error {
118+
func (opt *redisOptions) writeTLSCertsToFile(appBinding *appcatalog.AppBinding) error {
119119
// if ssl enabled, add ca.crt in the arguments
120120
if appBinding.Spec.ClientConfig.CABundle != nil {
121121
parameters := v1alpha1.RedisConfiguration{}
@@ -128,9 +128,6 @@ func (opt *redisOptions) setTLSParameters(appBinding *appcatalog.AppBinding, cmd
128128
if err := os.WriteFile(filepath.Join(opt.setupOptions.ScratchDir, core.ServiceAccountRootCAKey), appBinding.Spec.ClientConfig.CABundle, 0o600); err != nil {
129129
return err
130130
}
131-
caPath := filepath.Join(opt.setupOptions.ScratchDir, core.ServiceAccountRootCAKey)
132-
cmd.Args = append(cmd.Args, "--tls")
133-
cmd.Args = append(cmd.Args, "--cacert", caPath)
134131

135132
if parameters.ClientCertSecret != nil {
136133
clientSecret, err := opt.kubeClient.CoreV1().Secrets(opt.namespace).Get(context.TODO(), parameters.ClientCertSecret.Name, metav1.GetOptions{})
@@ -145,7 +142,6 @@ func (opt *redisOptions) setTLSParameters(appBinding *appcatalog.AppBinding, cmd
145142
if err := os.WriteFile(filepath.Join(opt.setupOptions.ScratchDir, core.TLSCertKey), certByte, 0o600); err != nil {
146143
return err
147144
}
148-
certPath := filepath.Join(opt.setupOptions.ScratchDir, core.TLSCertKey)
149145

150146
keyByte, ok := clientSecret.Data[core.TLSPrivateKeyKey]
151147
if !ok {
@@ -155,12 +151,58 @@ func (opt *redisOptions) setTLSParameters(appBinding *appcatalog.AppBinding, cmd
155151
if err := os.WriteFile(filepath.Join(opt.setupOptions.ScratchDir, core.TLSPrivateKeyKey), keyByte, 0o600); err != nil {
156152
return err
157153
}
154+
155+
}
156+
}
157+
return nil
158+
}
159+
160+
func (opt *redisOptions) setTLSParametersToCMD(appBinding *appcatalog.AppBinding, cmd *restic.Command) {
161+
// if ssl enabled, add ca.crt in the arguments
162+
if appBinding.Spec.ClientConfig.CABundle != nil {
163+
parameters := v1alpha1.RedisConfiguration{}
164+
if appBinding.Spec.Parameters != nil {
165+
if err := json.Unmarshal(appBinding.Spec.Parameters.Raw, &parameters); err != nil {
166+
klog.Errorf("unable to unmarshal appBinding.Spec.Parameters.Raw. Reason: %v", err)
167+
}
168+
}
169+
170+
caPath := filepath.Join(opt.setupOptions.ScratchDir, core.ServiceAccountRootCAKey)
171+
cmd.Args = append(cmd.Args, "--tls")
172+
cmd.Args = append(cmd.Args, "--cacert", caPath)
173+
174+
if parameters.ClientCertSecret != nil {
175+
certPath := filepath.Join(opt.setupOptions.ScratchDir, core.TLSCertKey)
176+
158177
keyPath := filepath.Join(opt.setupOptions.ScratchDir, core.TLSPrivateKeyKey)
159178

160179
cmd.Args = append(cmd.Args, "--cert", certPath, "--key", keyPath)
161180
}
162181
}
163-
return nil
182+
}
183+
184+
func (opt *redisOptions) getTLSParameter(appBinding *appcatalog.AppBinding) (string, string, string) {
185+
// if ssl enabled, add ca.crt in the arguments
186+
if appBinding.Spec.ClientConfig.CABundle != nil {
187+
parameters := v1alpha1.RedisConfiguration{}
188+
if appBinding.Spec.Parameters != nil {
189+
if err := json.Unmarshal(appBinding.Spec.Parameters.Raw, &parameters); err != nil {
190+
klog.Errorf("unable to unmarshal appBinding.Spec.Parameters.Raw. Reason: %v", err)
191+
}
192+
}
193+
194+
caPath := filepath.Join(opt.setupOptions.ScratchDir, core.ServiceAccountRootCAKey)
195+
196+
if parameters.ClientCertSecret != nil {
197+
certPath := filepath.Join(opt.setupOptions.ScratchDir, core.TLSCertKey)
198+
199+
keyPath := filepath.Join(opt.setupOptions.ScratchDir, core.TLSPrivateKeyKey)
200+
201+
return caPath, certPath, keyPath
202+
}
203+
return caPath, "", ""
204+
}
205+
return "", "", ""
164206
}
165207

166208
func (session *sessionWrapper) setUserArgs(args string) {

vendor/github.com/mediocregopher/radix/v3/CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/mediocregopher/radix/v3/README.md

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/mediocregopher/radix/v3/cluster.go

Lines changed: 19 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/mediocregopher/radix/v3/cluster_topo.go

Lines changed: 43 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)