Fragt man einen erfahrenen, klugen Ingenieur, was er von cert-manager hält und warum ihn jeder nutzt, dann wird der Spezialist seufzen, ihn vertrauensvoll umarmen und müde sagen: „Jeder nutzt es, weil es keine vernünftigen Alternativen gibt.“ Unsere Mäuse weinen, stechen, leben aber weiterhin mit diesem Kaktus. Warum lieben wir? Weil es funktioniert. Warum lieben wir nicht? Denn es kommen ständig neue Versionen heraus, die neue Funktionen nutzen. Und Sie müssen den Cluster immer wieder aktualisieren. Und die alten Versionen funktionieren nicht mehr, weil es eine Verschwörung und einen großen mysteriösen Schamanismus gibt.
Aber das behaupten die Entwickler Zertifikatsmanager 1.0 Alles wird sich verändern.
Glaube es?
Cert-Manager ist der native Kubernetes-Zertifikatverwaltungscontroller. Es kann Zertifikate aus verschiedenen Quellen ausstellen: Let's Encrypt, HashiCorp Vault, Venafi, signierende Schlüsselpaare und selbstsignierte. Außerdem können Sie Schlüssel anhand der Ablaufzeit auf dem neuesten Stand halten und versuchen, Zertifikate zu einem bestimmten Zeitpunkt vor ihrem Ablauf automatisch zu erneuern. Cert-Manager basiert auf Kube-Lego und hat auch einige Tricks aus anderen ähnlichen Projekten wie Kube-Cert-Manager verwendet.
Versionshinweise
Mit der Version 1.0 setzen wir ein Zeichen des Vertrauens für die dreijährige Entwicklung des Cert-Manager-Projekts. In dieser Zeit hat es sich hinsichtlich Funktionalität und Stabilität erheblich weiterentwickelt, vor allem aber in der Community. Heutzutage sehen wir, dass viele Menschen es verwenden, um ihre Kubernetes-Cluster zu sichern und es in verschiedenen Teilen des Ökosystems bereitzustellen. In den letzten 16 Versionen wurden viele Fehler behoben. Und was gebrochen werden musste, ist kaputt. Mehrere Besuche zur Arbeit mit der API haben die Interaktion mit Benutzern verbessert. Wir haben 1500 Probleme auf GitHub mit weiteren Pull-Anfragen von 253 Community-Mitgliedern gelöst.
Mit der Veröffentlichung von 1.0 erklären wir offiziell, dass cert-manager ein ausgereiftes Projekt ist. Wir versprechen außerdem, unsere API kompatibel zu halten v1
.
Vielen Dank an alle, die uns in all den drei Jahren dabei geholfen haben, Cert-Manager zu werden! Lassen Sie Version 1.0 die erste von vielen großen Dingen sein, die noch kommen werden.
Release 1.0 ist eine stabile Version mit mehreren Prioritätsbereichen:
-
v1
FEUER; -
Team
kubectl cert-manager status
, um bei der Problemanalyse zu helfen; -
Verwendung der neuesten stabilen Kubernetes-APIs;
-
Verbesserte Protokollierung;
-
ACME-Verbesserungen.
Lesen Sie vor dem Upgrade unbedingt die Upgrade-Hinweise.
API v1
Version v0.16 funktionierte mit der API v1beta1
. Dadurch wurden einige strukturelle Änderungen vorgenommen und auch die API-Felddokumentation verbessert. Version 1.0 baut darauf mit einer API auf v1
. Diese API ist unsere erste stabile, gleichzeitig haben wir bereits Kompatibilitätsgarantien gegeben, allerdings mit der API v1
Wir versprechen, die Kompatibilität auch in den kommenden Jahren aufrechtzuerhalten.
Vorgenommene Änderungen (Hinweis: Unsere Konvertierungstools erledigen alles für Sie):
Zertifikat:
-
emailSANs
jetzt genanntemailAddresses
-
uriSANs
-uris
Diese Änderungen erhöhen die Kompatibilität mit anderen SANs (Subjekt-Alt-Namen, ca. Übersetzer) sowie mit der Go-API. Wir entfernen diesen Begriff aus unserer API.
Aktualisieren
Wenn Sie Kubernetes 1.16+ verwenden, können Sie durch die Konvertierung von Webhooks gleichzeitig und nahtlos mit API-Versionen arbeiten v1alpha2
, v1alpha3
, v1beta1
и v1
. Damit können Sie die neue Version der API nutzen, ohne Ihre alten Ressourcen zu ändern oder neu bereitzustellen. Wir empfehlen dringend, Ihre Manifeste auf die API zu aktualisieren v1
, da frühere Versionen bald veraltet sein werden. Benutzer legacy
Versionen von Cert-Manager haben weiterhin nur Zugriff auf v1
finden Sie Upgrade-Schritte
kubectl cert-manager status-Befehl
Mit neuen Verbesserungen in unserer Erweiterung zu kubectl
Es wurde einfacher, die Probleme im Zusammenhang mit der Nichtausstellung von Zertifikaten zu untersuchen. kubectl cert-manager status
Bietet jetzt viel mehr Informationen darüber, was mit den Zertifikaten passiert, und zeigt auch die Phase der Zertifikatsausstellung an.
Nach der Installation der Erweiterung können Sie sie ausführen kubectl cert-manager status certificate <имя-сертификата>
, das das Zertifikat mit dem angegebenen Namen und allen zugehörigen Ressourcen wie CertificateRequest, Secret, Issuer und Order and Challenges sucht, wenn Zertifikate von ACME verwendet werden.
Ein Beispiel für das Debuggen eines Zertifikats, das noch nicht fertig ist:
$ kubectl cert-manager status certificate acme-certificate
Name: acme-certificate
Namespace: default
Created at: 2020-08-21T16:44:13+02:00
Conditions:
Ready: False, Reason: DoesNotExist, Message: Issuing certificate as Secret does not exist
Issuing: True, Reason: DoesNotExist, Message: Issuing certificate as Secret does not exist
DNS Names:
- example.com
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Issuing 18m cert-manager Issuing certificate as Secret does not exist
Normal Generated 18m cert-manager Stored new private key in temporary Secret resource "acme-certificate-tr8b2"
Normal Requested 18m cert-manager Created new CertificateRequest resource "acme-certificate-qp5dm"
Issuer:
Name: acme-issuer
Kind: Issuer
Conditions:
Ready: True, Reason: ACMEAccountRegistered, Message: The ACME account was registered with the ACME server
error when finding Secret "acme-tls": secrets "acme-tls" not found
Not Before: <none>
Not After: <none>
Renewal Time: <none>
CertificateRequest:
Name: acme-certificate-qp5dm
Namespace: default
Conditions:
Ready: False, Reason: Pending, Message: Waiting on certificate issuance from order default/acme-certificate-qp5dm-1319513028: "pending"
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal OrderCreated 18m cert-manager Created Order resource default/acme-certificate-qp5dm-1319513028
Order:
Name: acme-certificate-qp5dm-1319513028
State: pending, Reason:
Authorizations:
URL: https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/97777571, Identifier: example.com, Initial State: pending, Wildcard: false
Challenges:
- Name: acme-certificate-qp5dm-1319513028-1825664779, Type: DNS-01, Token: J-lOZ39yNDQLZTtP_ZyrYojDqjutMAJOxCL1AkOEZWw, Key: U_W3gGV2KWgIUonlO2me3rvvEOTrfTb-L5s0V1TJMCw, State: pending, Reason: error getting clouddns service account: secret "clouddns-accoun" not found, Processing: true, Presented: false
Der Befehl kann Ihnen auch dabei helfen, mehr über den Inhalt des Zertifikats zu erfahren. Detailliertes Beispiel für ein von Letsencrypt ausgestelltes Zertifikat:
$ kubectl cert-manager status certificate example
Name: example
[...]
Secret:
Name: example
Issuer Country: US
Issuer Organisation: Let's Encrypt
Issuer Common Name: Let's Encrypt Authority X3
Key Usage: Digital Signature, Key Encipherment
Extended Key Usages: Server Authentication, Client Authentication
Public Key Algorithm: RSA
Signature Algorithm: SHA256-RSA
Subject Key ID: 65081d98a9870764590829b88c53240571997862
Authority Key ID: a84a6a63047dddbae6d139b7a64565eff3a8eca1
Serial Number: 0462ffaa887ea17797e0057ca81d7ba2a6fb
Events: <none>
Not Before: 2020-06-02T04:29:56+02:00
Not After: 2020-08-31T04:29:56+02:00
Renewal Time: 2020-08-01T04:29:56+02:00
[...]
Verwendung der neuesten stabilen Kubernetes-APIs
Cert-manager war einer der ersten, der Kubernetes CRDs implementierte. Dies und unsere Unterstützung für Kubernetes-Versionen bis 1.11 bedeuteten, dass wir das Legacy unterstützen mussten apiextensions.k8s.io/v1beta1
auch für unsere CRDs admissionregistration.k8s.io/v1beta1
für unsere Webhooks. Sie sind nun veraltet und werden in Kubernetes ab Version 1.22 entfernt. Mit unserer Version 1.0 bieten wir nun vollen Support apiextensions.k8s.io/v1
и admissionregistration.k8s.io/v1
für Kubernetes 1.16 (wo sie hinzugefügt wurden) und neuer. Für Nutzer früherer Versionen bieten wir weiterhin Support an v1beta1
in unserer legacy
Versionen.
Verbesserte Protokollierung
In dieser Version haben wir die Protokollierungsbibliothek auf aktualisiert klog/v2
, verwendet in Kubernetes 1.19. Wir überprüfen auch jede von uns verfasste Zeitschrift, um sicherzustellen, dass sie der entsprechenden Stufe zugeordnet ist. Davon haben wir uns leiten lassen Error
(Stufe 0), die nur wichtige Fehler ausgibt, und endet mit Trace
(Stufe 5), die Ihnen hilft, genau zu wissen, was vor sich geht. Mit dieser Änderung haben wir die Anzahl der Protokolle reduziert, wenn Sie beim Ausführen von cert-manager keine Debug-Informationen benötigen.
Tipp: cert-manager läuft standardmäßig auf Level 2 (Info
), können Sie dies mit überschreiben global.logLevel
in Helmchart.
Hinweis: Das Anzeigen der Protokolle ist der letzte Ausweg bei der Fehlerbehebung. Weitere Informationen finden Sie in unserem
Anmerkung des Herausgebers:: Um mehr darüber zu erfahren, wie alles unter der Haube von Kubernetes funktioniert, wertvolle Ratschläge von praktizierenden Lehrern sowie hochwertige technische Unterstützung zu erhalten, können Sie an Online-Intensivkursen teilnehmen
ACME-Verbesserungen
Die häufigste Verwendung von cert-manager hängt wahrscheinlich mit der Ausstellung von Zertifikaten von Let's Encrypt mithilfe von ACME zusammen. Version 1.0 zeichnet sich dadurch aus, dass sie das Feedback der Community nutzt, um zwei kleine, aber wichtige Verbesserungen an unserem ACME-Herausgeber vorzunehmen.
Deaktivieren Sie die Generierung von Kontoschlüsseln
Wenn Sie ACME-Zertifikate in großen Mengen verwenden, verwenden Sie wahrscheinlich dasselbe Konto auf mehreren Clustern, sodass Ihre Zertifikatsausstellungsbeschränkungen für alle Cluster gelten. Dies war im Cert-Manager bereits beim Kopieren des in angegebenen Geheimnisses möglich privateKeySecretRef
. Dieser Anwendungsfall war ziemlich fehlerhaft, da der Zertifikatsmanager versuchte, hilfreich zu sein und gerne einen neuen Kontoschlüssel erstellte, wenn er keinen fand. Deshalb haben wir hinzugefügt disableAccountKeyGeneration
um Sie vor diesem Verhalten zu schützen, wenn Sie diese Option auf setzen true
- Der Zertifikatsmanager generiert keinen Schlüssel und warnt Sie, dass kein Kontoschlüssel bereitgestellt wurde.
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt
spec:
acme:
privateKeySecretRef:
name: example-issuer-account-key
disableAccountKeyGeneration: false
Bevorzugte Kette
29. September Let's Encrypt ISRG Root
. Gegensignierte Zertifikate werden durch ersetzt Identrust
. Diese Änderung erfordert keine Änderungen an den Cert-Manager-Einstellungen. Alle aktualisierten oder neuen Zertifikate, die nach diesem Datum ausgestellt werden, verwenden die neue Stammzertifizierungsstelle.
Let's Encrypt signiert bereits Zertifikate mit dieser CA und bietet sie als „alternative Zertifikatskette“ über ACME an. In dieser Version des Cert-Managers ist es möglich, den Zugriff auf diese Ketten in den Ausstellereinstellungen festzulegen. Im Parameter preferredChain
Sie können den Namen der verwendeten CA angeben, mit der das Zertifikat ausgestellt wird. Liegt ein zur Anfrage passendes CA-Zertifikat vor, stellt diese Ihnen ein Zertifikat aus. Bitte beachten Sie, dass dies die bevorzugte Option ist. Wenn nichts gefunden wird, wird ein Standardzertifikat ausgestellt. Dadurch wird sichergestellt, dass Sie Ihr Zertifikat auch nach dem Löschen der alternativen Kette auf der Seite des ACME-Ausstellers erneuern.
Bereits heute können Sie von uns unterzeichnete Zertifikate erhalten ISRG Root
, So:
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
preferredChain: "ISRG Root X1"
Wenn Sie lieber die Kette verlassen möchten IdenTrust
- Setzen Sie diese Option auf DST Root CA X3
:
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
preferredChain: "DST Root CA X3"
Bitte beachten Sie, dass diese Stammzertifizierungsstelle bald veraltet ist. Let's Encrypt wird diese Kette bis zum 29. September 2021 aktiv halten.
Source: habr.com