PodCertificateRequest
PodCertificateRequest описывает запрос пода на получение сертификата от указанного подписанта.
kubelet используют этот API для реализации projected-томов podCertificate
apiVersion: certificates.k8s.io/v1beta1
import "k8s.io/api/certificates/v1beta1"
PodCertificateRequest
PodCertificateRequest описывает запрос пода на получение сертификата от указанного подписанта.
kubelet используют этот API для реализации projected-томов podCertificate
| Поле | Описание |
|---|---|
apiVersionstring |
APIVersion определяет версионированную схему этого представления объекта. Серверы должны преобразовывать распознанные схемы в последнее внутреннее значение и могут отклонять нераспознанные значения. Подробнее: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
kindstring |
Kind — строковое значение, представляющее ресурс REST, который описывает этот объект. Серверы могут определить его по конечной точке, на которую клиент отправляет запросы. Обновление невозможно. В CamelCase. Подробнее: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
metadataObjectMeta |
metadata содержит метаданные объекта. |
spec *PodCertificateRequestSpec |
spec содержит сведения о запрашиваемом сертификате. |
statusPodCertificateRequestStatus |
status содержит выданный сертификат и стандартный набор условий. |
PodCertificateRequestSpec
PodCertificateRequestSpec описывает запрос сертификата. После создания все поля неизменяемы.
| Поле | Описание |
|---|---|
maxExpirationSecondsinteger |
maxExpirationSeconds — максимальный срок действия сертификата. Если значение не указано, kube-apiserver установит его равным 86400 (24 часа). kube-apiserver отклонит значения меньше 3600 (1 часа). Максимально допустимое значение — 7862400 (91 день). После этого реализация подписанта может выдать сертификат с любым сроком действия, *меньшим* MaxExpirationSeconds, но не менее 3600 секунд (1 часа). Это ограничение обеспечивает kube-apiserver. Подписанты `kubernetes.io` никогда не выдают сертификаты со сроком действия более 24 часов. |
nodeName *string |
nodeName — имя узла, которому назначен под. |
nodeUID *string |
nodeUID — UID узла, которому назначен под. |
pkixPublicKeystring |
Публичный ключ в формате PKIX, которому подписант выдаст сертификат. Ключ должен быть одним из следующих типов: RSA3072, RSA4096, ECDSAP256, ECDSAP384, ECDSAP521 или ED25519. Обратите внимание: в будущем этот список может быть расширен. Реализациям подписантов не обязательно поддерживать все типы ключей, поддерживаемые kube-apiserver и kubelet. Если подписант не поддерживает тип ключа, использованный в данном PodCertificateRequest, он должен отклонить запрос, добавив запись status.conditions с типом "Denied" и причиной "UnsupportedKeyType". В поле message он также может предложить поддерживаемый тип ключа. Устарело: это поле заменено на StubPKCS10Request. Если задано StubPKCS10Request, это поле должно быть пустым. Реализации подписантов должны извлекать публичный ключ из поля StubPKCS10Request. |
podName *string |
podName — имя пода, в который будет смонтирован сертификат. |
podUID *string |
podUID — UID пода, в который будет смонтирован сертификат. |
proofOfPossessionstring |
Доказательство того, что запрашивающий 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](https://www.secg.org/sec1-v2.pdf) (как реализовано в функции библиотеки golang crypto/ecdsa.SignASN1). Если ключ является ключом ED25519, подпись создаётся способом, описанным в [спецификации ED25519](https://ed25519.cr.yp.to/) (как реализовано в библиотеке golang crypto/ed25519.Sign). Устарело: это поле заменено на StubPKCS10Request. Если задано StubPKCS10Request, это поле должно быть пустым. |
serviceAccountName *string |
serviceAccountName — имя учётной записи ServiceAccount, от имени которой работает под. |
serviceAccountUID *string |
serviceAccountUID — UID учётной записи ServiceAccount, от имени которой работает под. |
signerName *string |
signerName указывает запрашиваемого подписанта. Все имена подписантов, начинающиеся с `kubernetes.io`, зарезервированы для проекта Kubernetes. Сейчас проект Kubernetes документирует одного общепринятого подписанта — `kubernetes.io/kube-apiserver-client-pod`, который будет выдавать клиентские сертификаты, распознаваемые kube-apiserver. В настоящее время он не реализован. |
stubPKCS10Request *string |
Запрос на подписание сертификата в формате PKCS#10 (сериализованный DER), созданный kubelet с использованием закрытого ключа субъекта. Большинство реализаций подписантов игнорируют содержимое CSR и извлекают только открытый ключ субъекта. API-сервер автоматически проверяет подпись CSR при допуске, поэтому подписанту не нужно повторять эту проверку. CSR, создаваемые kubelet, полностью пусты. Открытый ключ субъекта должен быть одним из следующих типов: RSA3072, RSA4096, ECDSAP256, ECDSAP384, ECDSAP521 или ED25519. Обратите внимание: в будущем этот список может быть расширен. Реализациям подписантов не обязательно поддерживать все типы ключей, поддерживаемые kube-apiserver и kubelet. Если подписант не поддерживает тип ключа, использованный в данном PodCertificateRequest, он должен отклонить запрос, добавив запись status.conditions с типом "Denied" и причиной "UnsupportedKeyType". В поле message он также может предложить поддерживаемый тип ключа. |
unverifiedUserAnnotationsobject |
unverifiedUserAnnotations позволяют авторам подов передавать дополнительную информацию реализации подписанта. Kubernetes никоим образом не ограничивает и не проверяет эти метаданные. Записи проходят ту же проверку, что и аннотации метаданных объектов, с дополнительным требованием: все ключи должны иметь префикс домена. Ограничений на значения нет, кроме общего ограничения размера всего поля. Подписанты должны документировать поддерживаемые ими ключи и значения. Подписанты должны отклонять запросы, содержащие незнакомые им ключи. |
PodCertificateRequestStatus
PodCertificateRequestStatus описывает состояние запроса и содержит данные сертификата, если запрос был удовлетворён.
| Поле | Описание |
|---|---|
beginRefreshAtTime |
beginRefreshAt — время, когда kubelet должен начать попытки обновления сертификата. Это поле задаётся через подресурс /status и должно задаваться одновременно с certificateChain. После заполнения это поле становится неизменяемым. Это поле является лишь подсказкой. При необходимости kubelet может начать обновление до или после указанного времени. |
certificateChainstring |
certificateChain заполняется подписантом выданным сертификатом. Это поле задаётся через подресурс /status. После заполнения это поле становится неизменяемым. Если запрос на подписание сертификата отклонён, добавляется условие типа "Denied", а это поле остаётся пустым. Если подписант не может выдать сертификат, добавляется условие типа "Failed", а это поле остаётся пустым. Требования к проверке: 1. certificateChain должен состоять из одного или нескольких сертификатов в формате PEM. 2. Каждая запись должна быть допустимым сертификатом ASN.1 в кодировке DER, обёрнутым в PEM, как описано в разделе 4 RFC5280. Если присутствует более одного блока и определение запрошенного spec.signerName не указывает иное, первый блок является выданным сертификатом, а последующие блоки следует считать промежуточными сертификатами и передавать при TLS-рукопожатии. При проецировании цепочки в том пода kubelet удалит все данные между блоками PEM, а также заголовки блоков PEM. |
conditionsCondition array стратегия patch: объединение по ключу type
|
conditions, применённые к запросу. Для типов "Issued", "Denied" и "Failed" предусмотрена специальная обработка. Может присутствовать не более одного из этих условий, и его статус должен быть "True". Если запрос отклонён с `Reason=UnsupportedKeyType`, подписант может предложить подходящий тип ключа в поле message. |
notAfterTime |
notAfter — время истечения срока действия сертификата. Значение должно совпадать со значением notAfter в конечном сертификате из certificateChain. Это поле задаётся через подресурс /status. После заполнения это поле становится неизменяемым. Подписант должен задать это поле одновременно с certificateChain. |
notBeforeTime |
notBefore — время начала действия сертификата. Значение должно совпадать со значением notBefore в конечном сертификате из certificateChain. Это поле задаётся через подресурс /status. После заполнения это поле становится неизменяемым. Подписант должен задать это поле одновременно с certificateChain. |
PodCertificateRequestList
PodCertificateRequestList — это коллекция объектов PodCertificateRequest
| Поле | Описание |
|---|---|
apiVersionstring |
APIVersion определяет версионированную схему этого представления объекта. Серверы должны преобразовывать распознанные схемы в последнее внутреннее значение и могут отклонять нераспознанные значения. Подробнее: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
items *Массив PodCertificateRequest |
items — коллекция объектов PodCertificateRequest |
kindstring |
Kind — строковое значение, представляющее ресурс REST, который описывает этот объект. Серверы могут определить его по конечной точке, на которую клиент отправляет запросы. Обновление невозможно. В CamelCase. Подробнее: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
metadataListMeta |
metadata содержит метаданные списка. |
© 2026 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2026 The Linux Foundation ®. All rights reserved.
https://kubernetes.io/docs/reference/kubernetes-api/certificates/pod-certificate-request-v1beta1/