cert-manager 1.0 чыгарылды

Тажрыйбалуу, даанышман инженерден серт-менеджер жөнүндө кандай ойдо экенин жана эмне үчүн аны ар ким колдонот деп сурасаңыз, адис үшкүрүнүп, аны купуя кучактап, чарчап айтат: «Баары колдонот, анткени акылга сыярлык альтернатива жок. Биздин чычкандар ыйлашат, сайгылашат, бирок бул кактус менен жашай беришет. Эмне үчүн биз сүйөбүз? Анткени ал иштейт. Эмне үчүн биз сүйбөйбүз? Анткени жаңы функцияларды колдонгон жаңы версиялар тынымсыз чыгарылып турат. Жана сиз кластерди кайра-кайра жаңылашыңыз керек. Ал эми эски версиялар иштебей калат, анткени бул жерде кутум жана улуу сырдуу шаманчылык бар».

Бирок иштеп чыгуучулар муну менен ырасташат сертификат-менеджер 1.0 баары өзгөрөт.

Ишенебизби?

cert-manager 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 капотунун астында кантип иштээри жөнүндө көбүрөөк билүү үчүн, практикалык мугалимдерден баалуу кеңештерди, ошондой эле сапаттуу техникалык колдоону алуу үчүн онлайн интенсивдүү курстарга катыша аласыз. Kubernetes базасы, 28-30-сентябрда боло турган жана Kubernetes Mega14-16-октябрда өтөт.

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

Комментарий кошуу