/ Rancher

Rancher 2.0 - Zertifikate mit Let's Encrypt und Cert-Manager

Rancher-Workloads unter Rancher 2 mit Zertifikaten auszustatten und sie zu pflegen, bedarf einiges an Aufwand. Ein Container mit installiertem certbot muss mit der gewünschten Domain temporär verknüpft werden (Load-Balancer), um die Domain-Verifizierung durch Let's Encrypt zu ermöglichen. Darüberhinaus müssen Zertifikate regelmäßig manuell aktualisert werden.

Automatisieren lässt sich die Zertifikatsverwaltung mit cert-manager. Zertifikate lassen sich mit dem "Certificate Management Controller" bequem mit Hilfe von kubectl konfigurieren. Die Aktualisierung der Zertifikate erfolgt im Anschluss automatisiert.

Dieser Artikel stellt die absolut minimalen Einstellungen, die für die Anlage eines Zertifikats notwendig sind, dar.

Installation

Um den Cert-Manager zu installieren, muss im Rancher unter "Global" --> "Catalogs" das Katalog "Helm Stable" aktiviert werden.

Im gewünschten Rancher-Projekt kann dann unter "Catalog Apps" die App "cert-manager" ausgewählt und gestartet werden.

Konfiguration

Um die Konfiguration vornehmen zu können, sollte Rancher CLI und Kubectl installiert sein

Die generierten Zertifikate möchten wir im geseamten Cluster verfübgar haben (ClusterIssuer).

Als Validierung wählen wir die HTTP01-Methode.

Die Domain, für die wir ein Zertifikat generieren wollen, nenne ich in diesem Beispiel www.example.com.

Schritt 1: ClusterIssuer anlegen

Ein ClusterIssuer muss angelegt werden. Dazu legen wir eine datei clusterIssuer.yml an:

apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
  name: letsencrypt-issuer
  namespace: default
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: cert@www.example.com
    privateKeySecretRef:
      name: letsencrypt-cluster
    http01: {}

Der ClusterIssuer wird generiert mit

$ rancher kubectl create -f clusterIssuer.yml

Prüfung ob der ClusterIssuer korrekt angelegt ist:

$ rancher kubectl describe clusterissuer letsencrypt-issuer

Schritt 2: Zertifikat anlegen

Ein Zertifikats-Objekt muss angelegt werden. Die Konfiguration speichern wir in einer Datei mit dem Namen certificate.yml:

apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
  name: example-com
  namespace: default
spec:
  secretName: example-com-tls
  issuerRef:
    name: letsencrypt-issuer
    kind: ClusterIssuer
  commonName: www.example.com
  dnsNames:
  - example.com
  - www.example.com
  acme:
    config:
    - http01:
        ingressClass: nginx
      domains:
      - example.com
      - www.example.com

Die Konfiguration an Rancher übertragen:

$ rancher kubectl create -f certificate.yml

Das Zertifikat überprüfen:

$ rancher kubectl describe certificate example-com

Schritt 3: Zertifikat verwenden

Nach erfolgreicher Konfiguration des Cert-Manager sollte das Zertifikat unter "Ressources" --> "Certificates" einsehbar sein. Es erscheint mit dem Namen, den wir unter "secretName" der Datei certificate.yml eingetragen haben. In den Details des Zertifikats sind keine Einstellungen sichtbar. Das ist erstmal korrekt so. Cert-Manager und Rancher 2.0 können es an der Stelle noch nicht besser lösen.

Unter "Workloads" --> "Load Balancing" --> Im gewünschten Eintrag unter "SSL/TLS Certificates" kann das frisch generierte Zertifikat ausgewählt werden. Unter "Hosts" müssen zusätzlich noch dieselben Hostnamen eingetragen werden, die man für die Zertifikatgenerierung konfiguriert hat.

Quellen:
https://www.idealcoders.com/posts/rancher/2018/06/rancher-2-x-and-lets-encrypt-with-cert-manager-and-nginx-ingress/