Spec-Zone.ru › Kubernetes

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 могут фильтроваться по этому полю, используя поле выбора "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" выдает сертификаты для предоставления TLS-точек доступа, к которым kube-apiserver может безопасно подключаться. Запросы для этого подписчика никогда не одобряются автоматически kube-controller-manager и могут быть выданы контроллером "csrsigning" в kube-controller-manager.

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

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

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

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

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

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

    1. Старый подписчик, не знающий о поле (например, реализации в дереве до 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", не содержать заголовков, а закодированные данные должны быть структурой ASN.1 сертификата BER, закодированной в соответствии с разделом 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

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

Spec-Zone.ru

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