Cert-manager#

Важно

Cert-manager, поставляемый в составе Utilities (K8SU) доработан для взаимодействия с инструментом Secret Management System. В данном разделе приведены функциональные отличия от оригинального инструмента Cert-manager в составе K8S Core (K8SC). Руководство по настройке и установке, а также подробная информация по опциональному компоненту Cert-manager представлена в разделе «Сценарии использования опциональных компонентов DropApp» -> «K8S Core (K8SC)» -> «Cert-manager».

Предварительные условия#

Для выполнения дальнейших шагов установите Cert-manager. Руководство по настройке и установке, а также подробная информация по опциональному компоненту Cert-manager представлена в разделе «Сценарии использования опциональных компонентов DropApp» -> «K8S Core (K8SC)» -> «Cert-manager».

Работа Cert-manager совместно с SecMan#

Примечание

Secret Management System (далее – SecMan) - это менеджер паролей, который может хранить, извлекать, генерировать и синхронизировать пароли. Главная особенность SecMan в том, что он не поддерживает шифрование на основа GPG, а использует мастер-пароль для безопасного хранения паролей.

Для адаптации компонента Cert-manager для работы с SecMan выполните следующие шаги:

  1. Убедитесь, что в файле internal/vault/vault.go правильно настроены поля поля в структуре функции (v *Vault) Sign для адаптации работы с SecMan:

       parameters := map[string]string{
        "common_name": csr.Subject.CommonName,
        "email":   csr.EmailAddresses[0],
        "password":"<password>",
        "csr": string(csrPEM),
    }
    
  2. Убедитесь, что в цепочке сертификатов сами сертификаты корректно изменяются на нужный ключ:

    var caChain []string
        for k, v := range vaultResult.Data {
          switch k {
          case SberCACertificate:
            vaultResult.Data[VaultCertificate] = v
            delete(vaultResult.Data, SberCACertificate)
          case SberCARoot:
            caChain = append(caChain, v.(string))
            delete(vaultResult.Data, SberCARoot)
          case VaultIssuingCA:
            caChain = append(caChain, v.(string))
          }
        }
      vaultResult.Data[VaultCAChain] = caChain
    
  3. Убедитесь, что для корректной корректной работы цепочки сертификатов, установлены следующие переменные:

    const (
        SberCARoot        = "root_cert"
        SberCACertificate = "crt_body"
        VaultIssuingCA    = "issuing_ca"
        VaultCAChain      = "ca_chain"
        VaultCertificate  = "certificate"
    )
    
  4. Убедитесь, что в файле internal/vault/vault.go присутствует блок о валидации переданных данных - имени и адресах:

        if len(csr.Subject.CommonName) <= 0 {
            return nil, nil, fmt.Errorf("commonName must be specified")
        }
    
        if len(csr.EmailAddresses) <= 0 {
            return nil, nil, fmt.Errorf("emailAddress must be specified")
        }