-
Notifications
You must be signed in to change notification settings - Fork 6.4k
fix: cache external TLS cert to avoid Loading TLS config
log spam (#17277) (#23965)
#24080
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: cache external TLS cert to avoid Loading TLS config
log spam (#17277) (#23965)
#24080
Conversation
Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
❌ Preview Environment deleted from BunnyshellAvailable commands (reply to this comment):
|
Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #24080 +/- ##
==========================================
+ Coverage 60.15% 60.16% +0.01%
==========================================
Files 348 348
Lines 59889 59905 +16
==========================================
+ Hits 36024 36040 +16
+ Misses 20980 20975 -5
- Partials 2885 2890 +5 ☔ View full report in Codecov by Sentry. |
Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
@mtbennett-godaddy is there any reason why we couldn't do something like // externalServerTLSCertificate will try and load a TLS certificate from an
// external secret, instead of tls.crt and tls.key in argocd-secret. If both
// return values are nil, no external secret has been configured.
func (mgr *SettingsManager) externalServerTLSCertificate(existingCert *tls.Certificate) (*tls.Certificate, error) {
var cert tls.Certificate
secret, err := mgr.GetSecretByName(externalServerTLSSecretName)
if err != nil {
if apierrors.IsNotFound(err) {
return nil, nil
}
}
if secret.ResourceVersion != mgr.tlsCertCacheSecretVersion || existingCert == nil {
log.Infof("Loading TLS configuration from secret %s/%s", mgr.namespace, externalServerTLSSecretName)
tlsCert, certOK := secret.Data[settingServerCertificate]
tlsKey, keyOK := secret.Data[settingServerPrivateKey]
if certOK && keyOK {
cert, err = tls.X509KeyPair(tlsCert, tlsKey)
if err != nil {
return nil, err
}
}
mgr.tlsCertCacheSecretVersion = secret.ResourceVersion
return &cert, nil
}
return existingCert, nil
} |
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
@blakepettersson Commited some refactors before I saw your comment. The refactor adds a However, there are sporadic unit test failures in the GH action runs that I haven’t been able to reproduce locally. Still trying to figure that out. |
Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
@blakepettersson Ready for review. I figured out the unit test issue… I was calling |
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
Seems like this should be cherry-picked back to 3.0 and 3.1 (once this PR gets approved and merged) |
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
…nal-tls-cert Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
@mtbennett-godaddy thanks a lot! Do you mind creating cherry-pick PRs for 3.0 and 3.1? |
Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
Signed-off-by: Matthew Bennett <mtbennett@godaddy.com>
I'm new to the ArgoCD project and don't really understand the release process. Has this been released? @blakepettersson |
@ivanpedersen we haven't cherry-picked this back, so it'll go out in 3.2.0-rc1 which is released in ~2 weeks. We have cherry-picked and released #24235, which I'm hoping will sufficiently mitigate the logs and performance issues. |
…rgoproj#17277) (argoproj#23965) (argoproj#24080) Signed-off-by: Mangaal <angommeeteimangaal@gmail.com>
GetSettings
calls (#17277) (#23965) #24021.Updates
SettingsManager.externalServerTLSCertificate
to cache the key parsed from the secret’s cert and to invalidate that cache when the secret is updated. It also moves theLoading TLS configuration from secret
log message so that it is only emitted when the cert is parsed (as opposed to every timeSettingsManager.GetSettings
is called).Checklist:
[ ] I've updated both the CLI and UI to expose my feature, or I plan to submit a second PR with them.[ ] Does this PR require documentation updates?[ ] I've updated documentation as required by this PR.[ ] My new feature complies with the feature status guidelines.