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!
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.
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 ?
kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.9/deploy/manifests/00-crds.yaml
kubectl create namespace cert-manager
kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true
helm repo add jetstackhttps://charts.jetstack.io
helm repo update
helm install –name cert-manager –namespace cert-manager –version v0.9.1 jetstack/cert-manager
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
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:
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:
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.