cert-manager 1.0 αž”αžΆαž“αž…αŸαž‰αž•αŸ’αžŸαžΆαž™

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžŸαž½αžšαžœαž·αžŸαŸ’αžœαž€αžšαžŠαŸ‚αž›αž˜αžΆαž“αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸ αž“αž·αž„αžˆαŸ’αž›αžΆαžŸαžœαŸƒαžαžΆαž‚αžΆαžαŸ‹αž‚αž·αžαž™αŸ‰αžΆαž„αžŽαžΆαž…αŸ†αž–αŸ„αŸ‡αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžš αž“αž·αž„αž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž›αž˜αž“αž»αžŸαŸ’αžŸαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αž“αžΆαž”αŸ’αžšαžΎαžœαžΆ αž’αŸ’αž“αž€αž―αž€αž‘αŸαžŸαž“αžΉαž„αžŠαž€αžŠαž„αŸ’αž αžΎαž˜αž’αŸ† αž±αž”αž‚αžΆαžαŸ‹αžŠαŸ„αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹ αž αžΎαž™αž“αž·αž™αžΆαž™αžŠαŸ„αž™αž“αžΏαž™αž αžαŸ‹αŸ– β€œαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αž“αžΆαž”αŸ’αžšαžΎαžœαžΆ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž‚αŸ’αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž›αŸ’αž’αž‘αŸαŸ” αž€αžŽαŸ’αžŠαž»αžšβ€‹αžšαž”αžŸαŸ‹β€‹αž™αžΎαž„β€‹αžŸαŸ’αžšαŸ‚αž€β€‹αž‘αŸ’αžšαž αŸ„β€‹αž™αŸ† αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž”αž“αŸ’αžβ€‹αžšαžŸαŸ‹β€‹αž“αŸ…β€‹αž‡αžΆαž˜αž½αž™β€‹αžŠαžΎαž˜β€‹αžαŸ’αžšαžŸαž€αŸ‹β€‹αž“αŸαŸ‡αŸ” αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž™αžΎαž„αžŸαŸ’αžšαž‘αžΆαž‰αŸ‹? αž–αŸ’αžšαŸ„αŸ‡αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž αŸαžαž»αž’αŸ’αžœαžΈαž™αžΎαž„αž˜αž·αž“αžŸαŸ’αžšαž›αžΆαž‰αŸ‹? αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αŸ†αžŽαŸ‚αžαŸ’αž˜αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž₯αžαžˆαž”αŸ‹αžˆαžš αžŠαŸ‚αž›αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž»αžαž„αžΆαžšαžαŸ’αž˜αžΈαŸ—αŸ” αž αžΎαž™αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž…αž„αŸ’αž€αŸ„αž˜αž˜αŸ’αžαž„αž αžΎαž™αž˜αŸ’αžαž„αž‘αŸ€αžαŸ” αž αžΎαž™β€‹αž€αŸ†αžŽαŸ‚β€‹αž…αžΆαžŸαŸ‹β€‹αžˆαž”αŸ‹β€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž‘αŸ…β€‹αž αžΎαž™ αž–αŸ’αžšαŸ„αŸ‡β€‹αž˜αžΆαž“β€‹αž€αžΆαžšβ€‹αžƒαž»αž”αžƒαž·αžβ€‹αž‚αŸ’αž“αžΆ αž“αž·αž„β€‹αž˜αžΆαž“β€‹αž’αžΆαžαŸŒβ€‹αž€αŸ†αž”αžΆαŸ†αž„β€‹αžŠαŸβ€‹αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™Β»αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž’αŸ‡αž’αžΆαž„αžαžΆαž‡αžΆαž˜αž½αž™ αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αŸαžαŸ’αžš 1.0 αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž“αžΉαž„αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ”

αžαžΎαž™αžΎαž„αž‚αž½αžšαž‡αžΏαž‘αŸ?

cert-manager 1.0 αž”αžΆαž“αž…αŸαž‰αž•αŸ’αžŸαžΆαž™

Cert-manager αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžš Kubernetes αžŠαžΎαž˜αŸ” αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž…αŸαž‰αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαž–αžΈαž”αŸ’αžšαž—αž–αž•αŸ’αžŸαŸαž„αŸ—αŸ– Let's Encrypt, HashiCorp Vault, Venafi, signing and self-signed key pairsαŸ” αžœαžΆαž€αŸαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžšαž€αŸ’αžŸαžΆαžŸαŸ„αž±αŸ’αž™αž‘αžΆαž“αŸ‹αžŸαž˜αŸαž™ αž“αž·αž„αž–αŸ’αž™αžΆαž™αžΆαž˜αž”αž“αŸ’αžαžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸ…αž–αŸαž›αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™ αž˜αž»αž“αž–αŸαž›αž–αž½αž€αžœαžΆαž•αž»αžαž€αŸ†αžŽαžαŸ‹αŸ” Cert-manager αž‚αžΊαž•αŸ’αž’αŸ‚αž€αž›αžΎ kube-lego αž αžΎαž™αž€αŸαž”αžΆαž“αž”αŸ’αžšαžΎαž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αž–αžΈαž‚αž˜αŸ’αžšαŸ„αž„αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž•αž„αžŠαŸ‚αžš αžŠαžΌαž…αž‡αžΆ kube-cert-manager αŸ”

αž€αŸ†αžŽαžαŸ‹αž…αŸ†αžŽαžΆαŸ†αž…αŸαž‰αž•αŸ’αžŸαžΆαž™

αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αŸ†αžŽαŸ‚ 1.0 αž™αžΎαž„αž”αžΆαž“αžŠαžΆαž€αŸ‹αžŸαž‰αŸ’αž‰αžΆαž“αŸƒαž€αžΆαžšαž‡αžΏαž‘αž»αž€αž…αž·αžαŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž›αž”αžΈαž†αŸ’αž“αžΆαŸ†αž“αŸƒαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‚αž˜αŸ’αžšαŸ„αž„αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαŸ” αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž“αŸαŸ‡ αžœαžΆαž”αžΆαž“αž’αž—αž·αžœαžŒαŸ’αžαž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αž»αžαž„αžΆαžš αž“αž·αž„αžŸαŸ’αžαŸαžšαž—αžΆαž– αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαž αž‚αž˜αž“αŸαŸ” αžŸαž–αŸ’αžœαžαŸ’αž„αŸƒαž“αŸαŸ‡αž™αžΎαž„αžƒαžΎαž‰αž˜αž“αž»αžŸαŸ’αžŸαž‡αžΆαž…αŸ’αžšαžΎαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžœαžΆαžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αžΆαž”αžΆαž“αž“αžΌαžœαž…αž„αŸ’αž€αŸ„αž˜ Kubernetes αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ αž€αŸαžŠαžΌαž…αž‡αžΆαž’αž“αž»αžœαžαŸ’αžαžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž•αŸ’αžŸαŸαž„αŸ—αž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž’αŸαž€αžΌαŸ” αž€αŸ†αž αž»αžŸαž‡αžΆαž…αŸ’αžšαžΎαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αž½αžŸαž‡αž»αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ 16 αž…αž»αž„αž€αŸ’αžšαŸ„αž™αŸ” αž αžΎαž™αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‚αž½αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžαžΌαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαžΌαž…αŸ” αž€αžΆαžšαž…αžΌαž›αž˜αžΎαž› API αž‡αžΆαž…αŸ’αžšαžΎαž“αž›αžΎαž€αž’αŸ’αžœαžΎαž’αŸ„αž™αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αžœαžΆαž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž‡αžΆαž˜αž½αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ” αž™αžΎαž„αž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž…αŸ†αž“αž½αž“ 1500 αž“αŸ…αž›αžΎ GitHub αžŠαŸ„αž™αž˜αžΆαž“αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αž–αžΈαžŸαž˜αžΆαž‡αž·αž€αžŸαž αž‚αž˜αž“αŸαž…αŸ†αž“αž½αž“ 253 αž“αžΆαž€αŸ‹αŸ”

αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ 1.0 αž™αžΎαž„αž”αŸ’αžšαž€αžΆαžŸαž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžšαžαžΆαž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαž‚αžΊαž‡αžΆαž‚αž˜αŸ’αžšαŸ„αž„αž…αžΆαžŸαŸ‹αž‘αž»αŸ†αŸ” αž™αžΎαž„αž€αŸαžŸαž“αŸ’αž™αžΆαžαžΆαž“αžΉαž„αžšαž€αŸ’αžŸαžΆ API αžšαž”αžŸαŸ‹αž™αžΎαž„αž±αŸ’αž™αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαŸ” v1.

αž’αžšαž‚αž»αžŽαž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αž”αžΆαž“αž‡αž½αž™αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž cert-manager αž‘αžΆαŸ†αž„αž”αžΈαž†αŸ’αž“αžΆαŸ†αž“αŸαŸ‡! αžŸαžΌαž˜αž±αŸ’αž™αž€αŸ†αžŽαŸ‚ 1.0 αž€αŸ’αž›αžΆαž™αž‡αžΆαžšαžΏαž„αžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αžŠαŸ†αž”αžΌαž„αž‚αŸαž”αž„αŸ’αž’αžŸαŸ‹αžŠαŸ‚αž›αž“αžΉαž„αž˜αž€αžŠαž›αŸ‹αŸ”

αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ 1.0 αž‚αžΊαž‡αžΆαž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžαŸαžšαž—αžΆαž–αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž•αŸ’αž“αŸ‚αž€αž’αžΆαž‘αž·αž—αžΆαž–αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ–

  • v1 API

  • αž€αŸ’αžšαž»αž˜αž€αžΆαžšαž„αžΆαžš kubectl cert-manager statusαžŠαžΎαž˜αŸ’αž”αžΈαž‡αž½αž™αžœαž·αž—αžΆαž‚αž”αž‰αŸ’αž αžΆ;

  • αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ APIs Kubernetes αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžαŸαžšαž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž;

  • αž€αžΆαžšαž€αžΆαž”αŸ‹αžˆαžΎαž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„;

  • αž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’ ACME αŸ”

αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΆαž€αžŠαžαžΆαž”αžΆαž“αž’αžΆαž“αž€αŸ†αžŽαžαŸ‹αž…αŸ†αžŽαžΆαŸ†αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž˜αž»αž“αž“αžΉαž„αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αŸ”

API v1

αž€αŸ†αžŽαŸ‚ v0.16 αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž˜αž½αž™ API v1beta1. αžœαžΆαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αž½αž™αž…αŸ†αž“αž½αž“ αž“αž·αž„αž”αžΆαž“αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž“αžΌαžœαž―αž€αžŸαžΆαžšαžœαžΆαž› API αž•αž„αžŠαŸ‚αžšαŸ” αž€αŸ†αžŽαŸ‚ 1.0 αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž›αžΎαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž‡αžΆαž˜αž½αž™αž“αžΉαž„ API v1. API αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαŸ’αžαŸαžšαž—αžΆαž–αžŠαŸ†αž”αžΌαž„αžšαž”αžŸαŸ‹αž™αžΎαž„ αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž€αžΆαžšαž’αžΆαž“αžΆαž—αžΆαž–αž†αž”αž‚αŸ’αž“αžΆαžšαž½αž…αž αžΎαž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž˜αž½αž™αž“αžΉαž„ API v1 αž™αžΎαž„αžŸαž“αŸ’αž™αžΆαžαžΆαž“αžΉαž„αžšαž€αŸ’αžŸαžΆαž—αžΆαž–αž†αž”αž‚αŸ’αž“αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž†αŸ’αž“αžΆαŸ†αžαžΆαž„αž˜αž»αžαŸ”

αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„ (αž…αŸ†αžŽαžΆαŸ†αŸ– αž§αž”αž€αžšαžŽαŸαž”αŸ†αž”αŸ’αž›αŸ‚αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αžΉαž„αžαŸ‚αžšαž€αŸ’αžŸαžΆαž’αŸ’αžœαžΈαŸ—αž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€)αŸ–

αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαŸ–

  • emailSANs αž₯αž‘αžΌαžœαž“αŸαŸ‡αž”αžΆαž“αž αŸ… emailAddresses

  • uriSANs - uris

αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž”αž“αŸ’αžαŸ‚αž˜αž—αžΆαž–αž†αž”αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ SANs αž•αŸ’αžŸαŸαž„αž‘αŸ€αž (αžˆαŸ’αž˜αŸ„αŸ‡αž”αŸ’αžšαž’αžΆαž“αž”αž‘ alt, αž”αŸ’αžšαž αŸ‚αž› αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚) αž€αŸαžŠαžΌαž…αž‡αžΆ Go API αž•αž„αžŠαŸ‚αžšαŸ” αž™αžΎαž„αž€αŸ†αž–αž»αž„αž›αž»αž”αž–αžΆαž€αŸ’αž™αž“αŸαŸ‡αž…αŸαž‰αž–αžΈ API αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎ Kubernetes 1.16+ - αž€αžΆαžšαž”αŸ†αž”αŸ’αž›αŸ‚αž„ webhooks αž“αžΉαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αŸ†αžŽαŸ‚ API αž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆ αž“αž·αž„αž‚αŸ’αž˜αžΆαž“αžαŸ’αž“αŸαžšαŸ” v1alpha2, v1alpha3, v1beta1 ΠΈ v1. αž‡αžΆαž˜αž½αž™αž–αž½αž€αž‚αŸ αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž€αŸ†αžŽαŸ‚αžαŸ’αž˜αžΈαž“αŸƒ API αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž¬αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž“αž’αžΆαž“αž…αžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αžΎαž„αžœαž·αž‰αŸ” αž™αžΎαž„αžŸαžΌαž˜αž•αŸ’αžαž›αŸ‹αž’αž“αž»αžŸαžΆαžŸαž“αŸαž™αŸ‰αžΆαž„αž˜αž»αžαž˜αžΆαŸ†αž±αŸ’αž™αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž“αžΌαžœ manifests αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αŸ… API v1αžŠαžΌαž…αžŠαŸ‚αž›αž€αŸ†αžŽαŸ‚αž˜αž»αž“αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžŠαž·αžŸαŸαž’αž€αŸ’αž“αž»αž„αž–αŸαž›αž†αžΆαž”αŸ‹αŸ—αž“αŸαŸ‡αŸ” αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ legacy αž€αŸ†αžŽαŸ‚αžšαž”αžŸαŸ‹ cert-manager αž“αžΉαž„αž“αŸ…αžαŸ‚αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” v1αž‡αŸ†αž αžΆαž“αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž’αžΆαž…αžšαž€αž”αžΆαž“ αž“αŸ…αž‘αžΈαž“αŸαŸ‡.

αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ cert kubectl

αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’αžαŸ’αž˜αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αŸ… kubectl αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαŸŠαžΎαž”αž’αž„αŸ’αž€αŸαžαž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αžΆαžšαž˜αž·αž“αž…αŸαž‰αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαŸ” kubectl cert-manager status αž₯αž‘αžΌαžœαž“αŸαŸ‡αž•αŸ’αžαž›αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‡αžΆαž…αŸ’αžšαžΎαž“αž’αŸ†αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž€αžΎαžαž‘αžΎαž„αž‡αžΆαž˜αž½αž™αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžš αž αžΎαž™αž€αŸαž”αž„αŸ’αž αžΆαž‰αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŠαŸ‚αž›αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸαž‰αž•αž„αžŠαŸ‚αžšαŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžŠαŸ†αž‘αžΎαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž“αŸ’αžαŸ‚αž˜αž’αŸ’αž“αž€αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αŸ” kubectl cert-manager status certificate <имя-сСртификата>αžŠαŸ‚αž›αž“αžΉαž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ αž“αž·αž„αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αžŠαžΌαž…αž‡αžΆ CertificateRequest, Secret, Issuer, and Order and Challenges αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαž–αžΈ 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
[...]

αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ APIs Kubernetes αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžαŸαžšαž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αžαŸ”

Cert-manager αž‚αžΊαž‡αžΆαž’αŸ’αž“αž€αžŠαŸ†αž”αžΌαž„αž‚αŸαžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αž Kubernetes CRDs αŸ” αž“αŸαŸ‡αžšαž½αž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αŸ†αžŽαŸ‚ Kubernetes αžšαž αžΌαžαžŠαž›αŸ‹ 1.11 αž˜αžΆαž“αž“αŸαž™αžαžΆαž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž‚αžΆαŸ†αž‘αŸ’αžšαž€αŸαžšαŸ’αžαž·αŸαžŠαŸ†αžŽαŸ‚αž› apiextensions.k8s.io/v1beta1 αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CRDs αžšαž”αžŸαŸ‹αž™αžΎαž„αž•αž„αžŠαŸ‚αžšαŸ” admissionregistration.k8s.io/v1beta1 αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ webhooks αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžŠαž·αžŸαŸαž’ αž αžΎαž™αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž™αž€αž…αŸαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes αž…αžΆαž”αŸ‹αž–αžΈαž€αŸ†αžŽαŸ‚ 1.22αŸ” αž‡αžΆαž˜αž½αž™αž“αžΉαž„ 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) αžŠαŸ‚αž›αž“αžΉαž„αž‡αž½αž™αž’αŸ’αž“αž€αž±αŸ’αž™αžŠαžΉαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž“αžΌαžœαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž€αžΎαžαž‘αžΎαž„αŸ” αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž…αŸ†αž“αž½αž“αž€αŸ†αžŽαžαŸ‹αž αŸαžαž» αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αŸαžαŸŒαž˜αžΆαž“αž”αŸ†αž”αžΆαžαŸ‹αž€αŸ†αž αž»αžŸ αž“αŸ…αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαŸ”

αž‚αž“αŸ’αž›αžΉαŸ‡αŸ– αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αž˜αŸ’αžšαž·αž 2 (Info) αž’αŸ’αž“αž€αž’αžΆαž…αž”αžŠαž·αžŸαŸαž’αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎ global.logLevel αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„ Helm αŸ”

αž…αŸ†αžŽαžΆαŸ†αŸ– αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž‚αžΊαž‡αžΆαž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αž…αž»αž„αž€αŸ’αžšαŸ„αž™αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αŸ…αž–αŸαž›αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ αžŸαžΌαž˜αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž—αžΆαž–αž‡αžΆαž’αŸ’αž“αž€αžŠαžΉαž€αž“αžΆαŸ†.

αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’ n.b.αŸ– αžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αžšαŸ„αž˜αž€αŸ’αžšαžŽαžΆαžαŸ‹αžšαž”αžŸαŸ‹ Kubernetes αž‘αž‘αž½αž›αž”αžΆαž“αžŠαŸ†αž”αžΌαž“αŸ’αž˜αžΆαž“αžŠαŸαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž–αžΈαž‚αŸ’αžšαžΌαžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αž αž€αŸαžŠαžΌαž…αž‡αžΆαž‡αŸ†αž“αž½αž™αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαžŠαŸ‚αž›αž˜αžΆαž“αž‚αž»αžŽαž—αžΆαž–αžαŸ’αž–αžŸαŸ‹ αž’αŸ’αž“αž€αž’αžΆαž…αž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αžœαž‚αŸ’αž‚αžŸαž·αž€αŸ’αžŸαžΆαžŠαŸ‚αž›αž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αžαŸ’αž›αžΆαŸ†αž„αž›αžΎαž’αŸŠαžΈαž“αž’αžΊαžŽαž·αž αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ KubernetesαžŠαŸ‚αž›αž“αžΉαž„αž”αŸ’αžšαž–αŸ’αžšαžΉαžαŸ’αžαž‘αŸ…αž“αŸ…αžαŸ’αž„αŸƒαž‘αžΈ 28-30 αžαŸ‚αž€αž‰αŸ’αž‰αžΆ αž“αž·αž„ Kubernetes MegaαžŠαŸ‚αž›αž“αžΉαž„αž”αŸ’αžšαž–αŸ’αžšαžΉαžαŸ’αžαž‘αŸ…αž“αŸ…αžαŸ’αž„αŸƒαž‘αžΈ ៑ៀ-៑៦ αžαŸ‚αžαž»αž›αžΆαŸ”

αž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’ ACME

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‡αžΆαž‘αžΌαž‘αŸ…αž”αŸ†αž•αž»αžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαž‚αžΊαž”αŸ’αžšαž αŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž‘αŸ…αž“αžΉαž„αž€αžΆαžšαž…αŸαž‰αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαž–αžΈ Let's Encrypt αžŠαŸ„αž™αž”αŸ’αžšαžΎ ACMEαŸ” αž€αŸ†αžŽαŸ‚ 1.0 αž‚αžΊαž‚αž½αžšαž±αŸ’αž™αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αžαž·αž€αŸ‚αž›αž˜αŸ’αž’αžŸαž αž‚αž˜αž“αŸαžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’αžαžΌαž… αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαŸ†αžαžΆαž“αŸ‹αž–αžΈαžšαžŠαž›αŸ‹αž’αŸ’αž“αž€αž…αŸαž‰ ACME αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αž”αž·αž‘αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΌαž“αžŸαŸ„αž‚αžŽαž“αžΈ

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžš ACME αž€αŸ’αž“αž»αž„αž”αžšαž·αž˜αžΆαžŽαž…αŸ’αžšαžΎαž“ αž’αŸ’αž“αž€αž‘αŸ†αž“αž„αž‡αžΆαž”αŸ’αžšαžΎαž‚αžŽαž“αžΈαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸ…αž›αžΎαž…αž„αŸ’αž€αŸ„αž˜αž…αŸ’αžšαžΎαž“ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αž€αžΆαžšαž…αŸαž‰αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αžΉαž„αž’αž“αž»αžœαžαŸ’αžαž…αŸ†αž–αŸ„αŸ‡αž–αž½αž€αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αžœαžΆαž’αžΆαž…αž‘αŸ…αžšαž½αž…αžšαž½αž…αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αŸαžαŸ’αžšαž“αŸ…αž–αŸαž›αž…αž˜αŸ’αž›αž„αž€αžΆαžšαžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ 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 αžαŸ‚αž€αž‰αŸ’αž‰αžΆ αž…αžΌαžšαž™αžΎαž„αž’αŸŠαž·αž“αž‚αŸ’αžšαžΈαž” αž“αžΉαž„αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈ αž‘αŸ…αž’αžΆαž‡αŸ’αž‰αžΆαž’αžšαžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžš root αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” ISRG Root. αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαžŠαŸ‚αž›αž˜αžΆαž“αž αžαŸ’αžαž›αŸαžαžΆαž†αŸ’αž›αž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ†αž“αž½αžŸαžŠαŸ„αž™ Identrust. αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸαŸ‡αž˜αž·αž“αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž…αŸ†αž–αŸ„αŸ‡αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαž‘αŸ αžšαžΆαž›αŸ‹αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– αž¬αžαŸ’αž˜αžΈαžŠαŸ‚αž›αž”αžΆαž“αž…αŸαž‰αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘αž“αŸαŸ‡αž“αžΉαž„αž”αŸ’αžšαžΎ root CA αžαŸ’αž˜αžΈαŸ”

αžαŸ„αŸ‡ αž’αŸŠαž·αž“αž‚αŸ’αžšαžΈαž” αž…αž»αŸ‡αž αžαŸ’αžαž›αŸαžαžΆαž›αžΎαžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαž‡αžΆαž˜αž½αž™ CA αž“αŸαŸ‡αžšαž½αž…αž αžΎαž™ αž αžΎαž™αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž–αž½αž€αž‚αŸαž‡αžΆ "αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαž‡αŸ†αž“αž½αžŸ" αžαžΆαž˜αžšαž™αŸˆ ACME αŸ” αž€αŸ†αžŽαŸ‚αžšαž”αžŸαŸ‹ cert-manager αž“αŸαŸ‡αž˜αžΆαž“αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ†αžŽαžαŸ‹αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž’αŸ’αž“αž€αž…αŸαž‰αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš 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"

αžŸαžΌαž˜αž…αŸ†αžŽαžΆαŸ†αžαžΆ root CA αž“αŸαŸ‡αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžŠαž·αžŸαŸαž’αž€αŸ’αž“αž»αž„αž–αŸαž›αž†αžΆαž”αŸ‹αŸ—αž“αŸαŸ‡ Let's Encrypt αž“αžΉαž„αž”αž“αŸ’αžαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹αž“αŸαŸ‡αžšαž αžΌαžαžŠαž›αŸ‹αžαŸ’αž„αŸƒαž‘αžΈ 29 αžαŸ‚αž€αž‰αŸ’αž‰αžΆ αž†αŸ’αž“αžΆαŸ† 2021αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹