Skip to content

Commit 050b0f9

Browse files
committed
Try to use the systemd runtime directory for certs
1 parent 140f80e commit 050b0f9

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

internal/caddy/global/tls.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func (p TLSPlugin) GlobalHandler(config *converter.Config, store *store.Store) e
4040
}
4141

4242
if len(hosts) > 0 {
43-
tlsApp.CertificatesRaw["load_folders"] = json.RawMessage(`["` + controller.CertFolder + `"]`)
43+
tlsApp.CertificatesRaw["load_folders"] = json.RawMessage(`["` + controller.GetCertFolder() + `"]`)
4444
// do not manage certificates for those hosts
4545
httpServer.AutoHTTPS.SkipCerts = hosts
4646
}

internal/controller/action_tls.go

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,21 @@ import (
88
apiv1 "k8s.io/api/core/v1"
99
)
1010

11-
var CertFolder = filepath.FromSlash("/etc/caddy/certs")
11+
var certFolder = ""
12+
13+
// GetCertFolder returns the staging path for storing certificates as files.
14+
func GetCertFolder() string {
15+
if certFolder == "" {
16+
// Use the systemd cache directory if possible.
17+
runtimeDir := os.Getenv("RUNTIME_DIRECTORY")
18+
if runtimeDir != "" {
19+
certFolder = filepath.Join(runtimeDir, "certs")
20+
} else {
21+
certFolder = filepath.FromSlash("/etc/caddy/certs")
22+
}
23+
}
24+
return certFolder
25+
}
1226

1327
// SecretAddedAction provides an implementation of the action interface.
1428
type SecretAddedAction struct {
@@ -60,7 +74,7 @@ func writeFile(s *apiv1.Secret) error {
6074
content = append(content, cert...)
6175
}
6276

63-
err := os.WriteFile(filepath.Join(CertFolder, s.Name+".pem"), content, 0644)
77+
err := os.WriteFile(filepath.Join(GetCertFolder(), s.Name+".pem"), content, 0644)
6478
if err != nil {
6579
return err
6680
}
@@ -80,13 +94,17 @@ func (r SecretUpdatedAction) handle(c *CaddyController) error {
8094

8195
func (r SecretDeletedAction) handle(c *CaddyController) error {
8296
c.logger.Infof("TLS secret deleted (%s/%s)", r.resource.Namespace, r.resource.Name)
83-
return os.Remove(filepath.Join(CertFolder, r.resource.Name+".pem"))
97+
return os.Remove(filepath.Join(GetCertFolder(), r.resource.Name+".pem"))
8498
}
8599

86100
// watchTLSSecrets Start listening to TLS secrets if at least one ingress needs it.
87101
// It will sync the CertFolder with TLS secrets
88102
func (c *CaddyController) watchTLSSecrets() error {
89103
if c.informers.TLSSecret == nil && c.resourceStore.HasManagedTLS() {
104+
if err := os.MkdirAll(GetCertFolder(), 0755); err != nil && !os.IsExist(err) {
105+
return err
106+
}
107+
90108
// Init informers
91109
params := k8s.TLSSecretParams{
92110
InformerFactory: c.factories.WatchedNamespace,
@@ -106,13 +124,6 @@ func (c *CaddyController) watchTLSSecrets() error {
106124
return err
107125
}
108126

109-
if _, err := os.Stat(CertFolder); os.IsNotExist(err) {
110-
err = os.MkdirAll(CertFolder, 0755)
111-
if err != nil {
112-
return err
113-
}
114-
}
115-
116127
for _, secret := range secrets {
117128
if err := writeFile(secret); err != nil {
118129
return err

0 commit comments

Comments
 (0)