GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So installieren Sie Kubernetes Cert-Manager und konfigurieren Let’s Encrypt

Cert-Manager automatisiert die Bereitstellung von Zertifikaten innerhalb von Kubernetes-Clustern. Es bietet eine Reihe benutzerdefinierter Ressourcen zum Ausstellen von Zertifikaten und zum Anhängen an Dienste.

Einer der häufigsten Anwendungsfälle ist die Sicherung von Web-Apps und APIs mit SSL-Zertifikaten von Let’s Encrypt. So fügen Sie Cert-Manager zu Ihrem Cluster hinzu, richten einen Let’s Encrypt-Zertifikatsaussteller ein und erwerben ein Zertifikat für Pods, die über einen Ingress verfügbar gemacht werden.

Cert-Manager installieren

Cert-Manager lässt sich am einfachsten mit Helm installieren. Helm ist ein Kubernetes-Paketmanager, mit dem Sie Anwendungen zu Ihrem Cluster hinzufügen können, indem Sie Repositories mit vorgefertigten Diagrammen verwenden. Stellen Sie sicher, dass Sie Helm installiert und mit einer Verbindung zu Ihrem Kubernetes-Cluster eingerichtet haben.

Beginnen Sie damit, das Jetstack-Repository zu Ihrer Helm-Installation hinzuzufügen. Jetstack hat Cert-Manager ursprünglich entwickelt, bevor es an die CNCF gespendet wurde.

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

Installieren Sie jetzt Cert-Manager in Ihrem Cluster:

helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.5.3 --set installCRDs=true

Ersetzen Sie die oben angezeigte Versionsnummer durch die neueste Version, die in der Cert-Manager-Dokumentation angezeigt wird.

Der Befehl installiert Cert-Manager in einem neuen Kubernetes-Namespace namens cert-manager . Die installCRDs -Einstellung werden die benutzerdefinierten Kubernetes-Ressourcen von Cert-Manager während der Installation hinzugefügt. Dies funktioniert nur mit Helm-Version 3.2 und neuer – wenn Sie eine ältere Version verwenden, müssen Sie die Ressourcendefinitionen manuell mit Kubectl hinzufügen:

kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.crds.yaml

Hinzufügen des Kubectl-Plugins

Cert-Manager verfügt über ein Kubectl-Plugin, das einige allgemeine Verwaltungsaufgaben vereinfacht. Außerdem können Sie überprüfen, ob Cert-Manager aktiv und bereit ist, Anfragen zu bedienen.

Installieren Sie das Plugin, indem Sie sein Archiv herunterladen und es in das richtige Verzeichnis extrahieren:

curl -L -o kubectl-cert-manager.tar.gz https://github.com/jetstack/cert-manager/releases/latest/download/kubectl-cert_manager-linux-amd64.tar.gz
tar xzf kubectl-cert-manager.tar.gz
sudo mv kubectl-cert_manager /usr/local/bin

Verwenden Sie nun das Plugin, um zu überprüfen, ob Ihre Cert-Manager-Installation funktioniert:

kubectl cert-manager check api

Sie sollten die folgende Ausgabe sehen:

The cert-manager API is ready

Jetzt können Sie einen Aussteller hinzufügen, um Zertifikate von Let’s Encrypt zu erhalten.

Erstellen eines Zertifikatausstellers

Aussteller und Cluster-Aussteller sind Ressourcen, die Ihrem Cluster Zertifikate bereitstellen. Die bisher erstellte grundlegende Cert-Manager-Installation kann keine Zertifikate ausstellen. Wenn Sie einen Aussteller hinzufügen, der für die Verwendung von Let’s Encrypt konfiguriert ist, können Sie dynamisch neue Zertifikate für Dienste in Ihrem Cluster erwerben.

Erstellen Sie eine YAML-Datei in Ihrem Arbeitsverzeichnis und nennen Sie sie issuer.yml . Fügen Sie den folgenden Inhalt hinzu:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: [email protected]
    privateKeySecretRef:
      name: letsencrypt-staging
    solvers:
      - http01:
          ingress:
            class: nginx

Sie müssen die E-Mail-Adresse durch Ihre eigene Kontakt-E-Mail ersetzen. Diese wird in Ihre Zeugnisse aufgenommen. Let’s Encrypt kann Ihnen auch eine E-Mail an die Adresse senden, wenn es Ihnen Benachrichtigungen zu Ihren Zertifikaten senden muss.

Wir erstellen einen ClusterIssuer da diese für alle Ressourcen in Ihrem Cluster verfügbar sind, unabhängig vom Namespace. Ein Standard-Issuer ist eine Namespace-Ressource, die nur Zertifikate innerhalb ihres eigenen Namespace bereitstellen kann.

Unsere Ausstellerkonfiguration weist Cert-Manager an, Zertifikate vom Staging-Server von Let’s Encrypt abzurufen. Es ist eine gute Idee, die Staging-Umgebung zu verwenden, während Sie Ihre Integration einrichten, um zu vermeiden, dass die strengen Produktionsratenbeschränkungen von Let’s Encrypt erreicht werden.

Verwenden Sie kubectl So fügen Sie den Aussteller zu Ihrem Cluster hinzu:

kubectl create -f issuer.yml

Ein Zertifikat erhalten

Jetzt können Sie Ihren Aussteller verwenden, um ein Zertifikat für einen Dienst zu erwerben, der über eine Ingress-Ressource bereitgestellt wird. Cert-Manager überwacht automatisch Ingress-Ressourcen und erstellt Zertifikate anhand der Konfiguration in ihrem tls Feld. Sie müssen lediglich eine Anmerkung hinzufügen, die den Aussteller oder Cluster-Aussteller nennt, den Sie verwenden möchten.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: wordpress:latest
          ports:
            - containerPort: 80
 
---

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    port: 80
 
---

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-staging
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            backend:
              serviceName: my-service
              servicePort: 80
  tls:
    - hosts:
      - example.com

Diese YAML-Datei definiert einen Pod, einen Dienst und einen Ingress, der den Dienst verfügbar macht. Es setzt die Verwendung von nginx-ingress voraus als Ingress-Controller. Der Pod führt einen WordPress-Container aus, auf den über HTTPS unter example.com zugegriffen werden kann .

Das Vorhandensein von cert-manager.io/cluster-issuer Anmerkungen in der Ingress-Ressource werden von Cert-Manager erkannt. Es wird das letsencrypt-staging verwendet Cluster-Aussteller, der zuvor erstellt wurde, um ein Zertifikat zu erwerben, das die in tls.hosts von Ingress definierten Hostnamen abdeckt Feld.

Let’s Encrypt in der Produktion verwenden

Sobald Sie erfolgreich ein Staging-Zertifikat erworben haben, können Sie auf die Produktionsserver von Let’s Encrypt migrieren. Staging-Zertifikate sind gültig, werden aber von Browsern nicht als vertrauenswürdig eingestuft, daher müssen Sie einen Produktionsersatz besorgen, bevor Sie Ihre Website live schalten.

Am besten fügen Sie einen separaten Cluster-Aussteller für den Produktionsserver hinzu. Sie können dann in jeder Ihrer Ingress-Ressourcen auf den entsprechenden Aussteller verweisen, je nachdem, ob sie produktionsbereit sind.

Kopieren Sie die oben gezeigte Ausstellerkonfiguration und ändern Sie den name Felder zu letsencrypt-production . Ersetzen Sie als Nächstes die Server-URL durch den unten gezeigten Wert:

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

Erstellen Sie den neuen Aussteller in Ihrem Cluster:

kubectl create -f issuer-production.yml

Aktualisieren Sie Ihre Ingress-Ressource, um ein Produktionszertifikat anzufordern, indem Sie den Wert von cert-manager.io/cluster-issuer ändern Anmerkung zu letsencrypt-production (oder den Namen, den Sie Ihrem eigenen Produktionsaussteller zugewiesen haben). Verwenden Sie kubectl um die Änderung zu übernehmen:

kubectl apply -f my-ingress.yaml

Sie sollten nun voll funktionsfähiges HTTPS für Ihre Ingress-Ressource aktiviert haben. Cert-Manager verwaltet Ihre Zertifikate automatisch und erneuert sie, bevor sie ablaufen.

Cert-Manager aktualisieren

Cert-Manager-Releases unterstützen normalerweise direkte Upgrades mit Helm:

helm repo update
helm upgrade --version <new version> cert-manager jetstack/cert-manager

Zertifikate bleiben während Upgrades verfügbar, aber der Erneuerungsprozess wird angehalten.

Obwohl Upgrades jetzt normalerweise unkompliziert sind, sollten Sie immer die Versionshinweise lesen, um mögliche Änderungen zu identifizieren, die Sie vornehmen müssen. Dies ist besonders wichtig, wenn Sie Kubernetes aktualisieren oder mehrere Cert-Manager-Versionen durchlaufen. Wenn Sie noch eine ältere Kubernetes-Version verwenden, verwenden Sie möglicherweise eine veraltete Cert-Manager-Version, die einen erheblichen manuellen Eingriff erfordert, um sie auf den neuesten Stand zu bringen.

Zusammenfassung

Let’s Encrypt lässt sich mit Cert-Manager ganz einfach zu einem Kubernetes-Cluster hinzufügen. Sie müssen Cert-Manager mit Helm installieren, einen Aussteller erstellen, der die Let’s Encrypt-API verwendet, und dann in Ihren Ingress-Ressourcen auf diesen Aussteller verweisen.

Sie können Cert-Manager mit Ihrer eigenen Konfiguration für fortgeschrittenere Anwendungsfälle bereitstellen. Sie können eine Zertifikatslebensdauer angeben (verwenden Sie cert-manager.io/duration Ingress-Anmerkung) deklarieren Sie manuell den allgemeinen Namen des Zertifikats (cert-manager.io/common-name ) und verwenden Sie DNS-Herausforderungen anstelle von HTTP. Die letztere Option kann in bestimmten Szenarien nützlich sein, z. B. wenn Sie ein Wildcard-Zertifikat erwerben möchten.

Die einfache Nutzung zum Schutz von Web-Apps und APIs sollte mit den oben gezeigten Ressourcen unverändert funktionieren. Die HTTP-Verifizierung funktioniert, indem der Ingress-Controller manipuliert wird, um einen temporären .well-known bereitzustellen URL, auf die Let’s Encrypt zugreifen kann. Wenn Ihre Domain unter dieser URL den richtigen Wert bereitstellt, vertraut Let’s Encrypt darauf, dass Sie die Kontrolle haben, und stellt das Zertifikat aus.


Docker
  1. So installieren und konfigurieren Sie Ansible unter Windows

  2. So installieren und konfigurieren Sie Nginx unter CentOS 7

  3. So installieren und konfigurieren Sie Redis unter Ubuntu 18.04

  4. So installieren und konfigurieren Sie Monit.

  5. So installieren und konfigurieren Sie Monit.

So installieren und konfigurieren Sie Redmine unter Debian 9

So installieren und konfigurieren Sie Kubernetes (k8s) unter Ubuntu 18.04 LTS

So installieren und konfigurieren Sie Kubernetes und Docker unter Ubuntu 18.04 LTS

So installieren und konfigurieren Sie Kubernetes unter Ubuntu

So installieren Sie Let’s Encrypt auf Nginx

So installieren und konfigurieren Sie Grafana