Создание самоподписанных сертификатов TLS с помощью Cert-manager

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

начало внимание

Самоподписанный сертификат TLS не обеспечивает надёжную защиту данных от злоумышленников. Рекомендуется использовать коммерческие TLS‑сертификаты от доверенных центров сертификации, таких как Comodo, Symantec, Thawte и т. д.

конец внимание

Чтобы создать сертификат с атрибутом SAN, выполните следующие действия:

  1. Установите компонент дополнений Cert-manager;
  2. Создайте yaml-файл selfsigned-cluster-issuer.yaml:

nano selfsigned-cluster-issuer.yaml

Для инициирования процедуры заказа сертификата в кластере kubernetes должны быть объявлены ресурсы центров сертификации (CA), которые используются для подписи CSR (запросов на выпуск сертификата). В зависимости от требуемой области видимости вы можете объявить нужный ресурс:

  • Issuer — может использоваться в рамках одного пространства имён;
  • ClusterIssuer — является глобальным объектом кластера.
  1. Вставьте в файл selfsigned-cluster-issuer.yaml следующие значения:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: elma365-selfsigned-certificate
spec:
  selfSigned: {}

  1. Примените файл selfsigned-cluster-issuer.yaml к кластеру:

kubectl apply -f selfsigned-cluster-issuer.yaml

  1. Создайте yaml-файл сертификата create-selfsigned-elma365-certificate.yaml:

nano create-selfsigned-elma365-certificate.yaml

  1. Внесите изменения в файл create-selfsigned-elma365-certificate.yaml:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: elma365-selfsigned-tls-certificate
  namespace: [namespace]
spec:
  secretName: elma365-onpremise-tls
  secretTemplate:
    annotations:
      reflector.v1.k8s.emberstack.com/reflection-allowed: "true"
      reflector.v1.k8s.emberstack.com/reflection-allowed-namespaces: "kube-system"
      reflector.v1.k8s.emberstack.com/reflection-auto-enabled: "true"
      reflector.v1.k8s.emberstack.com/reflection-auto-namespaces: "kube-system"
  duration: 8760h
  renewBefore: 720h
  isCA: false
  subject:
    organizations:
    - "YOUR_NAME_ORGANIZATIONS"
  privateKey:
    algorithm: ECDSA
    size: 384
    encoding: PKCS8
    rotationPolicy: Always
  issuerRef:
    kind: ClusterIssuer
    name: elma365-selfsigned-certificate
  commonName: "elma365_server.your_domain"
  dnsNames:
  - "elma365_server.your_domain"

где:

  • metadata.namespace — наименование нужного namespace, в котором должен быть размещён сертификат;

начало примечание

Примечание

Создайте Secret с сертификатом в том же namespace, в котором работает или будет установлено целевое приложение, для которого выпускается сертификат.

Для приложения ELMA365 стандартный namespace: elma365.

Для встроенных баз данных стандартный namespace: elma365-dbs.

конец примечание

  • spec.duration — срок действия сертификата в часах;
  • spec.subject.organizations — наименование вашей организации (замените "YOUR_NAME_ORGANIZATIONS");
  • spec.commonName и dnsNames — наименование домена (FQDN), для которого должен быть выпущен сертификат (замените "elma365_server.your_domain").
  1. Примените файл create-selfsigned-elma365-certificate.yaml к кластеру:

kubectl apply -f create-selfsigned-elma365-certificate.yaml

  1. Для установки или обновления приложения ELMA365 или встроенных баз данных воспользуйтесь secret elma365-onpremise-tls (наименование, указанное в параметре spec.secretName).