PodCertificateRequest v1beta1
apiVersion: certificates.k8s.io/v1beta1
import "k8s.io/api/certificates/v1beta1"
PodCertificateRequest
PodCertificateRequest кодує pod, що запитує сертифікат від певного підписувача.
Kubelets використовують цей API для реалізації cпроєцьованих томів podCertificate.
apiVersion: certificates.k8s.io/v1beta1
kind: PodCertificateRequest
metadata (ObjectMeta)
metadata містить метадані обʼєкта.
spec (PodCertificateRequestSpec), обовʼязково
spec містить детальну інформацію про сертифікат, який запитується.
status (PodCertificateRequestStatus)
статус містить виданий сертифікат та стандартний набір станів.
PodCertificateRequestSpec
PodCertificateRequestSpec описує запит на сертифікат. Всі поля є незмінними після створення.
nodeName (string), обовʼязково
nodeName — це імʼя вузла, до якого приписано под.
nodeUID (string), обовʼязково
nodeUID — це UID вузла, до якого приписано под.
podName (string), обовʼязково
podName — це імʼя пода, в який буде підключено сертифікат.
podUID (string), обовʼязково
podUID — це UID пода, в який буде підключено сертифікат.
serviceAccountName (string), обовʼязково
serviceAccountName — це імʼя службового облікового запису, під яким працює под.
serviceAccountUID (string), обовʼязково
serviceAccountUID — це UID службового облікового запису, під яким працює под.
signerName (string), обовʼязково
signerName вказує на запитаного підписувача.
Всі імена підписувачів, що починаються з
kubernetes.io, зарезервовані для використання проєктом Kubernetes. Наразі існує один відомий підписувач, задокументований проєктом Kubernetes,kubernetes.io/kube-apiserver-client-pod, який видаватиме клієнтські сертифікати, зрозумілі kube-apiserver. Наразі він не реалізований.stubPKCS10Request ([]byte), обовʼязково
PKCS#10 запит на підпис сертифіката (DER-серіалізований), згенерований Kubelet за допомогою приватного ключа субʼєкта.
Більшість реалізацій підписувачів ігнорують вміст CSR, крім витягання відкритого ключа субʼєкта. API-сервер автоматично перевіряє підпис CSR під час допуску, тому підписувачеві не потрібно повторювати перевірку. CSR, згенеровані kubelet, повністю порожні.
Відкритий ключ субʼєкта повинен бути одним із наступних типів: RSA3072, RSA4096, ECDSAP256, ECDSAP384, ECDSAP521 або ED25519. Зверніть увагу, що цей список може бути розширений у майбутньому.
Реалізації підписувачів не обовʼязково підтримують усі типи ключів, підтримувані kube-apiserver та kubelet. Якщо підписувач не підтримує тип ключа, використаний для даного PodCertificateRequest, він повинен відхилити запит, встановивши запис у status.conditions з типом "Denied" та причиною "UnsupportedKeyType". Він також може запропонувати тип ключа, який він підтримує, у полі message.
maxExpirationSeconds (int32)
maxExpirationSeconds — максимальний термін дії сертифіката.
Якщо це поле пропущено, kube-apiserver встановить значення 86400 (24 години). kube-apiserver відхилить значення, менші за 3600 (1 година). Максимально допустиме значення — 7862400 (91 день).
Після цього підписант може видавати сертифікати з будь-яким терміном дії, коротшим за MaxExpirationSeconds, але не коротшим за 3600 секунд (1 година). Це обмеження застосовується kube-apiserver. Підписанти
kubernetes.ioніколи не видають сертифікати з терміном дії, довшим за 24 години.pkixPublicKey ([]byte)
PKIX-серіалізований відкритий ключ, на який підписувач видасть сертифікат.
Відкритий ключ повинен бути одним із наступних типів: RSA3072, RSA4096, ECDSAP256, ECDSAP384, ECDSAP521 або ED25519. Зверніть увагу, що цей список може бути розширений у майбутньому.
Реалізації підписувачів не обовʼязково підтримують усі типи ключів, підтримувані kube-apiserver та kubelet. Якщо підписувач не підтримує тип ключа, використаний для даного PodCertificateRequest, він повинен відхилити запит, встановивши запис у status.conditions з типом "Denied" та причиною "UnsupportedKeyType". Він також може запропонувати тип ключа, який він підтримує, у полі message.
Застаріло: це поле замінено на StubPKCS10Request. Якщо встановлено StubPKCS10Request, це поле має бути порожнім. Реалізації підписувача повинні витягувати відкритий ключ із поля StubPKCS10Request.
proofOfPossession ([]byte)
Доказ того, що запитуючий kubelet володіє приватним ключем, що відповідає pkixPublicKey.
Він формується шляхом підписання ASCII-байтів UID пода за допомогою
pkixPublicKey.kube-apiserver перевіряє доказ володіння під час створення PodCertificateRequest.
Якщо ключ є RSA, підпис здійснюється над ASCII-байтами UID пода, використовуючи RSASSA-PSS з RFC 8017 (як реалізовано у функції golang crypto/rsa.SignPSS з nil опціями).
Якщо ключ є ECDSA, підпис здійснюється відповідно до SEC 1, Version 2.0 (як реалізовано у функції golang crypto/ecdsa.SignASN1)
Якщо ключ є ED25519, підпис здійснюється відповідно до ED25519 Specification (як реалізовано у бібліотеці golang crypto/ed25519.Sign).
Застаріло: це поле замінено на StubPKCS10Request. Якщо встановлено StubPKCS10Request, це поле має бути порожнім.
unverifiedUserAnnotations (map[string]string)
unverifiedUserAnnotations дозволяють авторам подів передавати додаткову інформацію до реалізації підписувача. Kubernetes жодним чином не обмежує та не перевіряє ці метадані.
Записи підлягають тій самій перевірці, що й анотації метаданих обʼєктів, з тим доповненням, що всі ключі повинні мати префікс домену. На значення не накладаються жодні обмеження, за винятком загального обмеження розміру всього поля.
Підписувачі повинні документувати ключі та значення, які вони підтримують. Підписувачі повинні відхиляти запити, що містять ключі, які вони не розпізнають.
PodCertificateRequestStatus
PodCertificateRequestStatus описує стан запиту та містить дані сертифіката, якщо запит видано.
beginRefreshAt (Time)
beginRefreshAt — це час, коли kubelet повинен почати спробувати оновити сертифікат. Це поле встановлюється через субресурс /status і повинно бути встановлено одночасно з certificateChain. Після заповнення це поле є незмінним.
Це поле є лише підказкою. Kubelet може почати оновлення до або після цього часу, якщо це необхідно.
Time — це обгортка навколо time.Time, яка підтримує коректне перетворення у YAML та JSON. Для багатьох з функцій, які пропонує пакет time, надаються обгортки.
certificateChain (string)
certificateChain заповнюється сертифікатом, виданим підписувачем. Це поле встановлюється за допомогою субресурсу /status. Після заповнення це поле є незмінним.
Якщо запит на підписання сертифіката відхилено, додається умова типу "Denied" (Відхилено), і це поле залишається порожнім. Якщо підписувач не може видати сертифікат, додається умова типу "Failed" (Не вдалося), і це поле залишається порожнім.
Вимоги до перевірки:
- certificateChain повинен складатися з одного або декількох сертифікатів у форматі PEM.
- Кожен запис повинен бути дійсним сертифікатом ASN.1, обгорнутим у PEM та закодованим у DER, як описано в розділі 4 RFC5280.
Якщо присутній більше ніж один блок, і визначення запитуваного spec.signerName не вказує на інше, перший блок є виданим сертифікатом, а наступні блоки повинні розглядатися як проміжні сертифікати і пред'являтися в TLS-рукостисканнях. При проєціюванні ланцюжка в том пода, kubelet видалить будь-які дані між блоками PEM, а також будь-які заголовки блоків PEM.
conditions ([]Condition)
Patch strategy: злиття за ключем
typeMap: унікальні значення за типом ключа будуть збережені під час злиття
conditions, що застосовуються до запиту.
Типи "Issued", "Denied" та "Failed" мають особливий режим обробки. Може бути присутнім не більше однієї з цих умов, і вони повинні мати статус "True".
Якщо запит відхилено з причиною
Reason=UnsupportedKeyType, підписувач може запропонувати тип ключа, який буде працювати в полі message.Condition містить детальну інформацію про один аспект поточного стану цього ресурсу API.
conditions.lastTransitionTime (Time), обовʼязково
lastTransitionTime — це останній час, коли стан змінився з одного на інший. Це має бути момент, коли змінився базовий стан. Якщо це невідомо, то можна використовувати час, коли змінилося поле API.
Time — це обгортка навколо time.Time, яка підтримує коректне перетворення у YAML та JSON. Для багатьох з функцій, які пропонує пакет time, надаються обгортки.
conditions.message (string), обовʼязково
message — це повідомлення, яке може прочитати людина, із детальною інформацією про перехід. Це може бути порожній рядок.
conditions.reason (string), обовʼязково
reason містить програмний ідентифікатор, що вказує причину останнього переходу стану. Виробники конкретних типів станів можуть визначати очікувані значення та значення для цього поля, а також те, чи вважаються ці значення гарантованим API. Значення повинно бути рядком CamelCase. Це поле не може бути порожнім.
conditions.status (string), обовʼязково
status стану, один з True, False, Unknown.
conditions.type (string), обовʼязково
type стану в форматі CamelCase або в foo.example.com/CamelCase.
conditions.observedGeneration (int64)
observedGeneration представляє .metadata.generation, на основі якого було встановлено стан. Наприклад, якщо .metadata.generation наразі дорівнює 12, але .status.conditions[x].observedGeneration дорівнює 9, стан є застарілим стосовно поточного стану екземпляра.
notAfter (Time)
notAfter — це час, коли сертифікат втрачає чинність. Значення повинно бути таким самим, як значення notAfter у кінцевому сертифікаті в certificateChain. Це поле встановлюється за допомогою субресурсу /status. Після заповнення воно є незмінним. Підписувач повинен встановити це поле одночасно з certificateChain.
Time — це обгортка навколо time.Time, яка підтримує коректне перетворення у YAML та JSON. Для багатьох з функцій, які пропонує пакет time, надаються обгортки.
notBefore (Time)
notBefore — це час, з якого сертифікат стає дійсним. Значення повинно збігатися із значенням notBefore у кінцевому сертифікаті в certificateChain. Це поле встановлюється за допомогою субресурсу /status. Після заповнення воно є незмінним. Підписувач повинен встановити це поле одночасно із встановленням certificateChain.
Time — це обгортка навколо time.Time, яка підтримує коректне перетворення у YAML та JSON. Для багатьох з функцій, які пропонує пакет time, надаються обгортки.
PodCertificateRequestList
PodCertificateRequestList iє колекцією обʼєктів PodCertificateRequest
apiVersion: certificates.k8s.io/v1beta1
kind: PodCertificateRequestList
metadata (ListMeta)
metadata contains the list metadata.
items ([]PodCertificateRequest), обовʼязково
items — це колекція обʼєктів PodCertificateRequest.
Operations
get отримати статус вказаного PodCertificateRequest
HTTP запит
GET /apis/certificates.k8s.io/v1beta1/namespaces/{namespace}/podcertificaterequests/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя PodCertificateRequest
namespace (в шляху): string, обовʼязково
pretty (в запиті): string
Відповідь
200 (PodCertificateRequest): OK
401: Unauthorized
get отримати статус вказаного PodCertificateRequest
HTTP запит
GET /apis/certificates.k8s.io/v1beta1/namespaces/{namespace}/podcertificaterequests/{name}/status
Параметри
name (в шляху): string, обовʼязково
імʼя PodCertificateRequest
namespace (в шляху): string, обовʼязково
pretty (в запиті): string
Відповідь
200 (PodCertificateRequest): OK
401: Unauthorized
list перелік або перегляд обʼєктів типу PodCertificateRequest
HTTP запит
GET /apis/certificates.k8s.io/v1beta1/namespaces/{namespace}/podcertificaterequests
Параметри
namespace (в шляху): string, обовʼязково
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
shardSelector (в запиті): string
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (PodCertificateRequestList): OK
401: Unauthorized
list перелік або перегляд обʼєктів типу PodCertificateRequest
HTTP запит
GET /apis/certificates.k8s.io/v1beta1/podcertificaterequests
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
shardSelector (в запиті): string
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (PodCertificateRequestList): OK
401: Unauthorized
create створення PodCertificateRequest
HTTP запит
POST /apis/certificates.k8s.io/v1beta1/namespaces/{namespace}/podcertificaterequests
Параметри
namespace (в шляху): string, обовʼязково
body: PodCertificateRequest, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (PodCertificateRequest): OK
201 (PodCertificateRequest): Created
202 (PodCertificateRequest): Accepted
401: Unauthorized
update заміна вказаного PodCertificateRequest
HTTP запит
PUT /apis/certificates.k8s.io/v1beta1/namespaces/{namespace}/podcertificaterequests/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя PodCertificateRequest
namespace (в шляху): string, обовʼязково
body: PodCertificateRequest, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (PodCertificateRequest): OK
201 (PodCertificateRequest): Created
401: Unauthorized
update заміна статусу вказаного PodCertificateRequest
HTTP запит
PUT /apis/certificates.k8s.io/v1beta1/namespaces/{namespace}/podcertificaterequests/{name}/status
Параметри
name (в шляху): string, обовʼязково
імʼя PodCertificateRequest
namespace (в шляху): string, обовʼязково
body: PodCertificateRequest, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (PodCertificateRequest): OK
201 (PodCertificateRequest): Created
401: Unauthorized
patch часткове оновлення вказаного PodCertificateRequest
HTTP запит
PATCH /apis/certificates.k8s.io/v1beta1/namespaces/{namespace}/podcertificaterequests/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя PodCertificateRequest
namespace (в шляху): string, обовʼязково
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (PodCertificateRequest): OK
201 (PodCertificateRequest): Created
401: Unauthorized
patch часткове оновлення статусу вказаного PodCertificateRequest
HTTP запит
PATCH /apis/certificates.k8s.io/v1beta1/namespaces/{namespace}/podcertificaterequests/{name}/status
Параметри
name (в шляху): string, обовʼязково
імʼя PodCertificateRequest
namespace (в шляху): string, обовʼязково
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (PodCertificateRequest): OK
201 (PodCertificateRequest): Created
401: Unauthorized
delete видалення PodCertificateRequest
HTTP запит
DELETE /apis/certificates.k8s.io/v1beta1/namespaces/{namespace}/podcertificaterequests/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя PodCertificateRequest
namespace (в шляху): string, обовʼязково
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
ignoreStoreReadErrorWithClusterBreakingPotential (в запиті): boolean
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection видалення колекції PodCertificateRequest
HTTP запит
DELETE /apis/certificates.k8s.io/v1beta1/namespaces/{namespace}/podcertificaterequests
Параметри
namespace (в шляху): string, обовʼязково
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
ignoreStoreReadErrorWithClusterBreakingPotential (в запиті): boolean
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
shardSelector (в запиті): string
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): OK
401: Unauthorized