cert-manager 1.0 шығарылды

Тәжірибелі, дана инженерден сертификат-менеджер туралы не ойлайтынын және оны неге барлығы пайдаланады деп сұрасаңыз, маман күрсініп, оны сенімді түрде құшақтап, шаршаған күйде: «Оны бәрі пайдаланады, өйткені ақылға қонымды балама жоқ. Біздің тышқандар жылайды, шаншады, бірақ бұл кактуспен өмір сүре береді. Біз неге жақсы көреміз? Өйткені ол жұмыс істейді. Біз неге сүймейміз? Өйткені жаңа мүмкіндіктерді пайдаланатын жаңа нұсқалар үнемі шығып тұрады. Және сіз кластерді қайта-қайта жаңартуыңыз керек. Ал ескі нұсқалар жұмысын тоқтатады, өйткені мұнда қастандық пен үлкен жұмбақ шамандық бар.

Бірақ әзірлеушілер бұл туралы айтады сертификат-менеджер 1.0 бәрі өзгереді.

Сенеміз бе?

cert-manager 1.0 шығарылды

Сертификаттау менеджері - Kubernetes сертификатын басқарудың жергілікті контроллері. Оны әртүрлі көздерден сертификаттар шығару үшін пайдалануға болады: Let's Encrypt, HashiCorp Vault, Venafi, қол қою және өздігінен қол қойылған кілт жұптары. Ол сондай-ақ кілттерді жарамдылық мерзіміне қарай жаңартуға мүмкіндік береді, сондай-ақ сертификаттарды мерзімі біткенге дейін белгіленген уақытта автоматты түрде жаңартуға тырысады. Cert-manager kube-lego-ға негізделген және сонымен қатар kube-cert-manager сияқты басқа ұқсас жобалардың кейбір амалдарын қолданған.

Шығарылым жазбалары

1.0 нұсқасымен біз сертификат-менеджер жобасының үш жылдық дамуы үшін сенім белгісін қойдық. Осы уақыт ішінде ол функционалдылық пен тұрақтылықта айтарлықтай дамыды, бірақ бәрінен бұрын қауымдастықта. Бүгін біз көптеген адамдар оны Kubernetes кластерлерін қорғау үшін, сондай-ақ оны экожүйенің әртүрлі бөліктеріне орналастыру үшін қолданып жатқанын көреміз. Соңғы 16 шығарылымда көптеген қателер түзетілді. Ал бұзу керек нәрсе бұзылады. API-мен жұмыс істеу үшін бірнеше рет бару оның пайдаланушылармен өзара әрекеттесуін жақсартты. Біз GitHub жүйесіндегі 1500 мәселені 253 қауымдастық мүшесінен көбірек тарту сұрауларымен шештік.

1.0 шығарылымымен біз сертификат-менеджердің жетілген жоба екенін ресми түрде мәлімдейміз. Біз сондай-ақ API үйлесімділігін сақтауға уәде береміз v1.

Осы үш жыл бойы сертификат-менеджер болуымызға көмектескендердің барлығына мың алғыс! 1.0 нұсқасы алдағы көптеген үлкен нәрселердің біріншісі болсын.

1.0 шығарылымы бірнеше басым бағыттары бар тұрақты шығарылым болып табылады:

  • v1 ОТ;

  • команда 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-manager күйінің пәрмені

Біздің кеңейтімдегі жаңа жақсартулармен kubectl сертификаттарды бермеумен байланысты проблемаларды тексеру оңайырақ болды. kubectl cert-manager status енді сертификаттармен не болып жатқаны туралы көбірек ақпарат береді және сертификат беру кезеңін көрсетеді.

Кеңейтімді орнатқаннан кейін іске қосуға болады kubectl cert-manager status certificate <имя-сертификата>, ол берілген атпен сертификатты және ACME сертификаттарын пайдалансаңыз, CertificateRequest, Secret, Issuer және Order and Challenges сияқты кез келген қатысты ресурстарды іздейді.

Әлі дайын емес сертификатты жөндеудің мысалы:

$ 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-ді енгізген алғашқылардың бірі болды. Бұл және 1.11 дейінгі Kubernetes нұсқаларына қолдау көрсету бізге мұраны қолдау қажеттігін білдірді 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 Хельмчартта.

Ескертпе: Ақаулықтарды жою кезінде журналдарды қарау соңғы шара болып табылады. Қосымша ақпарат алу үшін біздің көшбасшылық.

Редактордың n.b.: Мұның бәрі Кубернетестің көмегімен қалай жұмыс істейтіні туралы көбірек білу, тәжірибелі мұғалімдерден құнды кеңестер алу, сондай-ақ сапалы техникалық қолдау көрсету үшін сіз онлайн-интенсивтерге қатыса аласыз. Кубернетес базасы28-30 қыркүйекте өтетін және Kubernetes Mega14-16 қазанда өтеді.

ACME жақсартулары

Сертификат-менеджердің ең көп тараған қолданылуы ACME көмегімен Let's Encrypt сертификаттарын шығарумен байланысты болуы мүмкін. 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 қыркүйек Шифрлаймыз өтеді өзіңіздің CA түбіріңізге 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 қыркүйегіне дейін белсенді күйінде сақтайды.

Ақпарат көзі: www.habr.com

пікір қалдыру