cert-manager 1.0 chiqarildi

Tajribali, dono muhandisdan sertifikat-menejer haqida nima deb o'ylaysiz va nima uchun hamma undan foydalanadi deb so'rasangiz, mutaxassis xo'rsinib, uni ishonch bilan quchoqlaydi va charchagan holda aytadi: “Hamma foydalanadi, chunki aql-idrok uchun alternativa yo'q. Bizning sichqonlarimiz yig'laydilar, uradilar, lekin bu kaktus bilan yashashni davom ettiradilar. Nega biz sevamiz? Chunki u ishlaydi. Nega biz sevmaymiz? Chunki yangi xususiyatlardan foydalanadigan yangi versiyalar doimiy ravishda chiqadi. Va siz klasterni qayta-qayta yangilashingiz kerak. Va eski versiyalar ishlashni to'xtatadi, chunki fitna va buyuk sirli shamanizm mavjud.

Ammo ishlab chiquvchilar buni da'vo qilishadi sertifikat menejeri 1.0 hammasi o'zgaradi.

Ishonamizmi?

cert-manager 1.0 chiqarildi

Sertifikat menejeri - Kubernetes sertifikatlarini boshqarishning mahalliy nazoratchisi. U turli manbalardan sertifikatlar chiqarish uchun ishlatilishi mumkin: Let's Encrypt, HashiCorp Vault, Venafi, imzolash va o'z-o'zidan imzolangan kalit juftliklari. Shuningdek, u kalitlarni yaroqlilik muddatiga qadar yangilab turishga imkon beradi, shuningdek sertifikatlarni muddati tugashidan oldin belgilangan vaqtda avtomatik ravishda yangilashga harakat qiladi. Cert-menejeri kube-lego-ga asoslangan va kube-cert-menejeri kabi boshqa shunga o'xshash loyihalardan ba'zi fokuslardan foydalangan.

Chiqarish eslatmalari

1.0 versiyasi bilan biz sertifikat-menejer loyihasining uch yillik rivojlanishi uchun ishonch belgisini qo'ydik. Bu vaqt ichida u funksionallik va barqarorlik jihatidan sezilarli darajada rivojlandi, lekin eng muhimi jamiyatda. Bugungi kunda biz ko'plab odamlar undan Kubernetes klasterlarini himoya qilish va uni ekotizimning turli qismlariga joylashtirish uchun foydalanayotganini ko'rmoqdamiz. Oxirgi 16 ta nashrda ko'plab xatolar tuzatildi. Va buzish kerak bo'lgan narsa buziladi. API bilan ishlash uchun bir nechta tashriflar uning foydalanuvchilar bilan o'zaro aloqasini yaxshiladi. Biz GitHub-da 1500 ta muammoni 253 ta hamjamiyat a'zolaridan ko'proq jalb qilish so'rovlari bilan hal qildik.

1.0 versiyasi chiqarilishi bilan biz cert-menejer etuk loyiha ekanligini rasman e'lon qilamiz. Shuningdek, biz API-ni mos saqlashga va'da beramiz v1.

Ushbu uch yil davomida sertifikat-menejer bo'lishimizga yordam bergan barchaga katta rahmat! 1.0 versiyasi kelajakdagi ko'plab katta narsalarning birinchisi bo'lsin.

Release 1.0 - bu bir nechta ustuvor yo'nalishlarga ega barqaror versiya:

  • v1 API;

  • komanda kubectl cert-manager status, muammolarni tahlil qilishda yordam berish;

  • Eng so'nggi barqaror Kubernetes API-laridan foydalanish;

  • Yaxshilangan jurnal;

  • ACME yaxshilanishlari.

Yangilashdan oldin yangilash eslatmalarini o'qib chiqing.

API v1

V0.16 versiyasi API bilan ishlagan v1beta1. Bu ba'zi tarkibiy o'zgarishlarni qo'shdi va API maydon hujjatlarini yaxshiladi. 1.0-versiyasi API bilan yaratilgan v1. Bu API bizning birinchi barqarorimiz, shu bilan birga biz allaqachon muvofiqlik kafolatlarini berganmiz, lekin API bilan v1 biz kelgusi yillar davomida muvofiqlikni saqlashga va'da beramiz.

Kiritilgan o'zgarishlar (eslatma: bizning konversiya vositalarimiz siz uchun hamma narsani hal qiladi):

Sertifikat:

  • emailSANs hozir chaqirildi emailAddresses

  • uriSANs - uris

Ushbu o'zgarishlar boshqa SAN'lar bilan moslikni qo'shadi (mavzuning alternativ nomlari, taxminan. tarjimon), shuningdek Go API bilan. Biz ushbu atamani APImizdan olib tashlayapmiz.

yangilash

Agar siz Kubernetes 1.16+ dan foydalanayotgan bo'lsangiz, veb-huklarni konvertatsiya qilish sizga API versiyalari bilan bir vaqtda va muammosiz ishlash imkonini beradi. v1alpha2, v1alpha3, v1beta1 и v1. Ular yordamida siz eski manbalaringizni o'zgartirmasdan yoki qayta joylashtirmasdan API ning yangi versiyasidan foydalanishingiz mumkin bo'ladi. Manifestlaringizni API ga yangilashni tavsiya etamiz v1, chunki oldingi versiyalar tez orada eskiradi. Foydalanuvchilar legacy cert-manager versiyalari hali ham faqat kirish huquqiga ega bo'ladi v1, yangilash bosqichlarini topish mumkin shu yerda.

kubectl sertifikat boshqaruvchisi holati buyrug'i

Bizning kengaytmamizdagi yangi yaxshilanishlar bilan kubectl sertifikatlar berilmasligi bilan bog'liq muammolarni o'rganish osonlashdi. kubectl cert-manager status Endi sertifikatlar bilan nima sodir bo'layotgani haqida ko'proq ma'lumot beradi va sertifikat berish bosqichini ko'rsatadi.

Kengaytmani o'rnatganingizdan so'ng, siz ishga tushirishingiz mumkin kubectl cert-manager status certificate <имя-сертификата>, agar ACME sertifikatlaridan foydalansangiz, berilgan nom bilan sertifikat va CertificateRequest, Secret, Emitent va Buyurtma va Challenges kabi tegishli manbalarni qidiradi.

Hali tayyor bo'lmagan sertifikatni disk raskadrovka qilish misoli:

$ 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

Buyruq, shuningdek, sertifikat mazmuni haqida ko'proq ma'lumot olishga yordam beradi. Letsencrypt tomonidan berilgan sertifikat uchun batafsil misol:

$ 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
[...]

Eng so'nggi barqaror Kubernetes API-laridan foydalanish

Sertifikat menejeri Kubernetes CRD-larini birinchilardan bo'lib joriy qilgan. Bu va Kubernetesning 1.11 gacha versiyalarini qo‘llab-quvvatlashimiz merosni qo‘llab-quvvatlashimiz kerakligini anglatardi. apiextensions.k8s.io/v1beta1 CRDlarimiz uchun ham admissionregistration.k8s.io/v1beta1 vebhuklarimiz uchun. Ular endi eskirgan va 1.22 versiyasidan Kubernetesda olib tashlanadi. Bizning 1.0 bilan biz endi to'liq yordamni taklif qilamiz apiextensions.k8s.io/v1 и admissionregistration.k8s.io/v1 Kubernetes 1.16 (ular qo'shilgan joyda) va yangilari uchun. Oldingi versiya foydalanuvchilari uchun biz qo'llab-quvvatlashni taklif qilishda davom etamiz v1beta1 bizning legacy versiyalari.

Yaxshilangan jurnal

Ushbu nashrda biz jurnallar kutubxonasini yangiladik klog/v2, Kubernetes 1.19 da ishlatilgan. Shuningdek, biz yozgan har bir jurnalning tegishli darajaga ega ekanligiga ishonch hosil qilish uchun ko'rib chiqamiz. Biz bunga rahbarlik qildik Kubernetesning ko'rsatmalari. Beshta (aslida oltitasi, taxminan. tarjimon) dan boshlab ro'yxatga olish darajalari Error (0-daraja), bu faqat muhim xatolarni chop etadi va bilan tugaydi Trace (5-daraja) nima bo'layotganini aniq bilishingizga yordam beradi. Agar cert-manager ishga tushganda disk raskadrovka ma'lumotlariga muhtoj bo'lmasangiz, ushbu o'zgarish bilan biz jurnallar sonini kamaytirdik.

Maslahat: sertifikat menejeri sukut bo'yicha 2-darajada ishlaydi (Info) yordamida buni bekor qilishingiz mumkin global.logLevel Helmchartda.

Eslatma: Muammolarni bartaraf etishda jurnallarni ko'rish oxirgi chora hisoblanadi. Qo'shimcha ma'lumot olish uchun bizning ko'ring yo'l-yo'riq.

Muharrirning n.b.: Bularning barchasi Kubernetes ostida qanday ishlashi haqida ko'proq ma'lumot olish, amaliyotchi o'qituvchilardan qimmatli maslahatlar, shuningdek sifatli texnik yordam olish uchun onlayn intensiv mashg'ulotlarda qatnashishingiz mumkin. Kubernetes bazasi, 28-30 sentyabr kunlari bo'lib o'tadi va Kubernetes Mega14-16 oktyabr kunlari bo'lib o'tadi.

ACME takomillashtirish

Sertifikat boshqaruvchisidan eng keng tarqalgan foydalanish, ehtimol, ACME yordamida Let's Encrypt-dan sertifikatlar chiqarish bilan bog'liq. 1.0 versiyasi ACME emitentiga ikkita kichik, ammo muhim yaxshilanishlarni kiritish uchun hamjamiyatning fikr-mulohazalaridan foydalanish bilan ajralib turadi.

Hisob kalitini yaratishni o'chirib qo'ying

Agar siz ACME sertifikatlarini katta hajmda ishlatsangiz, siz bir nechta klasterlarda bir xil hisob qaydnomasidan foydalanishingiz mumkin, shuning uchun sertifikat berish cheklovlari ularning barchasiga tatbiq etiladi. Bu sertifikat-menejerda ko'rsatilgan sirni nusxalashda allaqachon mumkin edi privateKeySecretRef. Bu foydalanish holati juda noaniq edi, chunki sertifikat menejeri foydali bo'lishga harakat qildi va agar topilmasa, xursandchilik bilan yangi hisob kalitini yaratdi. Shuning uchun biz qo'shdik disableAccountKeyGenerationAgar siz ushbu parametrni o'rnatsangiz, sizni ushbu xatti-harakatlardan himoya qilish uchun true - sertifikat boshqaruvchisi kalit yaratmaydi va u hisob kaliti bilan ta'minlanmaganligi haqida sizni ogohlantiradi.

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

Afzal zanjir

29 sentyabr Keling, shifrlaymiz o'tadi o'zingizning ildiz CA ga ISRG Root. O'zaro imzolangan sertifikatlar bilan almashtiriladi Identrust. Ushbu o'zgarish sertifikat boshqaruvchisi sozlamalariga o'zgartirish kiritishni talab qilmaydi, bu sanadan keyin chiqarilgan barcha yangilangan yoki yangi sertifikatlar yangi CA ildizidan foydalanadi.

Let's Encrypt allaqachon ushbu CA bilan sertifikatlarni imzolaydi va ularni ACME orqali "muqobil sertifikatlar zanjiri" sifatida taklif qiladi. Sertifikat menejerining ushbu versiyasida emitent sozlamalarida ushbu zanjirlarga kirishni o'rnatish mumkin. Parametrda preferredChain sertifikat beriladigan foydalanilayotgan CA nomini belgilashingiz mumkin. Agar so'rovga mos keladigan CA sertifikati mavjud bo'lsa, u sizga sertifikat beradi. E'tibor bering, bu afzal qilingan variant, agar hech narsa topilmasa, standart sertifikat beriladi. Bu ACME emitent tomonidagi muqobil zanjirni o'chirib tashlaganingizdan keyin ham sertifikatingizni yangilab turishingizni ta'minlaydi.

Bugun siz imzolagan sertifikatlarni olishingiz mumkin ISRG Root, Shunday qilib:

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

Agar siz zanjirni tark etishni afzal ko'rsangiz IdenTrust - ushbu parametrni o'rnating 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"

Esda tutingki, bu ildiz CA tez orada eskiradi, Let's Encrypt ushbu zanjirni 29-yil 2021-sentabrgacha faol ushlab turadi.

Manba: www.habr.com

a Izoh qo'shish