Інформація в цьому документі може бути застарілою
Дата оновлення цього документа старіша за оригінал, можливо інформація в ньому застаріла. Радимо ознайомитись з оригіналом англійською для отримання найсвіжіших відомостей: CertificateSigningRequest
CertificateSigningRequest
apiVersion: certificates.k8s.io/v1
import "k8s.io/api/certificates/v1"
CertificateSigningRequest
Обʼєкти CertificateSigningRequest надають механізм для отримання сертифікатів x509 шляхом подання запиту на підписання сертифіката та його асинхронного схвалення і видачі.
Kubelets використовують цей API для отримання:
- клієнтських сертифікатів для автентифікації до kube-apiserver (з використанням signerName "kubernetes.io/kube-apiserver-client-kubelet").
- серверних сертифікатів для TLS-точок доступу, до яких kube-apiserver може підключатися безпечно (з використанням signerName "kubernetes.io/kubelet-serving").
Цей API може бути використаний для запиту клієнтських сертифікатів для автентифікації до kube-apiserver (з використанням signerName "kubernetes.io/kube-apiserver-client") або для отримання сертифікатів від нестандартних підписувачів, що не належать до Kubernetes.
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata (ObjectMeta)
spec (CertificateSigningRequestSpec), обовʼязково
spec містить запит на сертифікат і є незмінним після створення. Тільки поля request, signerName, expirationSeconds та usages можуть бути встановлені під час створення. Інші поля визначаються Kubernetes і не можуть бути змінені користувачами.
status (CertificateSigningRequestStatus)
status містить інформацію про те, чи запит схвалено або відхилено, а також сертифікат, виданий підписувачем, або умови збою, які вказують на збій підписувача.
CertificateSigningRequestSpec
CertificateSigningRequestSpec містить запит на сертифікат.
request ([]byte), обовʼязково
Atomic: буде замінено під час злиття
request містить x509 запит на підписання сертифіката, закодований у блоці PEM "CERTIFICATE REQUEST". При серіалізації у форматі JSON або YAML дані додатково кодуються в base64.
signerName (string), обовʼязково
signerName вказує на запитуваного підписувача і є кваліфікованим імʼям.
Запити List/watch для CertificateSigningRequests можуть фільтруватися за цим полем з використанням fieldSelector "spec.signerName=NAME".
Добре відомі підписувачі Kubernetes:
- "kubernetes.io/kube-apiserver-client": видає клієнтські сертифікати, які можна використовувати для автентифікації до kube-apiserver. Запити для цього підписувача ніколи не затверджуються автоматично kube-controller-manager, можуть бути видані контролером "csrsigning" у kube-controller-manager.
- "kubernetes.io/kube-apiserver-client-kubelet": видає клієнтські сертифікати, які kubelets використовують для автентифікації до kube-apiserver. Запити для цього підписувача можуть бути автоматично затверджені контролером "csrapproving" у kube-controller-manager і можуть бути видані контролером "csrsigning" у kube-controller-manager.
- "kubernetes.io/kubelet-serving": видає серверні сертифікати, які kubelets використовують для обслуговування TLS-точок доступу, до яких kube-apiserver може підключатися безпечно. Запити для цього підписувача ніколи не затверджуються автоматично kube-controller-manager і можуть бути видані контролером "csrsigning" у kube-controller-manager.
Докладніше: https://k8s.io/docs/reference/access-authn-authz/certificate-signing-requests/#kubernetes-signers
Можуть також бути вказані нестандартні signerNames. Підписувач визначає:
- Розповсюдження довіри: як розповсюджуються довірчі пакети (CA bundles).
- Дозволені субʼєкти: та поведінка, коли запитується недозволений субʼєкт.
- Обовʼязкові, дозволені або заборонені розширення x509 у запиті (включаючи те, чи дозволені subjectAltNames, які типи, обмеження на дозволені значення) та поведінка при запиті недозволеного розширення.
- Обовʼязкові, дозволені або заборонені ключові використання / розширені ключові використання.
- Термін дії сертифіката: чи він фіксований підписувачем, налаштовується адміністратором.
- Чи дозволені запити на сертифікати CA.
expirationSeconds (int32)
expirationSeconds — це запитувана тривалість дії виданого сертифіката. Підписувач сертифіката може видати сертифікат з іншою тривалістю дії, тому клієнт повинен перевірити різницю між полями notBefore і notAfter у виданому сертифікаті, щоб визначити фактичну тривалість.
Реалізації v1.22+ вбудованих підписувачів Kubernetes дотримуватимуться цього поля, якщо запитувана тривалість не перевищує максимальну тривалість, яку вони дозволяють відповідно до прапорця CLI
--cluster-signing-duration
для контролера Kubernetes.Підписувачі сертифікатів можуть не дотримуватися цього поля з різних причин:
- Старий підписувач, який не знає про це поле (наприклад, вбудовані реалізації до v1.22)
- Підписувач, чия налаштована максимальна тривалість коротша за запитувану тривалість
- Підписувач, чия налаштована мінімальна тривалість довша за запитувану тривалість
Мінімальне дійсне значення для expirationSeconds — 600, тобто 10 хвилин.
extra (map[string][]string)
extra містить додаткові атрибути користувача, який створив CertificateSigningRequest. Заповнюється API-сервером при створенні та є незмінним.
groups ([]string)
Atomic: буде замінено під час злиття
groups містить членство в групах користувача, який створив CertificateSigningRequest. Заповнюється API-сервером при створенні та є незмінним.
uid (string)
uid містить uid користувача, який створив CertificateSigningRequest. Заповнюється API-сервером при створенні та є незмінним.
usages ([]string)
Atomic: буде замінено під час злиття
usages вказує набір запитуваних використань ключів у виданому сертифікаті.
Запити на TLS клієнтські сертифікати зазвичай запитують: "digital signature", "key encipherment", "client auth".
Запити на TLS серверні сертифікати зазвичай запитують: "key encipherment", "digital signature", "server auth".
Дійсні значення: "signing", "digital signature", "content commitment", "key encipherment", "key agreement", "data encipherment", "cert sign", "crl sign", "encipher only", "decipher only", "any", "server auth", "client auth", "code signing", "email protection", "s/mime", "ipsec end system", "ipsec tunnel", "ipsec user", "timestamping", "ocsp signing", "microsoft sgc", "netscape sgc"
username (string)
username містить імʼя користувача, який створив CertificateSigningRequest. Заповнюється API-сервером при створенні та є незмінним.
CertificateSigningRequestStatus
CertificateSigningRequestStatus містить умови, що використовуються для позначення статусу запиту (схвалено/відхилено/не вдалося), та виданий сертифікат.
certificate ([]byte)
Atomic: буде замінено під час злиття
certificate заповнюється виданим сертифікатом підписувача після наявності умови "Approved". Це поле встановлюється через субресурс /status. Після заповнення це поле є незмінним.
Якщо запит на підписання сертифіката відхилено, додається умова типу "Denied", і це поле залишається порожнім. Якщо підписувач не може видати сертифікат, додається умова типу "Failed", і це поле залишається порожнім.
Вимоги до валідації:
- certificate повинно містити один або більше PEM блоків.
- Усі PEM блоки повинні мати мітку "CERTIFICATE", не містити заголовків, а закодовані дані повинні бути структурою сертифіката BER-кодованого ASN.1, як описано в розділі 4 RFC5280.
- Не-PEM вміст може зʼявлятися до або після блоків PEM "CERTIFICATE" і не перевіряється, щоб дозволити пояснювальний текст, як описано в розділі 5.2 RFC7468.
Якщо в наявності більше одного блоку PEM, і визначення запитуваного spec.signerName не вказує інше, перший блок є виданим сертифікатом, а наступні блоки слід розглядати як проміжні сертифікати та представлятись під час TLS-handshake.
Сертифікат закодований у форматі PEM.
При серіалізації у форматі JSON або YAML дані додатково кодуються в base64, тому вони складаються з:
base64( -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- )
conditions ([]CertificateSigningRequestCondition)
Map: унікальні значення за ключем типу зберігатимуться під час злиття
conditions, застосовані до запиту. Відомі стани: "Approved", "Denied" та "Failed".
CertificateSigningRequestCondition описує стан обʼєкта CertificateSigningRequest
conditions.status (string), обовʼязково
статус стану, одне з True, False, Unknown. Стани "Approved", "Denied" та "Failed" не можуть бути "False" або "Unknown".
conditions.type (string), обовʼязково
тип стану. Відомі стани: "Approved", "Denied" та "Failed".
Стан "Approved" додається через субресурс /approval, що вказує на те, що запит було схвалено і сертифікат повинен бути виданий підписувачем.
Стан "Denied" додається через субресурс /approval, що вказує на те, що запит було відхилено і сертифікат не повинен бути виданий підписувачем.
Стан "Failed" додається через субресурс /status, що вказує на те, що підписувачу не вдалося видати сертифікат.
Стан "Approved" та "Denied" є взаємозаперечними. Стани "Approved", "Denied" та "Failed" не можуть бути видалені після додавання.
Дозволено лише один стан певного типу.
conditions.lastTransitionTime (Time)
lastTransitionTime - це час останньої зміни стану з одного статусу до іншого. Якщо не встановлено, коли додається новий тип стану або змінюється статус поточного стану, сервер стандартно встановлює цей час на поточний.
Time — це обгортка навколо time.Time, яка підтримує коректне перетворення у YAML та JSON. Для багатьох з функцій, які пропонує пакет time, надаються обгортки.
conditions.lastUpdateTime (Time)
lastUpdateTime — це час останнього оновлення цього стану.
Time — це обгортка навколо time.Time, яка підтримує коректне перетворення у YAML та JSON. Для багатьох з функцій, які пропонує пакет time, надаються обгортки.
conditions.message (string)
message містить зрозуміле для людини повідомлення з деталями про стан запиту.
conditions.reason (string)
reason вказує коротку причину стану запиту.
CertificateSigningRequestList
CertificateSigningRequestList — це колекція обʼєктів CertificateSigningRequest.
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequestList
metadata (ListMeta)
items ([]CertificateSigningRequest), обовʼязково
items — це колекція обʼєктів CertificateSigningRequest.
Операції
get
отримати вказаний CertificateSigningRequest
HTTP запит
GET /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
Параметри
name (в шляху): string, обовʼязково
name of the CertificateSigningRequest
pretty (в запиті): string
Відповідь
200 (CertificateSigningRequest): OK
401: Unauthorized
get
отримати схвалення вказаного CertificateSigningRequest
HTTP запит
GET /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/approval
Параметри
name (в шляху): string, обовʼязково
name of the CertificateSigningRequest
pretty (в запиті): string
Відповідь
200 (CertificateSigningRequest): OK
401: Unauthorized
get
отримати статус вказаного CertificateSigningRequest
HTTP запит
GET /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/status
Параметри
name (в шляху): string, обовʼязково
name of the CertificateSigningRequest
pretty (в запиті): string
Відповідь
200 (CertificateSigningRequest): OK
401: Unauthorized
list
перелік або перегляд обʼєктів типу CertificateSigningRequest
HTTP запит
GET /apis/certificates.k8s.io/v1/certificatesigningrequests
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (CertificateSigningRequestList): OK
401: Unauthorized
create
створення CertificateSigningRequest
HTTP запит
POST /apis/certificates.k8s.io/v1/certificatesigningrequests
Параметри
body: CertificateSigningRequest, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (CertificateSigningRequest): OK
201 (CertificateSigningRequest): Created
202 (CertificateSigningRequest): Accepted
401: Unauthorized
update
заміна вказаного CertificateSigningRequest
HTTP запит
PUT /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
Параметри
name (в шляху): string, обовʼязково
name of the CertificateSigningRequest
body: CertificateSigningRequest, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (CertificateSigningRequest): OK
201 (CertificateSigningRequest): Created
401: Unauthorized
update
заміна підтвердження вказаного CertificateSigningRequest
HTTP запит
PUT /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/approval
Параметри
name (в шляху): string, обовʼязково
name of the CertificateSigningRequest
body: CertificateSigningRequest, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (CertificateSigningRequest): OK
201 (CertificateSigningRequest): Created
401: Unauthorized
update
заміна статусу вказаного CertificateSigningRequest
HTTP запит
PUT /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/status
Параметри
name (в шляху): string, обовʼязково
name of the CertificateSigningRequest
body: CertificateSigningRequest, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (CertificateSigningRequest): OK
201 (CertificateSigningRequest): Created
401: Unauthorized
patch
часткове оновлення вказаного CertificateSigningRequest
HTTP запит
PATCH /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
Параметри
name (в шляху): string, обовʼязково
name of the CertificateSigningRequest
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (CertificateSigningRequest): OK
201 (CertificateSigningRequest): Created
401: Unauthorized
patch
часткове оновлення затвердження вказаного CertificateSigningRequest
HTTP запит
PATCH /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/approval
Параметри
name (в шляху): string, обовʼязково
name of the CertificateSigningRequest
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (CertificateSigningRequest): OK
201 (CertificateSigningRequest): Created
401: Unauthorized
patch
часткове оновлення статусу вказаного CertificateSigningRequest
HTTP запит
PATCH /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/status
Параметри
name (в шляху): string, обовʼязково
name of the CertificateSigningRequest
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (CertificateSigningRequest): OK
201 (CertificateSigningRequest): Created
401: Unauthorized
delete
видалення CertificateSigningRequest
HTTP запит
DELETE /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
Параметри
name (в шляху): string, обовʼязково
name of the CertificateSigningRequest
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection
видалення колекції CertificateSigningRequest
HTTP запит
DELETE /apis/certificates.k8s.io/v1/certificatesigningrequests
Параметри
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): OK
401: Unauthorized