GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come installare Kubernetes Cert-Manager e configurare Let's Encrypt

Cert-Manager automatizza il provisioning dei certificati all'interno dei cluster Kubernetes. Fornisce una serie di risorse personalizzate per emettere certificati e allegarli ai servizi.

Uno dei casi d'uso più comuni è la protezione di app Web e API con certificati SSL di Let's Encrypt. Ecco come aggiungere Cert-Manager al tuo cluster, configurare un emittente di certificati Let's Encrypt e acquisire un certificato per i Pod esposti tramite un Ingress.

Installazione di Cert-Manager

Cert-Manager è più facile da installare utilizzando Helm. Helm è un gestore di pacchetti Kubernetes che ti consente di aggiungere applicazioni al tuo cluster utilizzando repository di grafici predefiniti. Assicurati di avere Helm installato e configurato con una connessione al tuo cluster Kubernetes.

Inizia aggiungendo il repository Jetstack alla tua installazione di Helm. Jetstack ha originariamente sviluppato Cert-Manager prima che fosse donato al CNCF.

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

Ora installa Cert-Manager nel tuo cluster:

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

Sostituisci il numero di versione mostrato sopra con l'ultima versione mostrata nella documentazione di Cert-Manager.

Il comando installerà Cert-Manager in un nuovo spazio dei nomi Kubernetes chiamato cert-manager . Il installCRDs l'impostazione aggiungerà le risorse Kubernetes personalizzate di Cert-Manager durante l'installazione. Funziona solo con Helm versione 3.2 e successive:se stai utilizzando una versione precedente, devi aggiungere manualmente le definizioni delle risorse con Kubectl:

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

Aggiunta del plug-in Kubectl

Cert-Manager ha un plug-in Kubectl che semplifica alcune attività di gestione comuni. Ti consente anche di verificare se Cert-Manager è attivo e pronto a soddisfare le richieste.

Installa il plugin scaricando il suo archivio ed estraendolo nella directory corretta:

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

Ora usa il plug-in per verificare che l'installazione di Cert-Manager funzioni:

kubectl cert-manager check api

Dovresti vedere il seguente output:

The cert-manager API is ready

Ora sei pronto per aggiungere un emittente per ottenere certificati da Let's Encrypt.

Creazione di un emittente di certificati

Gli emittenti e gli emittenti del cluster sono risorse che forniscono i certificati al tuo cluster. L'installazione di base di Cert-Manager creata finora non è in grado di emettere certificati. L'aggiunta di un emittente configurato per l'utilizzo di Let's Encrypt ti consente di acquisire dinamicamente nuovi certificati per i servizi nel tuo cluster.

Crea un file YAML nella tua directory di lavoro e chiamalo issuer.yml . Aggiungi il seguente contenuto:

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

È necessario sostituire l'indirizzo e-mail con la propria e-mail di contatto. Questo sarà incluso nei tuoi certificati. Let's Encrypt potrebbe anche inviarti un'e-mail all'indirizzo se ha bisogno di inviarti avvisi sui tuoi certificati.

Stiamo creando un ClusterIssuer poiché questi sono disponibili per tutte le risorse nel tuo cluster, indipendentemente dallo spazio dei nomi. Un Issuer standard è una risorsa con spazio dei nomi che può fornire solo certificati all'interno del proprio spazio dei nomi.

La nostra configurazione dell'emittente indica a Cert-Manager di ottenere i certificati dal server di staging Let's Encrypt. È una buona idea utilizzare l'ambiente di staging durante la configurazione dell'integrazione per evitare di raggiungere i severi limiti di velocità di produzione di Let's Encrypt.

Usa kubectl per aggiungere l'emittente al tuo cluster:

kubectl create -f issuer.yml

Ottenere un certificato

Ora puoi utilizzare il tuo emittente per acquisire un certificato per un servizio esposto tramite una risorsa Ingress. Cert-Manager monitora automaticamente le risorse Ingress e crea certificati utilizzando la configurazione nel loro tls campo. Devi solo aggiungere un'annotazione che denomina l'emittente o l'emittente del cluster che desideri utilizzare.

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

Questo file YAML definisce un Pod, un servizio e un ingresso che espone il servizio. Presuppone l'uso di nginx-ingress come controllore di ingresso. Il Pod esegue un container WordPress che sarà accessibile tramite HTTPS su example.com .

La presenza del cert-manager.io/cluster-issuer l'annotazione nella risorsa Ingress verrà rilevata da Cert-Manager. Utilizzerà il letsencrypt-staging emittente del cluster creato in precedenza per acquisire un certificato che copra i nomi host definiti nel tls.hosts di Ingress campo.

Utilizzo di Let's Encrypt in produzione

Dopo aver acquisito correttamente un certificato di staging, puoi migrare ai server di produzione Let's Encrypt. I certificati di staging sono validi ma non considerati attendibili dai browser, quindi è necessario ottenere una sostituzione di produzione prima di rendere attivo il tuo sito.

È meglio aggiungere un emittente del cluster separato per il server di produzione. Puoi quindi fare riferimento all'emittente appropriato in ciascuna delle tue risorse Ingress, a seconda che siano pronte per la produzione.

Copia la configurazione dell'emittente mostrata sopra e cambia il name campi in letsencrypt-production . Quindi, sostituisci l'URL del server con il valore mostrato di seguito:

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

Crea il nuovo emittente nel tuo cluster:

kubectl create -f issuer-production.yml

Aggiorna la tua risorsa Ingress per richiedere un certificato di produzione modificando il valore di cert-manager.io/cluster-issuer annotazione a letsencrypt-production (o il nome che hai assegnato al tuo emittente di produzione). Usa kubectl per applicare la modifica:

kubectl apply -f my-ingress.yaml

Ora dovresti avere HTTPS completamente funzionante abilitato per la tua risorsa Ingress. Cert-Manager gestirà automaticamente i tuoi certificati e li rinnoverà prima che scadano.

Aggiornamento di Cert-Manager

Le versioni di Cert-Manager di solito supportano gli aggiornamenti sul posto con Helm:

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

I certificati restano disponibili durante gli aggiornamenti ma il processo di rinnovo verrà interrotto.

Sebbene gli aggiornamenti siano ora normalmente semplici, dovresti sempre rivedere le note di rilascio per identificare potenziali modifiche che devi apportare. Ciò è particolarmente importante se stai aggiornando Kubernetes o passando attraverso diverse versioni di Cert-Manager. Se stai ancora utilizzando una versione precedente di Kubernetes, potresti trovarti su una versione obsoleta di Cert-Manager che richiede un intervento manuale significativo per essere aggiornata.

Riepilogo

Let's Encrypt può essere facilmente aggiunto a un cluster Kubernetes utilizzando Cert-Manager. Devi installare Cert-Manager con Helm, creare un emittente che utilizzi l'API Let's Encrypt, quindi fare riferimento a tale emittente nelle tue risorse Ingress.

Puoi fornire a Cert-Manager la tua configurazione per casi d'uso più avanzati. Puoi specificare una durata del certificato (usa il cert-manager.io/duration Annotazione in ingresso), dichiarare manualmente il nome comune del certificato (cert-manager.io/common-name ) e usa le sfide DNS invece di HTTP. Quest'ultima opzione può essere utile in scenari specifici, ad esempio quando si desidera acquisire un certificato jolly.

L'utilizzo semplice per proteggere le app Web e le API dovrebbe funzionare così come avviene utilizzando le risorse mostrate sopra. La verifica HTTP funziona manipolando il controller Ingress per fornire un .well-known temporaneo URL a cui Let's Encrypt può accedere. Se il tuo dominio fornisce il valore corretto a quell'URL, Let's Encrypt si fida del tuo controllo ed emette il certificato.


Docker
  1. Come installare e configurare Ansible su Windows

  2. Come installare e configurare Nginx su CentOS 7

  3. Come installare e configurare Redis su Ubuntu 18.04

  4. Come installare e configurare Monit.

  5. Come installare e configurare Monit.

Come installare e configurare Redmine su Debian 9

Come installare e configurare Kubernetes (k8s) su Ubuntu 18.04 LTS

Come installare e configurare Kubernetes e Docker su Ubuntu 18.04 LTS

Come installare e configurare Kubernetes su Ubuntu

Come installare Let's Encrypt su Nginx

Come installare e configurare Grafana