cert-manager 1.0 objavljen

Pitate li iskusnog, mudrog inženjera što misli o cert-manageru i zašto ga svi koriste, stručnjak će uzdahnuti, povjerljivo ga zagrliti i umorno reći: „Svi ga koriste, jer zdrave alternative nema. Naši miševi plaču, bockaju, ali nastavljaju živjeti s ovim kaktusom. Zašto volimo? Jer djeluje. Zašto ne volimo? Budući da stalno izlaze nove verzije koje koriste nove značajke. I morate uvijek iznova ažurirati klaster. I stare verzije prestaju raditi, jer postoji zavjera i veliki tajanstveni šamanizam.

Ali programeri to tvrde cert-manager 1.0 sve će se promijeniti.

Hoćemo li vjerovati?

cert-manager 1.0 objavljen

Cert-manager je izvorni kontroler upravljanja Kubernetes certifikatima. Može se koristiti za izdavanje certifikata iz različitih izvora: Let's Encrypt, HashiCorp Vault, Venafi, potpisivanje i samopotpisani parovi ključeva. Također vam omogućuje da ključeve održavate ažuriranima prema datumu isteka, a također pokušava automatski obnoviti certifikate u određeno vrijeme prije nego što isteknu. Cert-manager se temelji na kube-lego i također je koristio neke trikove iz drugih sličnih projekata kao što je kube-cert-manager.

Bilješke o izdanju

S verzijom 1.0 stavili smo oznaku povjerenja za tri godine razvoja projekta cert-manager. Tijekom tog vremena značajno je evoluirao u funkcionalnosti i stabilnosti, ali najviše u zajednici. Danas vidimo da ga mnogi ljudi koriste za osiguranje svojih Kubernetes klastera, kao i za njegovu implementaciju u različite dijelove ekosustava. Mnogo je grešaka ispravljeno u posljednjih 16 izdanja. I ono što je trebalo slomiti je slomljeno. Nekoliko posjeta radu s API-jem poboljšalo je njegovu interakciju s korisnicima. Riješili smo 1500 problema na GitHubu s više zahtjeva za povlačenjem od 253 člana zajednice.

S izdanjem 1.0, službeno izjavljujemo da je cert-manager zreo projekt. Također obećavamo da ćemo naš API održati kompatibilnim v1.

Veliko hvala svima koji su nam sve ove tri godine pomogli da napravimo cert-manager! Neka verzija 1.0 bude prva od mnogih velikih stvari koje dolaze.

Izdanje 1.0 je stabilno izdanje s nekoliko prioritetnih područja:

  • v1 API;

  • Momčad kubectl cert-manager status, za pomoć pri analizi problema;

  • Korištenje najnovijih stabilnih Kubernetes API-ja;

  • Poboljšano bilježenje;

  • ACME poboljšanja.

Svakako pročitajte napomene o nadogradnji prije nadogradnje.

API v1

Verzija v0.16 radila je s API-jem v1beta1. Ovo je dodalo neke strukturne promjene i također poboljšalo dokumentaciju API polja. Verzija 1.0 nadovezuje se na sve ovo s API-jem v1. Ovaj API je naš prvi stabilan, ujedno smo već dali garancije kompatibilnosti, ali s API-jem v1 Obećavamo da ćemo održavati kompatibilnost godinama koje dolaze.

Izvršene izmjene (napomena: naši alati za pretvorbu pobrinut će se za sve umjesto vas):

potvrda:

  • emailSANs sada zove emailAddresses

  • uriSANs - uris

Ove promjene dodaju kompatibilnost s drugim SAN-ovima (alternativna imena predmeta, cca. prevoditelj), kao i s Go API-jem. Uklanjamo ovaj izraz iz našeg API-ja.

Ažurirati

Ako koristite Kubernetes 1.16+, pretvaranje webdojavnika omogućit će vam istovremeni i neprimjetan rad s verzijama API-ja v1alpha2, v1alpha3, v1beta1 и v1. S njima možete koristiti novu verziju API-ja bez mijenjanja ili ponovnog postavljanja starih resursa. Toplo preporučujemo nadogradnju manifesta na API v1, jer će prethodne verzije uskoro biti zastarjele. Korisnici legacy verzije cert-managera i dalje će imati samo pristup v1, možete pronaći korake nadogradnje здесь.

naredba statusa kubectl cert-manager

S novim poboljšanjima u našem proširenju za kubectl postalo je lakše istražiti probleme povezane s neizdavanjem certifikata. kubectl cert-manager status sada pruža puno više informacija o tome što se događa s certifikatima, a također pokazuje i fazu u kojoj se certifikat izdaje.

Nakon instaliranja proširenja, možete pokrenuti kubectl cert-manager status certificate <имя-сертификата>, koji će tražiti certifikat s navedenim nazivom i sve povezane resurse, kao što su CertificateRequest, Secret, Issuer i Order and Challenges u slučaju certifikata iz ACME-a.

Primjer otklanjanja pogrešaka certifikata koji još nije spreman:

$ kubectl cert-manager status certificate acme-certificate

Name: acme-certificate
Namespace: default
Created at: 2020-08-21T16:44:13+02:00
Conditions:
  Ready: False, Reason: DoesNotExist, Message: Issuing certificate as Secret does not exist
  Issuing: True, Reason: DoesNotExist, Message: Issuing certificate as Secret does not exist
DNS Names:
- example.com
Events:
  Type    Reason     Age   From          Message
  ----    ------     ----  ----          -------
  Normal  Issuing    18m   cert-manager  Issuing certificate as Secret does not exist
  Normal  Generated  18m   cert-manager  Stored new private key in temporary Secret resource "acme-certificate-tr8b2"
  Normal  Requested  18m   cert-manager  Created new CertificateRequest resource "acme-certificate-qp5dm"
Issuer:
  Name: acme-issuer
  Kind: Issuer
  Conditions:
    Ready: True, Reason: ACMEAccountRegistered, Message: The ACME account was registered with the ACME server
error when finding Secret "acme-tls": secrets "acme-tls" not found
Not Before: <none>
Not After: <none>
Renewal Time: <none>
CertificateRequest:
  Name: acme-certificate-qp5dm
  Namespace: default
  Conditions:
    Ready: False, Reason: Pending, Message: Waiting on certificate issuance from order default/acme-certificate-qp5dm-1319513028: "pending"
  Events:
    Type    Reason        Age   From          Message
    ----    ------        ----  ----          -------
    Normal  OrderCreated  18m   cert-manager  Created Order resource default/acme-certificate-qp5dm-1319513028
Order:
  Name: acme-certificate-qp5dm-1319513028
  State: pending, Reason:
  Authorizations:
    URL: https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/97777571, Identifier: example.com, Initial State: pending, Wildcard: false
Challenges:
- Name: acme-certificate-qp5dm-1319513028-1825664779, Type: DNS-01, Token: J-lOZ39yNDQLZTtP_ZyrYojDqjutMAJOxCL1AkOEZWw, Key: U_W3gGV2KWgIUonlO2me3rvvEOTrfTb-L5s0V1TJMCw, State: pending, Reason: error getting clouddns service account: secret "clouddns-accoun" not found, Processing: true, Presented: false

Naredba vam također može pomoći da saznate više o sadržaju certifikata. Detaljan primjer za certifikat koji izdaje 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:  <none>
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
[...]

Korištenje najnovijih stabilnih Kubernetes API-ja

Cert-manager je bio jedan od prvih koji je implementirao Kubernetes CRD-ove. To, kao i naša podrška za Kubernetes verzije do 1.11, značilo je da moramo podržati naslijeđe apiextensions.k8s.io/v1beta1 i za naše CRD-ove admissionregistration.k8s.io/v1beta1 za naše webhookove. Sada su zastarjeli i bit će uklonjeni u Kubernetesu od verzije 1.22. S našim 1.0 sada nudimo punu podršku apiextensions.k8s.io/v1 и admissionregistration.k8s.io/v1 za Kubernetes 1.16 (gdje su dodani) i novije. Za korisnike prethodnih verzija nastavljamo nuditi podršku v1beta1 u našem legacy verzije.

Poboljšano bilježenje

U ovoj verziji ažurirali smo biblioteku zapisivanja na klog/v2, korišten u Kubernetesu 1.19. Također pregledavamo svaki časopis koji pišemo kako bismo bili sigurni da mu je dodijeljena odgovarajuća razina. Time smo se vodili smjernice iz Kubernetesa. Ima ih pet (u stvari - šest, cca. prevoditelj) razine zapisivanja počevši od Error (razina 0), koja ispisuje samo važne pogreške, a završava s Trace (razina 5), ​​koji će vam pomoći da saznate što se točno događa. Ovom smo promjenom smanjili broj zapisnika ako ne trebate informacije o otklanjanju pogrešaka prilikom pokretanja cert-managera.

Savjet: cert-manager radi na razini 2 prema zadanim postavkama (Info), ovo možete nadjačati pomoću global.logLevel u Helmovoj karti.

Napomena: Pregledavanje zapisa posljednje je sredstvo pri rješavanju problema. Za više informacija provjerite naš rukovodstvo.

Bilješka urednika: Da biste saznali više o tome kako sve to funkcionira ispod haube Kubernetesa, dobili dragocjene savjete od učitelja praktičara, kao i kvalitetnu tehničku podršku, možete sudjelovati u online intenzivima Kubernetes baza, koji će se održati od 28. do 30. rujna i Kubernetes Megakoji će se održati od 14. do 16. listopada.

ACME poboljšanja

Najčešća upotreba cert-managera vjerojatno je povezana s izdavanjem certifikata od Let's Encrypt koristeći ACME. Verzija 1.0 poznata je po korištenju povratnih informacija zajednice za dodavanje dva mala, ali važna poboljšanja našem ACME izdavatelju.

Onemogući generiranje ključa računa

Ako koristite ACME certifikate u velikim količinama, vjerojatno ćete koristiti isti račun na više klastera, pa će se vaša ograničenja izdavanja certifikata primjenjivati ​​na sve njih. Ovo je već bilo moguće u cert-manageru prilikom kopiranja tajne navedene u privateKeySecretRef. Ovaj slučaj upotrebe bio je dosta pogrešan jer je cert-manager pokušao biti od pomoći i rado je stvorio novi ključ računa ako ga nije mogao pronaći. Zato smo dodali disableAccountKeyGenerationkako bismo vas zaštitili od ovakvog ponašanja postavljanjem ove opcije na true - cert-manager neće generirati ključ i upozorit će vas da nije dobio ključ računa.

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

Preferirani lanac

29. rujna Let's Encrypt pomaknut će se na svoj korijenski CA ISRG Root. Unakrsno potpisani certifikati bit će zamijenjeni sa Identrust. Ova promjena ne zahtijeva promjene u postavkama upravitelja certifikata, svi ažurirani ili novi certifikati izdani nakon ovog datuma koristit će novi korijenski CA.

Let's Encrypt već potpisuje certifikate s ovim CA-om i nudi ih kao "alternativni lanac certifikata" putem ACME-a. U ovoj verziji cert-managera moguće je podesiti pristup ovim lancima u postavkama izdavatelja. U parametru preferredChain možete odrediti naziv CA koji se koristi, s kojim će se certifikat izdati. Ako je dostupan CA certifikat koji odgovara zahtjevu, izdat će vam certifikat. Imajte na umu da je ovo preferirana opcija, ako se ništa ne pronađe, bit će izdana zadana potvrda. Ovo će osigurati da ćete i dalje obnoviti svoj certifikat nakon brisanja alternativnog lanca na strani izdavatelja ACME-a.

Već danas možete dobiti certifikate potpisane od strane ISRG Root, Dakle:

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

Ako radije napustite lanac IdenTrust - postavite ovu opciju na 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"

Imajte na umu da će ovaj root CA uskoro biti obustavljen, Let's Encrypt će ovaj lanac držati aktivnim do 29. rujna 2021.

Izvor: www.habr.com

Dodajte komentar