Ako pitate iskusnog, mudrog inženjera šta misli o cert-manageru i zašto ga svi koriste, onda će specijalist uzdahnuti, zagrliti ga u povjerenju i umorno reći: „Svi ga koriste, jer nema razumnih alternativa. Naši miševi plaču, kuckaju, ali nastavljaju da žive sa ovim kaktusom. Zašto volimo? Jer radi. Zašto se ne volimo? Zato što stalno izlaze nove verzije koje koriste nove funkcije. I morate ažurirati klaster iznova i iznova. I stare verzije prestaju da rade, jer postoji zavera i veliki misteriozni šamanizam.
Ali programeri tvrde da sa cert-manager 1.0 sve će se promijeniti.
Hoćemo li vjerovati?
Cert-manager je domaći Kubernetes kontroler upravljanja certifikatima. Može se koristiti za izdavanje certifikata iz različitih izvora: Let's Encrypt, HashiCorp Vault, Venafi, potpisni i samopotpisani parovi ključeva. Takođe vam omogućava da održavate ključeve ažurnim do datuma isteka, a takođe pokušava da automatski obnovi sertifikate u određeno vreme pre nego što isteknu. Cert-manager je baziran na kube-lego, a koristio je i neke trikove iz drugih sličnih projekata kao što je kube-cert-manager.
Bilješke o izdanju
Sa verzijom 1.0, stavili smo znak povjerenja za tri godine razvoja projekta cert-manager. Za to vrijeme značajno je evoluirao u funkcionalnosti i stabilnosti, ali najviše u zajednici. Danas vidimo da ga mnogi ljudi koriste kako bi osigurali svoje Kubernetes klastere, kao i da ga koriste u različitim dijelovima ekosistema. Puno grešaka je ispravljeno u posljednjih 16 izdanja. A ono što je trebalo razbiti je slomljeno. Nekoliko posjeta radi rada 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.
Sa izdanjem 1.0, zvanično izjavljujemo da je cert-manager zreo projekat. Također obećavamo da ćemo zadržati naš API kompatibilan v1
.
Veliko hvala svima koji su nam pomogli da postanemo cert-manager sve ove tri godine! 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; -
tim
kubectl cert-manager status
, za pomoć pri analizi problema; -
Korištenje najnovijih stabilnih Kubernetes API-ja;
-
Poboljšano evidentiranje;
-
ACME poboljšanja.
Obavezno pročitajte napomene o ažuriranju 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 se nadovezuje na ovo sa API-jem v1
. Ovaj API je naš prvi stabilan, u isto vrijeme smo već dali garancije kompatibilnosti, ali sa API-jem v1
obećavamo da ćemo održati kompatibilnost u godinama koje dolaze.
Izvršene promjene (napomena: naši alati za konverziju će se pobrinuti za sve za vas):
Certifikat:
-
emailSANs
sada zoveemailAddresses
-
uriSANs
-uris
Ove promjene dodaju kompatibilnost s drugim SAN-ovima (nazivi subjekata, cca. prevodilac), kao i sa Go API-jem. Uklanjamo ovaj termin iz našeg API-ja.
Ažuriraj
Ako koristite Kubernetes 1.16+, pretvaranje web-hukvica omogućit će vam da istovremeno i neprimetno radite s verzijama API-ja v1alpha2
, v1alpha3
, v1beta1
и v1
. Uz njih, možete koristiti novu verziju API-ja bez promjene ili ponovnog raspoređivanja starih resursa. Toplo preporučujemo nadogradnju vaših manifesta na API v1
, jer će prethodne verzije uskoro biti zastarjele. Korisnici legacy
verzije cert-manager će i dalje imati pristup samo v1
, koraci nadogradnje se mogu pronaći
naredba statusa kubectl cert-manager
Uz nova poboljšanja u našem proširenju za kubectl
postalo je lakše istražiti probleme vezane za neizdavanje potvrda. kubectl cert-manager status
sada daje mnogo više informacija o tome šta se dešava sa sertifikatima i takođe pokazuje fazu izdavanja sertifikata.
Nakon instaliranja ekstenzije, možete pokrenuti kubectl cert-manager status certificate <имя-сертификата>
, koji će tražiti certifikat sa navedenim imenom i svim povezanim resursima, kao što su CertificateRequest, Secret, Issuer i Order and Challenges u slučaju certifikata od ACME.
Primjer otklanjanja grešaka u certifikatu 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 certifikata 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. Ovo, i naša podrška za Kubernetes verzije do 1.11, značile su da trebamo podržati naslijeđe apiextensions.k8s.io/v1beta1
i za naše CRD-ove admissionregistration.k8s.io/v1beta1
za naše webhookove. Oni su sada zastarjeli i bit će uklonjeni u Kubernetesu iz verzije 1.22. Sa našom 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 da nudimo podršku v1beta1
u našem legacy
verzije.
Poboljšano evidentiranje
U ovom izdanju ažurirali smo biblioteku evidentiranja na klog/v2
, koji se koristi u Kubernetesu 1.19. Također pregledavamo svaki časopis koji pišemo kako bismo bili sigurni da mu je dodijeljen odgovarajući nivo. Ovim smo se rukovodili Error
(nivo 0), koji ispisuje samo važne greške i završava sa Trace
(nivo 5) koji će vam pomoći da tačno znate šta se dešava. Ovom promjenom smo smanjili broj dnevnika ako vam nisu potrebne informacije o otklanjanju grešaka kada pokrećete cert-manager.
Savjet: cert-manager radi na nivou 2 prema zadanim postavkama (Info
), ovo možete nadjačati koristeći global.logLevel
Helmchart.
Napomena: Pregled dnevnika je posljednje sredstvo prilikom rješavanja problema. Za više informacija pogledajte našu
Urednička n.b.: Da biste saznali više o tome kako sve to funkcionira pod haubom Kubernetes-a, dobili vrijedne savjete od nastavnika praktičara, kao i kvalitetnu tehničku podršku, možete sudjelovati u online intenzivima
ACME poboljšanja
Najčešća upotreba cert-managera je vjerovatno povezana sa izdavanjem certifikata iz Let's Encrypt koristeći ACME. Verzija 1.0 je značajna po korištenju povratnih informacija zajednice za dodavanje dva mala, ali važna poboljšanja našem ACME izdavatelju.
Onemogućite generiranje ključeva računa
Ako koristite ACME certifikate u velikim količinama, vjerovatno ćete koristiti isti račun na više klastera, tako da će se 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 je bio prilično pogrešan, jer je cert-manager pokušao biti od pomoći i sretno je kreirao novi ključ računa ako ga nije pronašao. Zato smo dodali disableAccountKeyGeneration
da vas zaštiti od ovakvog ponašanja ako ovu opciju postavite na true
- cert-manager neće generirati ključ i upozorit će vas da mu nije dostavljen ključ računa.
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt
spec:
acme:
privateKeySecretRef:
name: example-issuer-account-key
disableAccountKeyGeneration: false
Preferred Chain
29. septembar Hajde da šifrujemo ISRG Root
. Unakrsno potpisani certifikati bit će zamijenjeni sa Identrust
. Ova promjena ne zahtijeva promjene postavki upravitelja certifikata, svi ažurirani ili novi certifikati izdani nakon ovog datuma će koristiti novi korijenski CA.
Let's Encrypt već potpisuje certifikate sa ovim CA i nudi ih kao "alternatni lanac certifikata" putem ACME-a. U ovoj verziji cert-managera moguće je podesiti pristup ovim lancima u postavkama izdavaoca. U parametru preferredChain
možete odrediti naziv CA koji se koristi, s kojim će se izdati certifikat. Ako je CA certifikat koji odgovara zahtjevu dostupan, izdat će vam certifikat. Imajte na umu da je ovo poželjna opcija, ako se ništa ne pronađe, izdat će se standardni certifikat. Ovo će osigurati da ćete i dalje obnoviti svoj certifikat nakon brisanja alternativnog lanca na strani ACME izdavaoca.
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 želite da 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 korijenski CA uskoro biti zastario, Let's Encrypt će zadržati ovaj lanac aktivnim do 29. septembra 2021.
izvor: www.habr.com