Spec-Zone.ru › Kubernetes 1.26

CertificateSigningRequest

Объекты CertificateSigningRequest предоставляют механизм получения сертификатов x509 путём отправки запроса на подписание сертификата и его асинхронного утверждения и выдачи.

apiVersion: certificates.k8s.io/v1

import "k8s.io/api/certificates/v1"

CertificateSigningRequest

Объекты CertificateSigningRequest предоставляют механизм получения сертификатов x509 путём отправки запроса на подписание сертификата и его асинхронного утверждения и выдачи.

Kubelet используют этот API для получения:

  1. клиентских сертификатов для аутентификации с kube-apiserver (с signerName "kubernetes.io/kube-apiserver-client-kubelet").
  2. сервисных сертификатов для 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), обязательно

    Атомарно: будет заменён при слиянии

    request содержит запрос на подписание x509-сертификата, закодированный в блоке PEM "CERTIFICATE REQUEST". При сериализации в JSON или YAML данные дополнительно кодируются в base64.

  • signerName (строка), обязательно

    signerName указывает запрашиваемого подписчика и представляет собой полное имя.

    Запросы list/watch для CertificateSigningRequests могут фильтроваться по этому полю с помощью fieldSelector "spec.signerName=NAME".

    Известные подписчики Kubernetes:

    1. "kubernetes.io/kube-apiserver-client": выдает клиентские сертификаты, которые могут быть использованы для аутентификации с kube-apiserver. Запросы для этого подписчика никогда не утверждаются автоматически kube-controller-manager, могут выдаваться контроллером "csrsigning" в kube-controller-manager.
    2. "kubernetes.io/kube-apiserver-client-kubelet": выдает клиентские сертификаты, которые kubelet используют для аутентификации с kube-apiserver. Запросы для этого подписчика могут быть автоматически утверждены контроллером "csrapproving" в kube-controller-manager и могут выдаваться контроллером "csrsigning" в kube-controller-manager.
    3. "kubernetes.io/kubelet-serving" выдает сервисные сертификаты, которые kubelet используют для обслуживания TLS-точек входа, к которым kube-apiserver может подключаться безопасно. Запросы для этого подписчика никогда не утверждаются автоматически kube-controller-manager, и могут выдаваться контроллером "csrsigning" в kube-controller-manager.

    Более подробная информация доступна по адресу https://k8s.io/docs/reference/access-authn-authz/certificate-signing-requests/#kubernetes-signers

    Также могут быть указаны пользовательские signerName. Подписчик определяет:

    1. Распределение доверия: как распределяются сертификаты доверия (CA-пакеты).
    2. Разрешённые субъекты: и поведение при запросе запрещённого субъекта.
    3. Требуемые, разрешённые или запрещённые расширения x509 в запросе (включая разрешение subjectAltNames, типы, ограничения на разрешённые значения) и поведение при запросе запрещённого расширения.
    4. Требуемые, разрешённые или запрещённые ключи использования/расширенные ключи использования.
    5. Срок действия/срок действия сертификата: фиксируется ли он подписчиком, настраивается ли администратором.
    6. Разрешён ли запрос сертификатов CA.
  • expirationSeconds (int32)

    expirationSeconds — запрашиваемая продолжительность действия выданного сертификата. Подписывающий сертификат может выдать сертификат с другим сроком действия, поэтому клиент должен проверить разницу между полями notBefore и notAfter в выданном сертификате, чтобы определить фактическую продолжительность.

    Реализации хорошо известных подписчиков Kubernetes в v1.22+ будут учитывать это поле, при условии, что запрашиваемая продолжительность не превышает максимальной продолжительности, которую они будут учитывать в соответствии со флагом командной строки --cluster-signing-duration для управляющего компонента Kubernetes.

    Подписывающие сертификаты могут не учитывать это поле по разным причинам:

    1. Старый подписчик, не знающий о поле (например, реализации в tree до v1.22)
    2. Подписчик, чьё максимальное значение короче, чем запрашиваемая продолжительность
    3. Подписчик, чьё минимальное значение длиннее, чем запрашиваемая продолжительность

    Минимальное допустимое значение для expirationSeconds составляет 600, т. е. 10 минут.

  • extra (map[string][]string)

    extra содержит дополнительные атрибуты пользователя, создавшего CertificateSigningRequest. Заполняется API-сервером при создании и неизменяемо.

  • groups ([]string)

    Атомарно: будет заменён при слиянии

    groups содержит членство в группах пользователя, создавшего CertificateSigningRequest. Заполняется API-сервером при создании и неизменяемо.

  • uid (строка)

    uid содержит uid пользователя, создавшего CertificateSigningRequest. Заполняется API-сервером при создании и неизменяемо.

  • usages ([]string)

    Атомарно: будет заменён при слиянии

    usages задаёт набор запрошенных типов использования ключа в выданном сертификате.

    Запросы клиентских сертификатов TLS обычно запрашивают: "цифровая подпись", "шифрование ключом", "клиентская аутентификация".

    Запросы сервисных сертификатов TLS обычно запрашивают: "шифрование ключом", "цифровая подпись", "серверная аутентификация".

    Допустимые значения: "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 (строка)

    username содержит имя пользователя, создавшего CertificateSigningRequest. Заполняется API-сервером при создании и неизменяемо.

CertificateSigningRequestStatus

CertificateSigningRequestStatus содержит условия, используемые для указания статуса запроса (утверждён/отклонен/неудался) и выданного сертификата.

  • certificate ([]byte)

    Атомарно: будет заменён при слиянии

    certificate заполняется выданным сертификатом подписчиком после добавления условия Approved. Это поле устанавливается с помощью подресурса /status. После заполнения это поле неизменяемо.

    Если запрос на подписание сертификата отклонен, добавляется условие типа "Denied", а это поле остаётся пустым. Если подписчик не может выдать сертификат, добавляется условие типа "Failed", а это поле остаётся пустым.

    Требования к валидации:

    1. certificate должен содержать один или несколько блоков PEM.
    2. Все блоки PEM должны иметь метку "CERTIFICATE", не содержать заголовков, а закодированные данные должны представлять собой структуру BER-кодированного ASN.1 Certificate, как описано в разделе 4 RFC5280.
    3. Содержание, не являющееся PEM, может появляться до или после блоков PEM "CERTIFICATE" и не проверяется, чтобы позволить поясняющий текст, как описано в разделе 5.2 RFC7468.

    Если присутствует более одного блока PEM, и определение запрошенного spec.signerName не указывает иного, то первый блок является выданным сертификатом, а последующие блоки следует рассматривать как промежуточные сертификаты и представлять их в TLS-обмене.

    Сертификат закодирован в формате PEM.

    При сериализации в JSON или YAML данные дополнительно кодируются в base64, поэтому они состоят из:

    base64(
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----
    )
    
  • conditions ([]CertificateSigningRequestCondition)

    Map: уникальные значения ключа type будут сохранены при слиянии

    Установленные условия для запроса. Известные условия — "Approved", "Denied" и "Failed".

    CertificateSigningRequestCondition описывает состояние объекта CertificateSigningRequest

    • conditions.status (строка), обязательно

      статус условия, одно из True, False, Unknown. Условия Approved, Denied и Failed не могут быть "False" или "Unknown".

    • conditions.type (строка), обязательно

      тип условия. Известные условия — "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 (строка)

      message содержит удобочитаемое сообщение с подробностями о состоянии запроса

    • conditions.reason (строка)

      reason указывает краткое объяснение состояния запроса

CertificateSigningRequestList

CertificateSigningRequestList — коллекция объектов CertificateSigningRequest

  • apiVersion: certificates.k8s.io/v1

  • kind: CertificateSigningRequestList

  • metadata (ListMeta)

  • items ([]CertificateSigningRequest), required

    items — коллекция объектов CertificateSigningRequest

© 2022 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2022 The Linux Foundation ®. All rights reserved.
https://v1-26.docs.kubernetes.io/docs/reference/kubernetes-api/authentication-resources/certificate-signing-request-v1/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API