Skip to content

Commit 0240fad

Browse files
pooknullgkechegeguneshors
authored
K8SPS-430: support updating DNS names (#993)
* K8SPS-430: support updating DNS names https://perconadev.atlassian.net/browse/K8SPS-430 * fix lint * fix tests * Update pkg/tls/tls.go Co-authored-by: Ege Güneş <[email protected]> --------- Co-authored-by: George Kechagias <[email protected]> Co-authored-by: Ege Güneş <[email protected]> Co-authored-by: Viacheslav Sarzhan <[email protected]>
1 parent c2c7ea4 commit 0240fad

File tree

9 files changed

+68
-26
lines changed

9 files changed

+68
-26
lines changed

e2e-tests/tests/gr-tls-cert-manager/04-assert.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ spec:
3636
status:
3737
conditions:
3838
- message: Certificate is up to date and has not expired
39-
observedGeneration: 1
39+
observedGeneration: 2
4040
reason: Ready
4141
status: 'True'
4242
type: Ready
43-
revision: 1
43+
revision: 2
4444
---
4545
apiVersion: apps/v1
4646
kind: StatefulSet

e2e-tests/tests/gr-tls-cert-manager/05-check-cert.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ commands:
1717
"*.gr-tls-cert-manager-orchestrator.'"${NAMESPACE}"'.svc",
1818
"*.gr-tls-cert-manager-router",
1919
"*.gr-tls-cert-manager-router.'"${NAMESPACE}"'",
20-
"*.gr-tls-cert-manager-router.'"${NAMESPACE}"'.svc"
20+
"*.gr-tls-cert-manager-router.'"${NAMESPACE}"'.svc",
21+
"mysql-1.example.com"
2122
]'

e2e-tests/tests/gr-tls-cert-manager/06-assert.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,19 @@ spec:
3636
status:
3737
conditions:
3838
- message: Certificate is up to date and has not expired
39-
observedGeneration: 1
39+
observedGeneration: 2
4040
reason: Ready
4141
status: 'True'
4242
type: Ready
43-
revision: 2
43+
revision: 3
4444
---
4545
apiVersion: apps/v1
4646
kind: StatefulSet
4747
metadata:
48-
generation: 2
48+
generation: 3
4949
name: gr-tls-cert-manager-mysql
5050
status:
51-
observedGeneration: 2
51+
observedGeneration: 3
5252
replicas: 3
5353
readyReplicas: 3
5454
---
@@ -64,7 +64,7 @@ metadata:
6464
app.kubernetes.io/part-of: percona-server
6565
app.kubernetes.io/version: v0.12.0
6666
status:
67-
observedGeneration: 2
67+
observedGeneration: 3
6868
replicas: 3
6969
updatedReplicas: 3
7070
readyReplicas: 3

e2e-tests/tests/tls-cert-manager/04-assert.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ spec:
3636
status:
3737
conditions:
3838
- message: Certificate is up to date and has not expired
39-
observedGeneration: 1
39+
observedGeneration: 2
4040
reason: Ready
4141
status: 'True'
4242
type: Ready
43-
revision: 1
43+
revision: 2
4444
---
4545
apiVersion: apps/v1
4646
kind: StatefulSet

e2e-tests/tests/tls-cert-manager/05-check-cert.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ commands:
1717
"*.tls-cert-manager-orchestrator.'"${NAMESPACE}"'.svc",
1818
"*.tls-cert-manager-router",
1919
"*.tls-cert-manager-router.'"${NAMESPACE}"'",
20-
"*.tls-cert-manager-router.'"${NAMESPACE}"'.svc"
20+
"*.tls-cert-manager-router.'"${NAMESPACE}"'.svc",
21+
"mysql-1.example.com"
2122
]'

e2e-tests/tests/tls-cert-manager/06-assert.yaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,29 +36,29 @@ spec:
3636
status:
3737
conditions:
3838
- message: Certificate is up to date and has not expired
39-
observedGeneration: 1
39+
observedGeneration: 2
4040
reason: Ready
4141
status: 'True'
4242
type: Ready
43-
revision: 2
43+
revision: 3
4444
---
4545
apiVersion: apps/v1
4646
kind: StatefulSet
4747
metadata:
48-
generation: 2
48+
generation: 3
4949
name: tls-cert-manager-mysql
5050
status:
51-
observedGeneration: 2
51+
observedGeneration: 3
5252
replicas: 3
5353
readyReplicas: 3
5454
---
5555
apiVersion: apps/v1
5656
kind: StatefulSet
5757
metadata:
58-
generation: 2
58+
generation: 3
5959
name: tls-cert-manager-orc
6060
status:
61-
observedGeneration: 2
61+
observedGeneration: 3
6262
replicas: 3
6363
readyReplicas: 3
6464
---

e2e-tests/tests/tls-cert-manager/06-renew-certs.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ commands:
1414
1515
renew_certificate "tls-cert-manager-ssl"
1616
17-
sleep 10
17+
sleep 20
1818
1919
new_generation_mysql=$(kubectl -n ${NAMESPACE} get sts tls-cert-manager-mysql -o jsonpath='{.metadata.generation}')
2020
new_generation_haproxy=$(kubectl -n ${NAMESPACE} get sts tls-cert-manager-haproxy -o jsonpath='{.metadata.generation}')

pkg/controller/ps/tls.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,19 @@ import (
2626
func (r *PerconaServerMySQLReconciler) ensureTLSSecret(ctx context.Context, cr *apiv1alpha1.PerconaServerMySQL) error {
2727
log := logf.FromContext(ctx)
2828

29-
secretObj := corev1.Secret{}
30-
err := r.Client.Get(context.TODO(),
29+
secret := corev1.Secret{}
30+
err := r.Get(ctx,
3131
types.NamespacedName{
3232
Namespace: cr.Namespace,
3333
Name: cr.Spec.SSLSecretName,
3434
},
35-
&secretObj,
35+
&secret,
3636
)
37-
38-
// don't create ssl secret if it is created by customer not by operator
39-
if err == nil && !metav1.IsControlledBy(&secretObj, cr) {
40-
return nil
37+
if err == nil {
38+
// don't create ssl secret if it is created by customer not by operator
39+
if c, err := tls.IsSecretCreatedByUser(ctx, r.Client, cr, &secret); err != nil || c {
40+
return err
41+
}
4142
}
4243

4344
err = r.ensureSSLByCertManager(ctx, cr)
@@ -202,7 +203,7 @@ func (r *PerconaServerMySQLReconciler) ensureIssuer(ctx context.Context, cr *api
202203
IssuerConfig: IssuerConf,
203204
},
204205
}
205-
err := k8s.EnsureObjectWithHash(ctx, r.Client, nil, isr, r.Scheme)
206+
err := k8s.EnsureObjectWithHash(ctx, r.Client, cr, isr, r.Scheme)
206207
if err != nil {
207208
return errors.Wrap(err, "create issuer")
208209
}

pkg/tls/tls.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package tls
22

33
import (
44
"bytes"
5+
"context"
56
"crypto/rand"
67
"crypto/rsa"
78
"crypto/x509"
@@ -12,7 +13,13 @@ import (
1213
"sort"
1314
"time"
1415

16+
cm "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1"
1517
"github.com/pkg/errors"
18+
corev1 "k8s.io/api/core/v1"
19+
k8serrors "k8s.io/apimachinery/pkg/api/errors"
20+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
21+
"k8s.io/apimachinery/pkg/types"
22+
"sigs.k8s.io/controller-runtime/pkg/client"
1623

1724
apiv1alpha1 "github.com/percona/percona-server-mysql-operator/api/v1alpha1"
1825
)
@@ -155,3 +162,35 @@ func DNSNamesFromCert(data []byte) ([]string, error) {
155162
sort.Strings(names)
156163
return names, nil
157164
}
165+
166+
func IsSecretCreatedByUser(ctx context.Context, c client.Client, cr *apiv1alpha1.PerconaServerMySQL, secret *corev1.Secret) (bool, error) {
167+
if metav1.IsControlledBy(secret, cr) {
168+
return false, nil
169+
}
170+
if secret.Labels[cm.PartOfCertManagerControllerLabelKey] == "true" {
171+
return isCertManagerSecretCreatedByUser(ctx, c, cr, secret)
172+
}
173+
return true, nil
174+
}
175+
176+
func isCertManagerSecretCreatedByUser(ctx context.Context, c client.Client, cr *apiv1alpha1.PerconaServerMySQL, secret *corev1.Secret) (bool, error) {
177+
if metav1.IsControlledBy(secret, cr) {
178+
return false, nil
179+
}
180+
181+
issuerName := secret.Annotations[cm.IssuerNameAnnotationKey]
182+
if secret.Annotations[cm.IssuerKindAnnotationKey] != cm.IssuerKind || issuerName == "" {
183+
return true, nil
184+
}
185+
issuer := new(cm.Issuer)
186+
if err := c.Get(ctx, types.NamespacedName{
187+
Name: issuerName,
188+
Namespace: secret.Namespace,
189+
}, issuer); err != nil {
190+
if k8serrors.IsNotFound(err) {
191+
return true, nil
192+
}
193+
return true, errors.Wrap(err, "failed to get issuer")
194+
}
195+
return !metav1.IsControlledBy(issuer, cr), nil
196+
}

0 commit comments

Comments
 (0)