Тәжірибелі, дана инженерден сертификат-менеджер туралы не ойлайтынын және оны неге барлығы пайдаланады деп сұрасаңыз, маман күрсініп, оны сенімді түрде құшақтап, шаршаған күйде: «Оны бәрі пайдаланады, өйткені ақылға қонымды балама жоқ. Біздің тышқандар жылайды, шаншады, бірақ бұл кактуспен өмір сүре береді. Біз неге жақсы көреміз? Өйткені ол жұмыс істейді. Біз неге сүймейміз? Өйткені жаңа мүмкіндіктерді пайдаланатын жаңа нұсқалар үнемі шығып тұрады. Және сіз кластерді қайта-қайта жаңартуыңыз керек. Ал ескі нұсқалар жұмысын тоқтатады, өйткені мұнда қастандық пен үлкен жұмбақ шамандық бар.
Бірақ әзірлеушілер бұл туралы айтады сертификат-менеджер 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.: Мұның бәрі Кубернетестің көмегімен қалай жұмыс істейтіні туралы көбірек білу, тәжірибелі мұғалімдерден құнды кеңестер алу, сондай-ақ сапалы техникалық қолдау көрсету үшін сіз онлайн-интенсивтерге қатыса аласыз.
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 қыркүйек Шифрлаймыз 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