Skip to content

Commit 71fefc7

Browse files
authored
use self-signed cert for argocd server (#352)
Signed-off-by: Manabu McCloskey <[email protected]>
1 parent f82ac2c commit 71fefc7

File tree

5 files changed

+46
-28
lines changed

5 files changed

+46
-28
lines changed

globals/project.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import "fmt"
55
const (
66
ProjectName string = "idpbuilder"
77

8-
NginxNamespace string = "ingress-nginx"
8+
NginxNamespace string = "ingress-nginx"
9+
ArgoCDNamespace string = "argocd"
910

1011
SelfSignedCertSecretName = "idpbuilder-cert"
1112
SelfSignedCertCMName = "idpbuilder-cert"

pkg/build/tls.go

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,32 @@ import (
2525
)
2626

2727
const (
28-
certificateOrgName = "cnoe.io"
28+
certificateOrgName = "cnoe.io"
29+
certificateValidLength = time.Hour * 8766
30+
argocdTLSSecretName = "argocd-server-tls"
2931
)
3032

31-
var (
32-
certificateValidLength = time.Hour * 8766 // one year
33-
)
33+
func createCertificateAndKeySecret(ctx context.Context, kubeClient client.Client, name, namespace string, cert, key []byte) error {
34+
secret := &corev1.Secret{
35+
ObjectMeta: metav1.ObjectMeta{
36+
Name: name,
37+
Namespace: namespace,
38+
},
39+
Type: corev1.SecretTypeTLS,
40+
Data: map[string][]byte{
41+
corev1.TLSCertKey: cert,
42+
corev1.TLSPrivateKeyKey: key,
43+
},
44+
}
45+
err := kubeClient.Create(ctx, secret)
46+
if err != nil {
47+
if k8serrors.IsAlreadyExists(err) {
48+
return nil
49+
}
50+
return err
51+
}
52+
return nil
53+
}
3454

3555
func createIngressCertificateSecret(ctx context.Context, kubeClient client.Client, cert []byte) error {
3656
secret := &corev1.Secret{
@@ -86,20 +106,9 @@ func getOrCreateIngressCertificateAndKey(ctx context.Context, kubeClient client.
86106
return nil, nil, cErr
87107
}
88108

89-
secret := &corev1.Secret{
90-
ObjectMeta: metav1.ObjectMeta{
91-
Name: name,
92-
Namespace: namespace,
93-
},
94-
Type: corev1.SecretTypeTLS,
95-
StringData: map[string]string{
96-
corev1.TLSPrivateKeyKey: string(privateKey),
97-
corev1.TLSCertKey: string(cert),
98-
},
99-
}
100-
cErr = kubeClient.Create(ctx, secret)
109+
cErr = createCertificateAndKeySecret(ctx, kubeClient, name, namespace, cert, privateKey)
101110
if cErr != nil {
102-
return nil, nil, fmt.Errorf("creating secret %s: %w", secret.Name, err)
111+
return nil, nil, fmt.Errorf("creating secret %s: %w", name, err)
103112
}
104113
return cert, privateKey, nil
105114
} else {
@@ -178,6 +187,10 @@ func setupSelfSignedCertificate(ctx context.Context, logger logr.Logger, kubecli
178187
return nil, err
179188
}
180189

190+
if err := k8s.EnsureNamespace(ctx, kubeclient, globals.ArgoCDNamespace); err != nil {
191+
return nil, err
192+
}
193+
181194
sans := []string{
182195
globals.DefaultHostName,
183196
globals.DefaultSANWildcard,
@@ -190,7 +203,7 @@ func setupSelfSignedCertificate(ctx context.Context, logger logr.Logger, kubecli
190203
}
191204

192205
logger.V(1).Info("Creating/getting certificate", "host", config.Host, "sans", sans)
193-
cert, _, err := getOrCreateIngressCertificateAndKey(ctx, kubeclient, globals.SelfSignedCertSecretName, globals.NginxNamespace, sans)
206+
cert, privateKey, err := getOrCreateIngressCertificateAndKey(ctx, kubeclient, globals.SelfSignedCertSecretName, globals.NginxNamespace, sans)
194207
if err != nil {
195208
return nil, err
196209
}
@@ -200,5 +213,11 @@ func setupSelfSignedCertificate(ctx context.Context, logger logr.Logger, kubecli
200213
if err != nil {
201214
return nil, err
202215
}
216+
217+
logger.V(1).Info("Creating secret for ArgoCD server", "host", config.Host)
218+
err = createCertificateAndKeySecret(ctx, kubeclient, argocdTLSSecretName, globals.ArgoCDNamespace, cert, privateKey)
219+
if err != nil {
220+
return nil, err
221+
}
203222
return cert, nil
204223
}

pkg/controllers/localbuild/argo.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"embed"
66

77
"github.com/cnoe-io/idpbuilder/api/v1alpha1"
8+
"github.com/cnoe-io/idpbuilder/globals"
89
"github.com/cnoe-io/idpbuilder/pkg/k8s"
910
"k8s.io/apimachinery/pkg/runtime"
1011
"k8s.io/apimachinery/pkg/runtime/schema"
@@ -14,10 +15,6 @@ import (
1415
//go:embed resources/argo/*
1516
var installArgoFS embed.FS
1617

17-
const (
18-
argocdNamespace string = "argocd"
19-
)
20-
2118
func RawArgocdInstallResources(templateData any, config v1alpha1.PackageCustomization, scheme *runtime.Scheme) ([][]byte, error) {
2219
return k8s.BuildCustomizedManifests(config.FilePath, "resources/argo", installArgoFS, scheme, templateData)
2320
}
@@ -27,7 +24,7 @@ func (r *LocalbuildReconciler) ReconcileArgo(ctx context.Context, req ctrl.Reque
2724
name: "Argo CD",
2825
resourcePath: "resources/argo",
2926
resourceFS: installArgoFS,
30-
namespace: argocdNamespace,
27+
namespace: globals.ArgoCDNamespace,
3128
monitoredResources: map[string]schema.GroupVersionKind{
3229
"argocd-server": {
3330
Group: "apps",

pkg/controllers/localbuild/argo_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
argov1alpha1 "github.com/cnoe-io/argocd-api/api/argo/application/v1alpha1"
88
"github.com/cnoe-io/idpbuilder/api/v1alpha1"
9+
"github.com/cnoe-io/idpbuilder/globals"
910
"github.com/cnoe-io/idpbuilder/pkg/k8s"
1011
"github.com/cnoe-io/idpbuilder/pkg/util"
1112
"github.com/stretchr/testify/assert"
@@ -137,7 +138,7 @@ func TestArgoCDAppAnnotation(t *testing.T) {
137138
for i := range cases {
138139
c := cases[i]
139140
fClient := new(fakeKubeClient)
140-
fClient.On("List", ctx, mock.Anything, []client.ListOption{client.InNamespace(argocdNamespace)}).
141+
fClient.On("List", ctx, mock.Anything, []client.ListOption{client.InNamespace(globals.ArgoCDNamespace)}).
141142
Run(func(args mock.Arguments) {
142143
apps := args.Get(1).(*argov1alpha1.ApplicationList)
143144
apps.Items = c.listApps

pkg/controllers/localbuild/controller.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ func (r *LocalbuildReconciler) reconcileEmbeddedApp(ctx context.Context, appName
230230
app := &argov1alpha1.Application{
231231
ObjectMeta: metav1.ObjectMeta{
232232
Name: appName,
233-
Namespace: argocdNamespace,
233+
Namespace: globals.ArgoCDNamespace,
234234
},
235235
}
236236

@@ -542,7 +542,7 @@ func (r *LocalbuildReconciler) reconcileGitRepo(ctx context.Context, resource *v
542542

543543
func (r *LocalbuildReconciler) requestArgoCDAppRefresh(ctx context.Context) error {
544544
apps := &argov1alpha1.ApplicationList{}
545-
err := r.Client.List(ctx, apps, client.InNamespace(argocdNamespace))
545+
err := r.Client.List(ctx, apps, client.InNamespace(globals.ArgoCDNamespace))
546546
if err != nil {
547547
return fmt.Errorf("listing argocd apps for refresh: %w", err)
548548
}
@@ -559,7 +559,7 @@ func (r *LocalbuildReconciler) requestArgoCDAppRefresh(ctx context.Context) erro
559559

560560
func (r *LocalbuildReconciler) requestArgoCDAppSetRefresh(ctx context.Context) error {
561561
appsets := &argov1alpha1.ApplicationSetList{}
562-
err := r.Client.List(ctx, appsets, client.InNamespace(argocdNamespace))
562+
err := r.Client.List(ctx, appsets, client.InNamespace(globals.ArgoCDNamespace))
563563
if err != nil {
564564
return fmt.Errorf("listing argocd apps for refresh: %w", err)
565565
}

0 commit comments

Comments
 (0)