Туршлагатай, ухаалаг инженерээс сертификат менежерийн талаар ямар бодолтой байдаг, яагаад үүнийг хүн бүр ашигладаг вэ гэж асуувал мэргэжилтэн санаа алдаж, түүнийг нууцаар тэврэн ядарсан байдалтай: "Эрүүл ухаантай хувилбар байхгүй тул хүн бүр үүнийг ашигладаг. Манай хулганууд уйлж, хатгаж, харин энэ кактусаар амьдарсаар л байна. Бид яагаад хайртай вэ? Учир нь энэ нь ажилладаг. Бид яагаад хайрладаггүй юм бэ? Учир нь шинэ боломжуудыг ашигладаг шинэ хувилбарууд байнга гардаг. Мөн та кластерыг дахин дахин шинэчлэх хэрэгтэй. Мөн хуйвалдаан, агуу нууцлаг бөө мөргөл байгаа учраас хуучин хувилбарууд нь ажиллахаа больсон."
Гэхдээ хөгжүүлэгчид үүнийг баталж байна сертификат менежер 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-д ашигласан. Мөн бид бичсэн сэтгүүл бүрээ зохих түвшинд оноож өгсөн эсэхийг шалгадаг. Үүнийг бид удирдаж байсан Error
(түвшин 0), зөвхөн чухал алдаануудыг хэвлэдэг ба төгсгөлтэй Trace
(5-р түвшин) нь яг юу болж байгааг олж мэдэхэд тусална. Хэрэв танд cert-manager-г ажиллуулах үед дибаг хийх мэдээлэл шаардлагагүй бол бид энэ өөрчлөлтийг хийснээр бүртгэлийн тоог багасгасан.
Зөвлөмж: анхдагчаар сертификат-менежер 2-р түвшинд ажилладаг (Info
) ашиглан та үүнийг дарж болно global.logLevel
Helm диаграммд.
Тэмдэглэл: Бүртгэлийг шалгах нь алдааг олж засварлах хамгийн сүүлчийн арга юм. Дэлгэрэнгүй мэдээллийг манайхаас авна уу
Редакторын NB: Энэ бүхэн Kubernetes-ийн удирдлаган дор хэрхэн ажилладаг талаар илүү ихийг мэдэх, дадлагажигч багш нараас үнэтэй зөвлөгөө авах, түүнчлэн өндөр чанартай техникийн дэмжлэг авахын тулд та онлайн эрчимжүүлсэн сургалтанд хамрагдах боломжтой.
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