cert-manager 1.0 гарсан

Туршлагатай, ухаалаг инженерээс сертификат менежерийн талаар ямар бодолтой байдаг, яагаад үүнийг хүн бүр ашигладаг вэ гэж асуувал мэргэжилтэн санаа алдаж, түүнийг нууцаар тэврэн ядарсан байдалтай: "Эрүүл ухаантай хувилбар байхгүй тул хүн бүр үүнийг ашигладаг. Манай хулганууд уйлж, хатгаж, харин энэ кактусаар амьдарсаар л байна. Бид яагаад хайртай вэ? Учир нь энэ нь ажилладаг. Бид яагаад хайрладаггүй юм бэ? Учир нь шинэ боломжуудыг ашигладаг шинэ хувилбарууд байнга гардаг. Мөн та кластерыг дахин дахин шинэчлэх хэрэгтэй. Мөн хуйвалдаан, агуу нууцлаг бөө мөргөл байгаа учраас хуучин хувилбарууд нь ажиллахаа больсон."

Гэхдээ хөгжүүлэгчид үүнийг баталж байна сертификат менежер 1.0 бүх зүйл өөрчлөгдөнө.

Бид үүнд итгэх үү?

cert-manager 1.0 гарсан

Cert-менежер бол Кубернетес сертификатын удирдлагын төрөлх хянагч юм. Үүнийг янз бүрийн эх сурвалжаас гэрчилгээ олгоход ашиглаж болно: Let's Encrypt, HashiCorp Vault, Venafi, гарын үсэг зурах болон өөрөө гарын үсэг зурсан түлхүүр хосууд. Энэ нь танд түлхүүрүүдийг шинэчилж, хугацаа нь дуусахаас өмнө заасан хугацаанд автоматаар шинэчлэх оролдлого хийх боломжийг олгодог. Cert-manager нь kube-lego дээр суурилсан бөгөөд kube-cert-manager гэх мэт бусад ижил төстэй төслүүдийн зарим техникийг ашигласан.

Хувилбарын тэмдэглэл

1.0 хувилбарын тусламжтайгаар бид cert-maneger төслийн гурван жилийн хөгжилд итгэл хүлээлгэж байна. Энэ хугацаанд энэ нь функциональ байдал, тогтвортой байдлын хувьд ихээхэн хөгжсөн боловч хамгийн гол нь нийгэмд байдаг. Өнөөдөр бид олон хүмүүс үүнийг Кубернетес кластеруудаа хамгаалах, мөн экосистемийн янз бүрийн хэсэгт хэрэгжүүлэхэд ашиглаж байгааг харж байна. Сүүлийн 16 хувилбарт олон тооны алдаа зассан. Тэгээд эвдрэх ёстой байсан зүйл нь эвдэрсэн. API-д хэд хэдэн удаа зочилсноор хэрэглэгчидтэй харилцах харилцаа сайжирсан. Бид GitHub дээрх 1500 асуудлыг шийдэж, олон нийтийн 253 гишүүнээс бүр ч илүү татах хүсэлт гаргасан.

1.0 хувилбарыг гаргаснаар бид cert-manager бол төлөвшсөн төсөл гэдгийг албан ёсоор мэдэгдэж байна. Мөн бид API-аа нийцтэй байлгахаа амлаж байна v1.

Энэ гурван жилийн турш сертификат-менежерийг бий болгоход тусалсан бүх хүмүүст маш их баярлалаа! 1.0 хувилбар нь олон гайхалтай зүйлсийн эхнийх нь байх болтугай.

Release 1.0 нь хэд хэдэн тэргүүлэх чиглэлтэй тогтвортой хувилбар юм:

  • v1 ГАЛ;

  • баг kubectl cert-manager status, асуудалд дүн шинжилгээ хийхэд туслах;

  • Хамгийн сүүлийн үеийн тогтвортой Kubernetes API ашиглах;

  • Бүртгэлийг сайжруулсан;

  • ACME сайжруулалт.

Шинэчлэхээсээ өмнө шинэчлэлтийн тэмдэглэлийг уншихаа мартуузай.

API v1

V0.16 хувилбар нь API-тай ажилладаг v1beta1. Энэ нь бүтцийн зарим өөрчлөлтийг нэмж, API талбарын баримт бичгийг сайжруулсан. Хувилбар 1.0 нь API-тай энэ бүгд дээр тулгуурладаг v1. Энэ API нь бидний анхны тогтвортой API бөгөөд үүний зэрэгцээ бид нийцтэй байдлын баталгааг аль хэдийн өгсөн боловч API-тай v1 Бид олон жилийн турш нийцтэй байдлыг хадгалахаа амлаж байна.

Өөрчлөлт хийсэн (тэмдэглэл: манай хөрвүүлэх хэрэгслүүд таны төлөө бүх зүйлийг хариуцах болно):

Гэрчилгээ:

  • emailSANs одоо дуудлаа emailAddresses

  • uriSANs - uris

Эдгээр өөрчлөлтүүд нь бусад SAN-уудтай нийцтэй байдлыг нэмэгдүүлдэг (сэдвийн өөр нэр, ойролцоогоор. орчуулагч), түүнчлэн Go API-тай. Бид энэ нэр томъёог API-аас хасаж байна.

Шинэчлэх

Хэрэв та Kubernetes 1.16+ ашиглаж байгаа бол вэб дэгээг хөрвүүлэх нь API хувилбаруудтай нэгэн зэрэг, саадгүй ажиллах боломжийг олгоно. v1alpha2, v1alpha3, v1beta1 и v1. Тэдгээрийн тусламжтайгаар та хуучин нөөцөө өөрчлөх, дахин ашиглахгүйгээр API-ийн шинэ хувилбарыг ашиглах боломжтой. Бид манифестуудаа API болгон шинэчлэхийг зөвлөж байна v1, учир нь өмнөх хувилбарууд удахгүй хуучирагдах болно. Хэрэглэгчид legacy cert-manager-ийн хувилбарууд зөвхөн хандах эрхтэй хэвээр байх болно v1, шинэчлэх алхмуудыг олж болно энд.

kubectl cert-менежер статусын тушаал

Манай өргөтгөлийн шинэ сайжруулалтуудаар kubectl Гэрчилгээ олгоогүйтэй холбоотой асуудлыг шалгахад хялбар болсон. kubectl cert-manager status одоо гэрчилгээнд юу болж байгаа талаар илүү их мэдээлэл өгөхөөс гадна гэрчилгээ олгох үе шатыг харуулдаг.

Өргөтгөлийг суулгасны дараа та ажиллуулж болно kubectl cert-manager status certificate <имя-сертификата>, энэ нь ACME-ийн гэрчилгээний тохиолдолд Сертификат Хүсэлт, Нууц, Гаргагч, Захиалга ба сорилт зэрэг заасан нэртэй гэрчилгээ болон холбогдох эх сурвалжуудыг хайх болно.

Одоогоор бэлэн болоогүй байгаа гэрчилгээг дибаг хийх жишээ:

$ 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

Тус баг нь гэрчилгээний агуулгын талаар илүү ихийг мэдэхэд тань туслах болно. 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
[...]

Хамгийн сүүлийн үеийн тогтвортой Kubernetes API-г ашиглана уу

Сертификат-менежер нь Kubernetes CRD-ийг хэрэгжүүлсэн анхны хүмүүсийн нэг юм. Энэ нь бидний Kubernetes-ийн 1.11 хүртэлх хувилбаруудыг дэмжсэнтэй холбоотойгоор бид өв залгамжлалыг дэмжих шаардлагатай гэсэн үг юм. apiextensions.k8s.io/v1beta1 Манай CRD-ийн хувьд мөн admissionregistration.k8s.io/v1beta1 Манай вэб дэгээнд зориулсан. Эдгээр нь одоо хуучирсан бөгөөд 1.22 хувилбараас эхлэн Kubernetes дээр устгагдах болно. 1.0 хувилбараараа бид одоо бүрэн дэмжлэг үзүүлж байна apiextensions.k8s.io/v1 и admissionregistration.k8s.io/v1 Kubernetes 1.16 (тэдгээрийг нэмсэн) болон дараа нь. Өмнөх хувилбаруудын хэрэглэгчдийн хувьд бид дэмжлэг үзүүлсээр байна v1beta1 д манай legacy хувилбарууд.

Сайжруулсан бүртгэл

Энэ хувилбарт бид бүртгэлийн номын санг шинэчилсэн klog/v2, Kubernetes 1.19-д ашигласан. Мөн бид бичсэн сэтгүүл бүрээ зохих түвшинд оноож өгсөн эсэхийг шалгадаг. Үүнийг бид удирдаж байсан Kubernetes-ийн удирдамж. Тав байна (үнэндээ - зургаа, ойролцоогоор. орчуулагч) -аас эхлэн бүртгэлийн түвшин Error (түвшин 0), зөвхөн чухал алдаануудыг хэвлэдэг ба төгсгөлтэй Trace (5-р түвшин) нь яг юу болж байгааг олж мэдэхэд тусална. Хэрэв танд cert-manager-г ажиллуулах үед дибаг хийх мэдээлэл шаардлагагүй бол бид энэ өөрчлөлтийг хийснээр бүртгэлийн тоог багасгасан.

Зөвлөмж: анхдагчаар сертификат-менежер 2-р түвшинд ажилладаг (Info) ашиглан та үүнийг дарж болно global.logLevel Helm диаграммд.

Тэмдэглэл: Бүртгэлийг шалгах нь алдааг олж засварлах хамгийн сүүлчийн арга юм. Дэлгэрэнгүй мэдээллийг манайхаас авна уу манлайлал.

Редакторын NB: Энэ бүхэн Kubernetes-ийн удирдлаган дор хэрхэн ажилладаг талаар илүү ихийг мэдэх, дадлагажигч багш нараас үнэтэй зөвлөгөө авах, түүнчлэн өндөр чанартай техникийн дэмжлэг авахын тулд та онлайн эрчимжүүлсэн сургалтанд хамрагдах боломжтой. Кубернетес бааз, 28-р сарын 30-XNUMX-нд болох ба Kubernetes Mega14-р сарын 16-XNUMX-нд болно.

ACME сайжруулалт

Сертификат-менежерийн хамгийн түгээмэл хэрэглээ нь ACME ашиглан Let's Encrypt-ээс гэрчилгээ олгохтой холбоотой байж магадгүй юм. Хувилбар 1.0 нь олон нийтийн санал хүсэлтийг ашиглан манай ACME гаргагчид хоёр жижиг боловч чухал сайжруулалт нэмсэнээрээ онцлог юм.

Бүртгэлийн түлхүүр үүсгэхийг идэвхгүй болгох

Хэрэв та ACME гэрчилгээг их хэмжээгээр ашигладаг бол олон кластер дээр ижил данс ашиглаж магадгүй тул таны гэрчилгээ олгох хязгаарлалтууд бүгдэд нь хамаарна. -д заасан нууцыг хуулах үед энэ нь cert-manager дээр аль хэдийн боломжтой байсан privateKeySecretRef. Сертификат-менежер туслахыг хичээж, хэрэв олдохгүй бол шинэ бүртгэлийн түлхүүр үүсгэсэн тул энэ ашиглалтын тохиолдол нэлээд алдаатай байсан. Тийм учраас бид нэмсэн disableAccountKeyGenerationЭнэ сонголтыг тохируулснаар таныг энэ зан үйлээс хамгаалах true - cert-manager нь түлхүүр үүсгэхгүй бөгөөд түүнд дансны түлхүүр өгөөгүй гэдгийг анхааруулах болно.

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

Давуу эрхтэй хэлхээ

29 сарын XNUMX Шифрлэцгээе хөдлөх болно өөрийн эх гэрчилгээний байгууллагад ISRG Root. Хөндлөн гарын үсэг зурсан гэрчилгээгүүдээр солино Identrust. Энэ өөрчлөлт нь сертификат-менежерийн тохиргоонд өөрчлөлт оруулах шаардлагагүй бөгөөд энэ өдрөөс хойш олгосон бүх шинэчлэгдсэн эсвэл шинэ гэрчилгээ нь шинэ үндсэн CA-г ашиглана.

Let's Encrypt нь энэ CA-тай гэрчилгээнд аль хэдийн гарын үсэг зурсан бөгөөд тэдгээрийг ACME-ээр дамжуулан "өөр сертификатын сүлжээ" болгон санал болгодог. Сертификат-менежерийн энэ хувилбар нь гаргагчийн тохиргоонд эдгээр гинжин хэлхээнд хандах эрхийг тохируулах чадвартай. Параметр дотор preferredChain Та гэрчилгээ олгоход ашигласан CA-ийн нэрийг зааж өгч болно. Хэрэв хүсэлтэд тохирсон CA гэрчилгээ байгаа бол энэ нь танд гэрчилгээ олгоно. Энэ бол хамгийн тохиромжтой сонголт гэдгийг анхаарна уу, хэрэв юу ч олдохгүй бол анхдагч гэрчилгээ олгоно. Энэ нь ACME гаргагчийн талд байгаа өөр сүлжээг устгасны дараа та гэрчилгээгээ сунгах болно.

Өнөөдөр та гарын үсэг зурсан гэрчилгээг хүлээн авах боломжтой ISRG Root, Тэгэхээр:

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

Хэрэв та хэлхээг орхихыг хүсч байвал IdenTrust — энэ параметрийг тохируулна уу 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"

Энэ үндсэн CA удахгүй хүчингүй болно, Let's Encrypt нь 29 оны 2021-р сарын XNUMX хүртэл энэ сүлжээг идэвхтэй байлгах болно гэдгийг анхаарна уу.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх