Ja pajautÄsi pieredzÄjuÅ”am, gudram inženierim, ko viÅÅ” domÄ par sert-menedžeri un kÄpÄc visi to lieto, tad speciÄlists nopÅ«tÄ«sies, pÄrliecÄ«bÄ apskauj un noguruÅ”i teiks: āLieto visi, jo prÄtÄ«gu alternatÄ«vu nav. MÅ«su peles raud, dur, bet turpina dzÄ«vot kopÄ ar Å”o kaktusu. KÄpÄc mÄs mÄ«lam? Jo tas darbojas. KÄpÄc mÄs nemÄ«lam? TÄ kÄ nepÄrtraukti iznÄk jaunas versijas, kurÄs tiek izmantotas jaunas funkcijas. Un jums ir jÄatjaunina klasteris atkal un atkal. Un vecÄs versijas pÄrstÄj darboties, jo ir sazvÄrestÄ«ba un liels noslÄpumains Å”amanisms.
Bet izstrÄdÄtÄji to apgalvo Cert-Manager 1.0 viss mainÄ«sies.
Vai mÄs ticÄsim?
Cert-manager ir vietÄjais Kubernetes sertifikÄtu pÄrvaldÄ«bas kontrolieris. To var izmantot sertifikÄtu izsniegÅ”anai no dažÄdiem avotiem: Let's Encrypt, HashiCorp Vault, Venafi, parakstÄ«Å”anas un paÅ”parakstÄ«tiem atslÄgu pÄriem. Tas arÄ« ļauj jums atjauninÄt atslÄgas pÄc derÄ«guma termiÅa beigÄm, kÄ arÄ« mÄÄ£ina automÄtiski atjaunot sertifikÄtus noteiktÄ laikÄ pirms to derÄ«guma termiÅa beigÄm. Cert-manager pamatÄ ir kube-lego, un tas ir izmantojis arÄ« dažus trikus no citiem lÄ«dzÄ«giem projektiem, piemÄram, kube-cert-manager.
Izlaiduma piezīmes
Ar versiju 1.0 mÄs uzliekam uzticÄ«bas zÄ«mi trÄ«s gadus ilgam sertifikÄtu pÄrvaldnieka projekta izstrÄdei. Å ajÄ laikÄ tas ir bÅ«tiski attÄ«stÄ«jies funkcionalitÄtes un stabilitÄtes ziÅÄ, bet galvenokÄrt sabiedrÄ«bÄ. MÅ«sdienÄs mÄs redzam, ka daudzi cilvÄki to izmanto, lai nodroÅ”inÄtu savas Kubernetes kopas, kÄ arÄ« izvieto to dažÄdÄs ekosistÄmas daļÄs. PÄdÄjos 16 laidienos ir novÄrstas daudzas kļūdas. Un tas, kas bija jÄsalauž, ir salauzts. VairÄki apmeklÄjumi darbam ar API ir uzlabojuÅ”i tÄ mijiedarbÄ«bu ar lietotÄjiem. MÄs esam atrisinÄjuÅ”i 1500 problÄmu vietnÄ GitHub, saÅemot papildu pieprasÄ«jumus no 253 kopienas dalÄ«bniekiem.
Izlaižot versiju 1.0, mÄs oficiÄli paziÅojam, ka sertifikÄtu pÄrvaldnieks ir nobriedis projekts. MÄs arÄ« apsolÄm, ka mÅ«su API bÅ«s saderÄ«ga v1
.
Liels paldies visiem, kas visus Å”os trÄ«s gadus mums palÄ«dzÄja kļūt par sertifikÄtu menedžeri! Lai versija 1.0 ir pirmÄ no daudzajÄm lielajÄm lietÄm, kas gaidÄma.
Izlaidums 1.0 ir stabils laidiens ar vairÄkÄm prioritÄrajÄm jomÄm:
-
v1
API; -
Komanda
kubectl cert-manager status
, palÄ«dzÄt ar problÄmu analÄ«zi; -
Izmantojot jaunÄkÄs stabilÄs Kubernetes API;
-
Uzlabota mežizstrÄde;
-
ACME uzlabojumi.
Pirms jauninÄÅ”anas noteikti izlasiet jauninÄÅ”anas piezÄ«mes.
API v1
Versija v0.16 darbojÄs ar API v1beta1
. Tas pievienoja dažas strukturÄlas izmaiÅas, kÄ arÄ« uzlaboja API lauka dokumentÄciju. Versija 1.0 ir balstÄ«ta uz to, izmantojot API v1
. Å is API ir mÅ«su pirmais stabilais, tajÄ paÅ”Ä laikÄ mÄs jau esam devuÅ”i saderÄ«bas garantijas, bet ar API v1
mÄs apsolÄm saglabÄt saderÄ«bu turpmÄkajos gados.
VeiktÄs izmaiÅas (piezÄ«me: mÅ«su konvertÄÅ”anas rÄ«ki visu parÅ«pÄsies jÅ«su vietÄ):
SertifikÄts:
-
emailSANs
tagad saucemailAddresses
-
uriSANs
SÄkot nouris
Å Ä«s izmaiÅas palielina saderÄ«bu ar citiem SAN (subject alternatÄ«vajiem nosaukumiem, apm. tulkotÄjs), kÄ arÄ« ar Go API. MÄs noÅemam Å”o terminu no mÅ«su API.
ModernizÄt
Ja izmantojat Kubernetes 1.16+, tÄ«mekļa aizÄ·eru konvertÄÅ”ana ļaus vienlaikus un nemanÄmi strÄdÄt ar API versijÄm v1alpha2
, v1alpha3
, v1beta1
Šø v1
. Izmantojot tos, jÅ«s varÄsiet izmantot jauno API versiju, nemainot vai atkÄrtoti neizvietojot vecos resursus. MÄs ļoti iesakÄm jauninÄt savus manifestus uz API v1
, jo iepriekÅ”ÄjÄs versijas drÄ«zumÄ tiks pÄrtrauktas. LietotÄji legacy
Cert-Manager versijÄm joprojÄm bÅ«s piekļuve tikai v1
, var atrast jauninÄÅ”anas darbÄ«bas
kubectl cert-manager statusa komanda
Ar jauniem uzlabojumiem mÅ«su paplaÅ”inÄjumÄ uz kubectl
kļuva vieglÄk izmeklÄt problÄmas, kas saistÄ«tas ar sertifikÄtu neizsniegÅ”anu. kubectl cert-manager status
tagad sniedz daudz vairÄk informÄcijas par to, kas notiek ar sertifikÄtiem, kÄ arÄ« parÄda sertifikÄtu izsniegÅ”anas stadiju.
PÄc paplaÅ”inÄjuma instalÄÅ”anas varat palaist kubectl cert-manager status certificate <ŠøŠ¼Ń-ŃŠµŃŃŠøŃŠøŠŗŠ°ŃŠ°>
, kas meklÄs sertifikÄtu ar norÄdÄ«to vÄrdu un visus saistÄ«tos resursus, piemÄram, CertificateRequest, Secret, Issuer un Order and Challenges, ja tiek izmantoti ACME sertifikÄti.
SertifikÄta, kas vÄl nav gatavs, atkļūdoÅ”anas piemÄrs:
$ 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
Komanda var arÄ« palÄ«dzÄt uzzinÄt vairÄk par sertifikÄta saturu. DetalizÄts Letsencrypt izsniegtÄ sertifikÄta piemÄrs:
$ 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
[...]
Izmantojot jaunÄkÄs stabilÄs Kubernetes API
Cert-manager bija viens no pirmajiem, kas ieviesa Kubernetes CRD. Tas un mÅ«su atbalsts Kubernetes versijÄm lÄ«dz 1.11 nozÄ«mÄja, ka mums ir jÄatbalsta mantojums apiextensions.k8s.io/v1beta1
arī mūsu CRD admissionregistration.k8s.io/v1beta1
mÅ«su tÄ«mekļa aizÄ·erÄm. Tagad tie ir novecojuÅ”i un tiks noÅemti no Kubernetes versijas 1.22. Ar mÅ«su 1.0 mÄs tagad piedÄvÄjam pilnu atbalstu apiextensions.k8s.io/v1
Šø admissionregistration.k8s.io/v1
Kubernetes 1.16 (kur tie tika pievienoti) un jaunÄkiem. IepriekÅ”Äjo versiju lietotÄjiem mÄs turpinÄm piedÄvÄt atbalstu v1beta1
mūsu legacy
versijas.
Uzlabota mežizstrÄde
Å ajÄ laidienÄ mÄs esam atjauninÄjuÅ”i reÄ£istrÄÅ”anas bibliotÄku uz klog/v2
, ko izmanto Kubernetes 1.19. MÄs arÄ« pÄrskatÄm katru žurnÄlu, ko rakstÄm, lai pÄrliecinÄtos, ka tam ir pieŔķirts atbilstoÅ”s lÄ«menis. MÄs vadÄ«jÄmies pÄc tÄ Error
(0. lÄ«menis), kas drukÄ tikai svarÄ«gas kļūdas un beidzas ar Trace
(5. lÄ«menis), kas palÄ«dzÄs jums precÄ«zi zinÄt, kas notiek. Izmantojot Ŕīs izmaiÅas, esam samazinÄjuÅ”i žurnÄlu skaitu, ja jums nav nepiecieÅ”ama atkļūdoÅ”anas informÄcija, palaižot sertifikÄtu pÄrvaldnieku.
Padoms: sertifikÄtu pÄrvaldnieks pÄc noklusÄjuma darbojas 2. lÄ«menÄ« (Info
), varat to ignorÄt, izmantojot global.logLevel
in Helmchart.
PiezÄ«me. ŽurnÄlu skatÄ«Å”ana ir pÄdÄjais lÄ«dzeklis problÄmu novÄrÅ”anai. Lai iegÅ«tu vairÄk informÄcijas, skatiet mÅ«su
Redaktora n.b.: lai uzzinÄtu vairÄk par to, kÄ tas viss darbojas zem Kubernetes pÄrsega, saÅemtu vÄrtÄ«gus padomus no praktizÄjoÅ”iem skolotÄjiem, kÄ arÄ« kvalitatÄ«vu tehniskÄ atbalsta palÄ«dzÄ«bu, varat piedalÄ«ties tieÅ”saistes intensÄ«vajos pasÄkumos.
ACME uzlabojumi
VisizplatÄ«tÄkÄ sertifikÄtu pÄrvaldnieka izmantoÅ”ana, iespÄjams, ir saistÄ«ta ar sertifikÄtu izsniegÅ”anu no Let's Encrypt, izmantojot ACME. Versija 1.0 ir ievÄrojama ar kopienas atsauksmju izmantoÅ”anu, lai pievienotu divus mazus, bet svarÄ«gus uzlabojumus mÅ«su ACME izdevÄjam.
AtspÄjot konta atslÄgu Ä£enerÄÅ”anu
Ja izmantojat ACME sertifikÄtus lielos apjomos, jÅ«s, visticamÄk, izmantosit vienu un to paÅ”u kontu vairÄkos klasteros, tÄpÄc sertifikÄtu izsniegÅ”anas ierobežojumi attieksies uz tiem visiem. Tas jau bija iespÄjams sertifikÄtu pÄrvaldniekÄ, kopÄjot sadaÄ¼Ä norÄdÄ«to noslÄpumu privateKeySecretRef
. Å is lietoÅ”anas gadÄ«jums bija diezgan kļūdains, jo sertifikÄtu pÄrvaldnieks centÄs bÅ«t izpalÄ«dzÄ«gs un ar prieku izveidoja jaunu konta atslÄgu, ja to neatrada. TÄpÄc mÄs pievienojÄm disableAccountKeyGeneration
lai pasargÄtu jÅ«s no Ŕīs darbÄ«bas, ja iestatÄt Å”o opciju uz true
- Cert-manager neÄ£enerÄs atslÄgu un brÄ«dinÄs, ka tam nav nodroÅ”inÄta konta atslÄga.
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt
spec:
acme:
privateKeySecretRef:
name: example-issuer-account-key
disableAccountKeyGeneration: false
VÄlamÄ Ä·Äde
29. septembris Å ifrÄsim ISRG Root
. SavstarpÄji parakstÄ«ti sertifikÄti tiks aizstÄti ar Identrust
. Å Ä«m izmaiÅÄm nav nepiecieÅ”amas izmaiÅas sertifikÄtu pÄrvaldnieka iestatÄ«jumos, visi atjauninÄtie vai jaunie sertifikÄti, kas izdoti pÄc Ŕī datuma, izmantos jauno saknes CA.
Let's Encrypt jau paraksta sertifikÄtus ar Å”o CA un piedÄvÄ tos kÄ "alternatÄ«vu sertifikÄtu Ä·Ädi", izmantojot ACME. Å ajÄ sertifikÄtu pÄrvaldnieka versijÄ ir iespÄjams iestatÄ«t piekļuvi Ŕīm Ä·ÄdÄm izdevÄja iestatÄ«jumos. ParametrÄ preferredChain
var norÄdÄ«t izmantotÄs CA nosaukumu, ar kuru tiks izsniegts sertifikÄts. Ja ir pieejams pieprasÄ«jumam atbilstoÅ”s CA sertifikÄts, tas jums izsniegs sertifikÄtu. LÅ«dzu, Åemiet vÄrÄ, ka Ŕī ir vÄlamÄ iespÄja, ja nekas netiks atrasts, tiks izsniegts noklusÄjuma sertifikÄts. Tas nodroÅ”inÄs, ka jÅ«s joprojÄm atjaunosit savu sertifikÄtu pÄc alternatÄ«vÄs Ä·Ädes dzÄÅ”anas ACME izdevÄja pusÄ.
Jau Å”odien var saÅemt sertifikÄtus, ko parakstÄ«juÅ”i ISRG Root
, TÄtad:
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
preferredChain: "ISRG Root X1"
Ja vÄlaties pamest Ä·Ädi IdenTrust
- iestatiet Ŕo opciju uz 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"
LÅ«dzu, Åemiet vÄrÄ, ka Ŕī saknes CA darbÄ«ba drÄ«zumÄ tiks pÄrtraukta. Let's Encrypt saglabÄs Å”o Ä·Ädi aktÄ«vu lÄ«dz 29. gada 2021. septembrim.
Avots: www.habr.com