Cert-Manager: Automatisierte Zertifikatsverwaltung für Kubernetes – Free Your Engineers

Eine Einführung in Cert-Manager für Kubernetes und eine Schritt-für-Schritt-Anleitung zur Einrichtung

CloudUPDATED ON Dezember 10, 2021

John Adam K&C head of marketing

Author

Was ist Cert-Manager für Kubernetes?

Zertifikaten und sichert den Anwendungsverkehr – eine wichtige Funktion im modernen Web. Die Automatisierung des Zertifizierungsprozesses spart Ingenieuren Zeit und erhöht die Sicherheit, da das Risiko menschlicher Fehler ausgeschlossen wird.

Cert-manager ist der Nachfolger von kube-lego, dem ursprünglichen Let’s Encrypt-Zertifikatstool von jetstack.io für Kubernetes-Ingress-Ressourcen. Kube-lego vereinfacht die Sicherung des Datenverkehrs zwischen Ihren Benutzern und Ihrem Cluster-Ingress-Punkt. Aber die Grenzen eines Controllers, der nur auf Kubernetes-Ingresses aufbaut, sind deutlich geworden.

Cert-manager wurde auf der Grundlage von Kubernetes CustomResourceDefinitions entwickelt, was zu einer deutlich höheren Flexibilität bei der Konfiguration geführt hat. Die Debugging-Funktionen wurden ebenfalls verbessert und unterstützen nun eine breitere Palette von CAs als das eigenständige Tool Let’s Encrypt.

Agile und DevOps-Entwickler, Teamverstärkung und Berater

Nach Ihren individuellen Bedürfnissen!

Wann sollten Sie cert-manager Zertifikatsautomatisierung einsetzten?

Ein gutes Beispiel für die Vorteile der Zertifikatsautomatisierung mit cert-manager wäre eine webbasierte Anwendung, deren Benutzeroberfläche, API, Verwaltungsfront und Verwaltungs-API alle unter separaten Domainnamen gehostet werden. Das bedeutet, dass jeder Dienst sein eigenes, individuelles Zertifikat benötigt. Der Cert Manager überwacht den Zeitpunkt dieser Zertifikate und erneuert sie bei Bedarf.

Wenn im Entwicklungsprozess dynamische Umgebungen verwendet werden (eine Funktion wird geschrieben, die nächste Entwicklungsumgebung erstellt, getestet und die Umgebung gelöscht), müssen ständig SSL-Zertifikate generiert werden. Als manueller Prozess ist das eine Menge teurer Arbeitsstunden. Wenn jedoch ein „Heart Manager“ eingerichtet wird, generiert er alle erforderlichen Zertifikate automatisch, ohne dass ein Ingenieur daran beteiligt ist. Dies ist besonders bei größeren webbasierten Anwendungen von Vorteil. Im Falle eines Beispiels von 20 Diensten könnte die Automatisierung der Zertifizierung mit cert-manager eine erhebliche Menge an manueller Entwicklungsarbeit einsparen.

Cert-Manager Komponenten

  • Issuers stellt eine Zertifizierungsstelle dar, von der signierte x509-Zertifikate bezogen werden können, wie z. B. Let’s Encrypt – jetstack.io’s Zertifikatsbereitstellungstool für Kubernetes-Ingress-Ressourcen.
  • ClusterIssuer ist ein ähnlicher Ressourcentyp wie Issuers. Er wird auf genau dieselbe Weise spezifiziert, gehört aber nicht zu einem einzigen Namespace und kann von Zertifikatsressourcen aus mehreren verschiedenen Namespaces referenziert werden.
  • Zertifikat ist eine Ressource mit Namensraum, die auf einen Issuer oder ClusterIssuer verweist, um Informationen darüber zu erhalten, wie das Zertifikat zu erhalten ist.

Cert-Manager einrichten: eine Step-by-Step Anleitung

Der erste Schritt bei der Einrichtung von cert-manager besteht darin, benutzerdefinierte CRDs zu installieren – ClusterIssuer, Certificate, Order and Challange. Cert-manager is then installed via Helm

Helm hilft bei der Verwaltung des erforderlichen Zustands von mehreren Kubernetes-Objekten. Seine Effektivität wird durch die Kombination mit Reckoner optimiert, der eine YAML-Synatc zur gleichzeitigen Installation mehrerer Helm-Releases verwendet und die Installation von Charts aus einem Git-Repository erleichtert.

Ein neues Objekt Zertifikat wird dann erstellt und Cert-manager erstellt anschließend einen Auftrag mit CSR und Challange, wobei der Auftrag verwendet wird, um ein neues Zertifikat zu erhalten.

Um neue Zertifikate zu erhalten, erstellt Cert-manager einen separaten Ingress mit einer URL wie im folgenden Beispiel:

http://main.domain.com/.well-known/acme-challenge/SFAHjkfhkj2hjkn23kbk32nknkfn3ktk3j4gkj3b .

Dieser Ingress verweist auf einen benutzerdefinierten Dienst und gibt einene Hash für die Zertifikatsüberprüfung zurück. Parallel dazu erstellt cert-manager ein selbstsigniertes Zertifikat, bis das Hauptzertifikat erhalten wird.

Alle diese Zertifikate (temporäre und Hauptzertifikate) werden in Secret gespeichert und in der Ingress Konfiguration (Ingress config) verwendet.

Nachdem ein gültiges Zertifikat erhalten wurde, legt cert-manager dieses Zertifikat in Secret anstelle des temporären Zertifikats ab und löscht auch den temporären Ingress und Service.

Wann funktioniert IT-Outsourcing?

Und wann nicht ?

So installieren Sie Cert-Manager

Erstellen Sie eine benutzerdefinierte CRD

kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.9/deploy/manifests/00-crds.yaml

Erstellen und kennzeichnen Sie den namespace für cert-manager

kubectl create namespace cert-manager
kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true

Fügen Sie das helm-Repository für die Verwendung des neusten helm-chart hinzu

helm repo add jetstackhttps://charts.jetstack.io
helm repo update

Installieren Sie Cert-manager helm-chart

helm install –name cert-manager –namespace cert-manager –version v0.9.1 jetstack/cert-manager

ClusterIssuer erstellen

Cert-manager könnten Zertifikate von einer anderen CA beziehen. Schauen wir uns beispielsweise an, wie es mit Let’s Encrypt funktioniert:

kubectlapply -f letsencrypt-clusterissuer.yaml

letsencrypt-clusterissuer.yaml

apiVersion: certmanager.k8s.io/v1alpha1

kind: ClusterIssuer

metadata:

name: letsencrypt-cluster-issuer

spec:

acme:

# The ACME server URL

server: https://acme-v02.api.letsencrypt.org/directory

# Email address used for ACME registration

email: [email protected]

# Name of a secret used to store the ACME account private key

privateKeySecretRef:

name: letsencrypt-prod

# Enable the HTTP-01 challenge provider

http01: {}

Where:

privateKeySecretRef.name –  Secret, das den privaten Schlüssel für den Cluster Issuer enthält, der automatisch erstellt wird.

Und das war’s, Ihr Kubernetes-Cluster ist bereit für den Erhalt von Let’s Encrypt Zertifikaten. Für die manuelle Erstellung von Zertifikaten sollten wird die folgende Konfiguration (config) verwenden:

Certificate.yaml

apiVersion: certmanager.k8s.io/v1alpha1

kind: Certificate

metadata:

name: test-cm.krusche.cloud

namespace: default

spec:

secretName: prod-cert-nginx

issuerRef:

name: letsencrypt-cluster-issuer

kind: ClusterIssuer

commonName: test-cm.krusche.cloud

dnsNames:

- test-cm.krusche.cloud

acme:

config:

- http01:

ingressClass: traefik

domains:

- test-cm.krusche.cloud

Where:

secretName – dieses Secret enthält ein Zertifikat, das in Ingress verwendet werden soll. Es wird automatisch erstellt.
commonName- Haupt domain name
dnsNames- Alternativer domain name ( SAN )

Für die automatische Zertifikatserstellung sollten Sie die nächste Anmerkung zur Ingress-Konfiguration (Ingress config) hinzufügen:

Ingress-example.yaml

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

name: nginx

annotations:

kubernetes.io/ingress.class: "traefik"

certmanager.k8s.io/cluster-issuer: "letsencrypt-cluster-issuer"

kubernetes.io/tls-acme: "true"

certmanager.k8s.io/acme-challenge-type: "http01"




spec:

tls:

- hosts:

- test-cm.krusche.cloud

secretName: quickstart-example-tls-5-prod

rules:

- host: test-cm.krusche.cloud

http:

paths:

- path: /

backend:

serviceName: nginx

servicePort: 80

secretName – dieses Secret enthält ein Zertifikat, das in Ingress verwendet werden soll. Es wird automatisch erstellt.

In cert-manager sollte nun auf Kobernetes eingerichtet sein und mit der Automatisierung der Zertifikatsverwaltung beginnen.

K&C - Wir schaffen innovative Tech-Lösungen seit über 20 Jahren.

Kontaktieren Sie uns, um Ihre individuellen Bedürfnisse oder Ihr nächstes Projekt zu diskutieren.