Тажрыйбалуу, даанышман инженерден серт-менеджер жөнүндө кандай ойдо экенин жана эмне үчүн аны ар ким колдонот деп сурасаңыз, адис үшкүрүнүп, аны купуя кучактап, чарчап айтат: «Баары колдонот, анткени акылга сыярлык альтернатива жок. Биздин чычкандар ыйлашат, сайгылашат, бирок бул кактус менен жашай беришет. Эмне үчүн биз сүйөбүз? Анткени ал иштейт. Эмне үчүн биз сүйбөйбүз? Анткени жаңы функцияларды колдонгон жаңы версиялар тынымсыз чыгарылып турат. Жана сиз кластерди кайра-кайра жаңылашыңыз керек. Ал эми эски версиялар иштебей калат, анткени бул жерде кутум жана улуу сырдуу шаманчылык бар».
Бирок иштеп чыгуучулар муну менен ырасташат сертификат-менеджер 1.0 баары өзгөрөт.
Ишенебизби?
Cert-менеджер - жергиликтүү Kubernetes сертификатын башкаруу контроллери. Аны ар кандай булактардан сертификаттарды чыгаруу үчүн колдонсо болот: Let's Encrypt, HashiCorp Vault, Venafi, кол коюу жана өз алдынча кол коюлган ачкыч жуптары. Ал ошондой эле ачкычтарды жаңыртып турууга мүмкүндүк берет жана сертификаттардын мөөнөтү аяктаганга чейин белгиленген убакытта автоматтык түрдө жаңыртууга аракет кылат. Cert-менеджер kube-lego негизделген, ошондой эле kube-cert-manager сыяктуу башка ушул сыяктуу долбоорлордун кээ бир ыкмаларын колдонгон.
Release Notes
1.0 версиясы менен биз сертификат-менеджер долбоорунун үч жылдык өнүгүүсүнө ишеним белгисин койдук. Бул убакыттын ичинде, ал функционалдык жана туруктуулук боюнча олуттуу өнүккөн, бирок баарынан да коомчулукта. Бүгүн биз көптөгөн адамдар аны Kubernetes кластерлерин коргоо үчүн колдонуп, ошондой эле экосистеманын ар кандай бөлүктөрүндө ишке ашырып жатканын көрүп жатабыз. Акыркы 16 чыгарылышта бир топ мүчүлүштүктөр оңдолду. Ал эми бузулушу керек болгон нерсе бузулду. API'ге бир нече жолу баруу анын колдонуучулар менен өз ара аракеттенүүсүн жакшыртты. Биз GitHub'та 1500 маселени чечтик, коомчулуктун 253 мүчөсү андан да көп суроо-талаптарды кабыл алды.
1.0 чыгаруу менен биз расмий түрдө сертификат-менеджер жетилген долбоор экенин билдиребиз. Биз ошондой эле биздин API шайкеш сактоого убада беребиз v1
.
Ушул үч жыл бою серт-менеджерди түзүүгө жардам бергендердин баарына чоң рахмат! 1.0 версиясы алдыдагы көптөгөн сонун нерселердин биринчиси болсун.
Release 1.0 - бул бир нече артыкчылыктуу багыттары бар туруктуу релиз:
-
v1
API; -
команда
kubectl cert-manager status
, көйгөйлөрдү талдоого жардам берүү; -
Акыркы туруктуу Kubernetes API'лерин колдонуу;
-
Жакшыртылган журнал жазуу;
-
ACME жакшыртуулары.
Жаңыртуудан мурун жаңыртуу эскертүүлөрүн окуп чыгыңыз.
API v1
V0.16 версиясы API менен иштеген v1beta1
. Бул кээ бир структуралык өзгөртүүлөрдү кошуп, ошондой эле API талаа документтерин жакшыртты. 1.0 версиясы мунун бардыгына API менен негизделген v1
. Бул 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 <имя-сертификата>
, ал көрсөтүлгөн ат менен сертификатты жана ага байланыштуу ресурстарды, мисалы, CertificateRequest, Secret, Эмитент жана 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'лерин колдонуңуз
Cert-менеджер биринчилерден болуп 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 диаграммасында.
Эскертүү: Каттоолорду карап чыгуу көйгөйдү чечүүдө эң акыркы чара болуп саналат. Көбүрөөк маалымат алуу үчүн биздин текшерүү
Редактордун НБ: Мунун баары Kubernetes капотунун астында кантип иштээри жөнүндө көбүрөөк билүү үчүн, практикалык мугалимдерден баалуу кеңештерди, ошондой эле сапаттуу техникалык колдоону алуу үчүн онлайн интенсивдүү курстарга катыша аласыз.
ACME жакшыртуулары
Сертификат-менеджердин эң кеңири колдонулушу, балким, ACME аркылуу Let's Encryptтен сертификаттарды чыгарууга байланыштуу. 1.0 версиясы биздин ACME эмитентибизге эки кичинекей, бирок маанилүү жакшыртууларды кошуу үчүн коомчулуктун пикирлерин колдонуу менен өзгөчөлөнөт.
Каттоо эсебинин ачкычын түзүүнү өчүрүү
Эгерде сиз ACME сертификаттарын чоң көлөмдө колдонсоңуз, анда сиз бир эле эсепти бир нече кластерлерде колдонуп жаткан болушуңуз мүмкүн, андыктан сиздин сертификаттарды берүү чектөөлөрү алардын баарына колдонулат. Бул серт-менеджерде көрсөтүлгөн сырды көчүрүп жатканда буга чейин эле мүмкүн болгон privateKeySecretRef
. Бул колдонуу иши бир топ ката болду, анткени сертификат-менеджер пайдалуу болууга аракет кылып, эгер таба албаса, жаңы аккаунт ачкычын түздү. Ошон үчүн кошуп койдук disableAccountKeyGeneration
бул параметрди коюу менен бул жүрүм-турумдан коргоо үчүн true
- cert-meneger ачкычты жаратпайт жана ага эсеп ачкычы берилбегенин эскертет.
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt
spec:
acme:
privateKeySecretRef:
name: example-issuer-account-key
disableAccountKeyGeneration: false
Тандалган чынжыр
29-сентябрь Шифрлейли ISRG Root
. Кайчылаш кол коюлган сертификаттар менен алмаштырылат Identrust
. Бул өзгөртүү сертификат-башкаруучунун жөндөөлөрүн өзгөртүүнү талап кылбайт; ушул күндөн кийин чыгарылган бардык жаңыртылган же жаңы сертификаттар жаңы түпкү CA колдонот.
Let's Encrypt бул CA менен сертификаттарга кол коюп, аларды ACME аркылуу "альтернативалык тастыктама чынжыр" катары сунуштайт. Серт-менеджердин бул версиясы эмитенттин жөндөөлөрүндө бул чынжырларга кирүү мүмкүнчүлүгүн коюу мүмкүнчүлүгүнө ээ. Параметрде preferredChain
Сертификат берүү үчүн колдонулган САнын атын көрсөтсөңүз болот. Сурамга дал келген 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-сентябрына чейин активдүү кармап турат.
Source: www.habr.com