GEDOPLAN
Kubernetes

Automatische Zertifikatsvergabe in Kubernetes mit cert-manager

Kubernetes
animal 8807677 640 jpg

Mit Hilfe eines Ingress ist es relativ einfach, eine Webanwendung in Kubernetes öffentlich erreichbar zu machen. Für den Zugriff mittels HTTPS wird allerdings ein Zertifikat (inkl. privatem Schlüssel) benötigt, denn das im Ingress Controller angebotene selbstsignierte Standard-Zertifikat reicht vielleicht für erste Gehversuche, nicht aber für professionelle Einsätze. Man könnte nun manuell ein Zertifikat erstellen, es von einer Certificate Authority signieren lassen, und es dann in einem Secret bereitzustellen, das in der Ingress-Konfiguration referenziert wird.

Es gibt aber ein bessere Möglichkeit: Mit Hilfe von cert-manager können Zertifikate automatisch erstellt und in dem erwähnten Secret eingetragen werden. cert-manager kennt dazu sog. Issuer, die wie eine Art Adapter für die eigentliche Zertifikatsausgabestelle fungieren. Im folgenden nutzen wir den Issuer für Let’s Encrypt.

Zur Installation von cert-manager im Kubernetes Cluster kann ein Helm Chart verwendet werden:

helm repo add jetstack https://charts.jetstack.io --force-update
helm upgrade -i -n cert-manager cert-manager jetstack/cert-manager --set installCRDs=true --wait --create-namespace

Der erwähnte Issuer für Let’s Encrypt wird dann durch das folgende Objekt beschrieben:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: admin@gedoplan.de
    privateKeySecretRef:
      name: letsencrypt
    solvers:
      - http01:
          ingress:
            class: nginx

Hier wird ein ClusterIssuer definiert, der Cluster-weit in allen Namespaces genutzt werden kann; ein einfacher Issuer wäre Namespace-gebunden.

Let’s Encrypt prüft mit einer sog. Challenge, ob der Dienst, für den das Zertifikat angefordert wird, tatsächlich mit dem im Ingress angegebenen Hostnamen erreichbar ist. Im Beispiel wird die sog. Acme Challenge benutzt und vorausgesetzt, dass der Ingress Controller ein Nginx ist.

Ab jetzt läuft die Zertifikatserstellung automatisch, wenn ein Ingress im Kubernetes Cluster eingespielt wird:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: somename
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt
spec:
  rules:
  - host: somename.gedoplan.de
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: somename
            port: 
              name: someport
  tls:
    - hosts:
        - somename.gedoplan.de
      secretName: somename-gedoplan-de-tls

Mit der Annotation cert-manager.io/cluster-issuer wird der oben definierte Issuer referenziert. Beim ersten Mal existiert das angegebene Secret noch nicht, was zur Anforderung eines neuen Zertifikats von Let’s Ecrypt führt. cert-manager kümmert sich auch automatisch um die regelmäßige Erneuerung des Zertifikats (bei Let’s Encrypt alle 3 Monate).

Bei Let’s Encrypt ist zu beachten, dass nur eine limitierte Anzahl Zertifikate innerhalb einer bestimmen Zeitspanne ausgegeben werden. Es gibt daher auch einen Staging-Dienst von Let’s Encrypt, der diese Einschränkung nicht hat, aber auch keine offiziell signierten Zertifikate ausgibt. Er kann genutzt werden, solange man sich noch nicht sicher ist, ob alles wie gewünscht funktioniert.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.

Autor

Diesen Artikel teilen

LinkedIn
Xing

Gibt es noch Fragen?

Fragen beantworten wir sehr gerne! Schreibe uns einfach per Kontaktformular.

Kurse

weitere Blogbeiträge

question 2736480 1280 1
Webprogrammierung

Angular Testing mit Spies

Unit Testing gehört zum guten Ton eines jeden Projektes. Angular tut sein bestes um es dem Entwickler so leicht wie…

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!