È uscito cert-manager 1.0

Se chiedi a un ingegnere esperto e saggio cosa pensa di cert-manager e perché tutti lo usano, il tecnico sospirerà, ti abbraccerà affettuosamente e dirà stancamente: «Tutti lo usano perché non ci sono alternative valide. I nostri dolori piangono, si pungono, ma continuano a vivere con questo cactus. Perché ci piace? Perché funziona. Perché non ci piace? Perché escono costantemente nuove versioni che introducono nuove funzionalità. E dobbiamo aggiornare il cluster ripetutamente. Le vecchie versioni smettono di funzionare, perché c'è una cospirazione e un grande misterioso sciamanesimo».

Ma gli sviluppatori assicurano che con cert-manager 1.0 tutto cambierà.

Ci crederemo?

È uscito cert-manager 1.0

Cert-manager è il controllore nativo per la gestione dei certificati Kubernetes. Con esso è possibile emettere certificati da varie fonti: Let’s Encrypt, HashiCorp Vault, Venafi, coppie di chiavi per la firma e auto-firmati. Consente inoltre di mantenere le chiavi aggiornate in base alla validità e cerca di aggiornare automaticamente i certificati nel tempo stabilito prima della loro scadenza. Cert-manager è basato su kube-lego e ha utilizzato alcune tecniche da altri progetti simili, come kube-cert-manager.

Note di rilascio

Con la versione 1.0, poniamo un segno di fiducia dopo tre anni di sviluppo del progetto cert-manager. Nel corso di questo tempo, ha fatto notevoli progressi in funzionalità e stabilità, ma soprattutto nella comunità. Oggi vediamo molte persone utilizzarlo per proteggere i propri cluster Kubernetes e implementarlo in diverse parti dell'ecosistema. Negli ultimi 16 rilasci, è stato corretto un numero significativo di bug. E ciò che doveva essere rotto è stato rotto. Diverse modifiche all'API hanno migliorato l'interazione con gli utenti. Abbiamo risolto 1500 problemi su GitHub con un numero ancora maggiore di richieste di pull da 253 membri della comunità.

Con il rilascio della versione 1.0, dichiariamo ufficialmente che cert-manager è un progetto maturo. Promettiamo anche di mantenere la compatibilità della nostra API. v1.

Un enorme grazie a tutti coloro che ci hanno aiutato a rendere cert-manager ciò che è stato in questi tre anni! Che la versione 1.0 sia il primo di molti grandi traguardi futuri.

Il rilascio della versione 1.0 è una versione stabile con diverse aree prioritarie:

  • v1 API;

  • Team kubectl cert-manager status, per aiutare nell'analisi dei problemi;

  • Utilizzo delle API stabili più recenti di Kubernetes;

  • Migliore registrazione;

  • Miglioramenti per ACME.

Prima di aggiornare, leggi attentamente le note di rilascio.

API v1

La versione v0.16 funzionava con l'API v1beta1. Questo ha introdotto alcune modifiche strutturali e migliorato la documentazione sui campi dell'API. La versione 1.0 si basa su tutto ciò con l'API v1. Questa API è la nostra prima versione stabile, e nel frattempo abbiamo già fornito garanzie di compatibilità, ma con l'API v1 promettiamo di mantenere la compatibilità per anni a venire.

Modifiche apportate (nota: i nostri strumenti di conversione si prenderanno cura di tutto per te):

Certificato:

  • emailSANs ora si chiama emailAddresses

  • uriSANsuris

Queste modifiche aggiungono compatibilità con altri SAN (subject alt names, nota del traduttore), così come con Go API. Rimuoviamo questo termine dalla nostra API.

Aggiornamento

Se stai utilizzando Kubernetes 1.16+, i webhook di conversione ti consentiranno di lavorare contemporaneamente e senza soluzione di continuità con le versioni dell'API v1alpha2, v1alpha3, v1beta1 e v1. Con questi potrai utilizzare la nuova versione dell'API senza modificare o ridistribuire le tue vecchie risorse. Ti consigliamo vivamente di aggiornare i manifesti all'API v1, poiché le versioni precedenti saranno presto dichiarate obsolete. Gli utenti legacy della versione cert-manager avranno ancora accesso solo a v1, i passaggi per l'aggiornamento possono essere trovati qui.

Il comando kubectl cert-manager status

Con i nuovi miglioramenti nel nostro addon a kubectl è diventato più semplice esplorare i problemi legati al mancato rilascio dei certificati. kubectl cert-manager status ora fornisce molte più informazioni su ciò che sta accadendo con i certificati e mostra anche le fasi di emissione del certificato.

Dopo aver installato l'addon, puoi eseguire kubectl cert-manager status certificate, che comporterà la ricerca di un certificato con il nome specificato e di qualsiasi risorsa correlata, come CertificateRequest, Secret, Issuer, nonché Order e Challenges nel caso si utilizzino certificati da ACME.

Esempio di debug di un certificato non ancora pronto:

$ kubectl cert-manager status certificate acme-certificate

Nome: acme-certificate
Namespace: default
Creato il: 2020-08-21T16:44:13+02:00
Condizioni:
  Pronto: False, Motivo: DoesNotExist, Messaggio: Emissione del certificato poiché il Secret non esiste
  Emissione: True, Motivo: DoesNotExist, Messaggio: Emissione del certificato poiché il Secret non esiste
Nomi DNS:
- example.com
Eventi:
  Tipo    Motivo       Età   Da            Messaggio
  ----    ------       ----  ----          -------
  Normale Emissione    18m   cert-manager  Emissione del certificato poiché il Secret non esiste
  Normale Generato     18m   cert-manager  Nuova chiave privata memorizzata nel Secret temporaneo "acme-certificate-tr8b2"
  Normale Richiesto     18m   cert-manager  Creata nuova risorsa CertificateRequest "acme-certificate-qp5dm"
Emittente:
  Nome: acme-issuer
  Tipo: Emittente
  Condizioni:
    Pronto: True, Motivo: ACMEAccountRegistered, Messaggio: L'account ACME è stato registrato con il server ACME
errore nel trovare il Secret "acme-tls": secrets "acme-tls" non trovato
Non Prima: 
Non Dopo: 
Tempo di Rinnovo: 
CertificateRequest:
  Nome: acme-certificate-qp5dm
  Namespace: default
  Condizioni:
    Pronto: False, Motivo: Pending, Messaggio: In attesa dell'emissione del certificato dall'ordine default/acme-certificate-qp5dm-1319513028: "pending"
  Eventi:
    Tipo    Motivo         Età   Da            Messaggio
    ----    ------         ----  ----          -------
    Normale OrdineCreato  18m   cert-manager  Creata risorsa Ordine default/acme-certificate-qp5dm-1319513028
Ordine:
  Nome: acme-certificate-qp5dm-1319513028
  Stato: pending, Motivo:
  Autorizzazioni:
    URL: https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/97777571, Identificatore: example.com, Stato Iniziale: pending, Wildcard: false
Sfide:
- Nome: acme-certificate-qp5dm-1319513028-1825664779, Tipo: DNS-01, Token: J-lOZ39yNDQLZTtP_ZyrYojDqjutMAJOxCL1AkOEZWw, Chiave: U_W3gGV2KWgIUonlO2me3rvvEOTrfTb-L5s0V1TJMCw, Stato: pending, Motivo: errore nel recuperare l'account di servizio clouddns: secret "clouddns-accoun" non trovato, Elaborazione: true, Presentato: false

Il team può anche aiutare a scoprire maggiori dettagli sul contenuto del certificato. Ecco un esempio di dettagli per un certificato emesso da Letsencrypt:

$ kubectl cert-manager status certificate example
Name: example
[...]
Secret:
  Name: example
  Issuer Country: US
  Issuer Organisation: Let's Encrypt
  Issuer Common Name: Let's Encrypt Authority X3
  Key Usage: Digital Signature, Key Encipherment
  Extended Key Usages: Server Authentication, Client Authentication
  Public Key Algorithm: RSA
  Signature Algorithm: SHA256-RSA
  Subject Key ID: 65081d98a9870764590829b88c53240571997862
  Authority Key ID: a84a6a63047dddbae6d139b7a64565eff3a8eca1
  Serial Number: 0462ffaa887ea17797e0057ca81d7ba2a6fb
  Events:  
Not Before: 2020-06-02T04:29:56+02:00
Not After: 2020-08-31T04:29:56+02:00
Renewal Time: 2020-08-01T04:29:56+02:00
[...]

Utilizzo delle ultime API stabili di Kubernetes

Cert-manager è stato uno dei primi ad implementare le CRD di Kubernetes. Questo, insieme al nostro supporto per le versioni di Kubernetes fino alla 1.11, ha comportato la necessità di supportare la versione obsoleta apiextensions.k8s.io/v1beta1 per le nostre CRD, così come admissionregistration.k8s.io/v1beta1 per i nostri webhook. Attualmente, queste sono obsolete e verranno rimosse in Kubernetes a partire dalla versione 1.22. Con la nostra 1.0 offriamo ora il pieno supporto apiextensions.k8s.io/v1 e admissionregistration.k8s.io/v1 per Kubernetes 1.16 (dove sono state aggiunte) e versioni successive. Per gli utenti delle versioni precedenti continuiamo a offrire supporto v1beta1 nella nostra legacy versione.

Migliorato il logging

In questa versione abbiamo aggiornato la libreria per il logging a klog/v2, utilizzata in Kubernetes 1.19. Controlliamo anche ogni log che scriviamo per assegnargli il livello appropriato. Ci siamo basati su una guida di Kubernetes. Ci sono cinque (in realtà sei, nota del traduttore) livelli di logging, a partire da Error (livello 0), che mostra solo errori critici, fino a Trace (livello 5), che aiuta a capire esattamente cosa sta succedendo. Con questa modifica abbiamo ridotto il numero di log, se non è necessaria l'informazione di debug durante l'uso del cert-manager.

Suggerimento: per impostazione predefinita, il cert-manager opera a livello 2 (Info), puoi sovrascriverlo utilizzando global.logLevel nel chart Helm.

Nota: la visualizzazione dei log è l'ultima risorsa nella risoluzione dei problemi. Per ulteriori informazioni, consulta il nostro guida.

N.B. editor: Per scoprire di più su come funziona tutto questo a livello interno in Kubernetes, ricevere preziosi suggerimenti da esperti pratici e anche un supporto tecnico di qualità, puoi partecipare agli intensivi online Base di Kubernetes, che si svolgerà dal 28 al 30 settembre, e Kubernetes Mega, che si terrà dal 14 al 16 ottobre.

Miglioramenti ACME

L'uso più comune di cert-manager è legato all'emissione di certificati da Let’s Encrypt utilizzando ACME. La versione 1.0 è notevole per l'uso di feedback dalla comunità per aggiungere due piccoli, ma importanti miglioramenti al nostro emittente ACME.

Disabilita la creazione della chiave dell'account

Se utilizzi certificati ACME su larga scala, probabilmente stai usando lo stesso account su più cluster, quindi i tuoi limiti di emissione dei certificati si applicheranno a tutti. Questo era già possibile in cert-manager copiando il segreto specificato in privateKeySecretRef. Questo uso era piuttosto problematico, poiché cert-manager cercava di essere utile e creava felicemente una nuova chiave dell'account se non la trovava. Pertanto, abbiamo aggiunto disableAccountKeyGeneration, per proteggerti da questo comportamento, se imposti questo parametro su true — cert-manager non creerà la chiave e ti avviserà che non è stata fornita la chiave dell'account.

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt
spec:
  acme:
    privateKeySecretRef:
      name: example-issuer-account-key
    disableAccountKeyGeneration: false

Catena preferita

29 settembre Let’s Encrypt passerà al proprio centro di certificazione root ISRG Root. I certificati con firme incrociate verranno sostituiti da Identrust. Questa modifica non richiede modifiche nelle impostazioni di cert-manager; tutti i certificati aggiornati o nuovi emessi dopo questa data utilizzeranno il nuovo CA root.

Let’s Encrypt sta già firmando certificati con questo CA e li offre come "catena di certificati alternativa" tramite ACME. In questa versione di cert-manager è disponibile la possibilità di impostare l'accesso a queste catene nelle impostazioni dell'emittente. Nel parametro preferredChain puoi specificare il nome del CA utilizzato per emettere il certificato. Se sarà disponibile un certificato CA corrispondente alla richiesta, verrà emesso il certificato. Tieni presente che questa è l'opzione preferita; se nulla verrà trovato, verrà emesso un certificato di default. Questo garantirà che tu possa comunque aggiornare il tuo certificato dopo la rimozione della catena alternativa dal lato dell'emittente ACME.

Oggi è già possibile ricevere certificati firmati ISRG Root, come:

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    preferredChain: "ISRG Root X1"

Se preferisci mantenere la catena IdenTrust — imposta questo parametro su DST Root CA X3:

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    preferredChain: "DST Root CA X3"

Si prega di notare che questo centro di certificazione radice andrà in pensione a breve; Let’s Encrypt manterrà attiva questa catena fino al 29 settembre 2021.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster