Настройка TLS

Корпоративные и промежуточные сертификаты могут быть установлены в процессе инсталляции. Для замены сертификатов после завершения инсталляции воспользуйтесь инструкцией.

Для установки в развернутый кластер следуйте инструкциям, указанным ниже.

Корпоративные сертификаты

  1. Создайте сертификат
Сертификат
cat > openssl-san.cnf <<EOF
[req]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn

[ dn ]
C=RU
ST=Moscow
L=Moscow
O=My Company
OU=Department
emailAddress=admin@example.com
CN = example.com

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = *.apps.corp.domain

[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=serverAuth,clientAuth
subjectAltName=@alt_names
EOF

где corp.domain - Ingress, с которым устанавливаете платформу.

  1. Создайте запрос на сертификат (CSR) с использованием файла конфигурации openssl-san.cnf.
Команда
openssl req -newkey rsa:2048 -sha256 -days 365 -nodes -keyout tls.key -out tls.csr -extensions req_ext -config openssl-san.cnf
  1. Отправьте созданный запрос на сертификат (CSR) на подпись у вашего удостоверяющего центра (Certificate Authority, CA). В результате вы должны получить подписанный сертификат в формате PEM, который необходимо переименовать в tls.crt.

Также для корректной работы всех компонентов кластера необходимо, чтобы этот сертификат содержал в себе всю цепочку сертификатов: ваш конечный сертификат -> промежуточные сертификаты CA -> корневой CA.

При установке платформы в закрытом контуре при использовании корпоративного зеркала корневой сертификат зеркала должен быть прописан в доверенные на все ВМ и шаблоны.

Промежуточные сертификаты

Если у вас есть промежуточный сертификат центра сертификации (Intermediate CA), подписанный вашим корпоративным центром сертификации (Certificate Authority, CA), то его можно использовать для автоматической выдачи сертификатов с помощью Cert-manager.

Для этого вам необходимо создать секрет содержащий цепочку сертификатов и приватный ключ: tls.crt - это цепочка сертификатов (ваш промежуточный сертификат -> сертификат корпоративного центра сертификации) в формате PEM, tls.key - это приватный ключ от вашего промежуточного сертификата.

Сертификаты Let’s Enсrypt

Для создания сертификатов с помощью Let’s Enсrypt необходимо, чтобы ingress контроллер был доступен из сети Интернет. Для реализации этого требования должно выполняться хотя бы одно из следующих условий:

  1. Внешний балансировщик должен иметь белый (публичный) IP адрес;
  2. Должен быть указан белый (публичный) IP адрес для IngressVIP.

Инструкция по созданию и установке сертификата с помощью Let’s Enсrypt

  1. Создайте YAML-файл acme-issuer.yaml с манифестом объекта ClusterIssuer.
Манифест
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt
  namespace: cert-manager
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: <ваш email>
    privateKeySecretRef:
      name: letsencrypt
    solvers:
    - http01:
        ingress:
          class: nginx
  1. Примените созданный манифест.
Команда
kubectl apply -f acme-issuer.yaml
  1. Для присвоения секрета для backend.
Команда
kubectl edit ssc/shturval-backend

В spec.customvalues пропишите наименования созданных секретов для backend и auth.

Пример
tls:
  enabled: true
  backend_tls_secretname: <ваше значение параметра>
  auth_tls_secretname: <ваше значение параметра>
  cluster_issuer_name: <ваше значение параметра>
Параметр Описание Тип данных Пример
backend_tls_secretname Имя секрета для back string back-tls
auth_tls_secretname Имя секрета для auth string auth-tls
cluster_issuer_name Имя созданного ClusterIssuer string letsencrypt
  1. Для присвоения секрета для frontend.
Изменения customvalues
kubectl edit ssc/shturval-frontend

В spec.customvalues пропишите наименования созданных секретов для frontend.

Пример customvalues
tls:
  enabled: true
  front_tls_secretname: <ваше значение параметра>
  docs_tls_secretname: <ваше значение параметра>
  cluster_issuer_name: <ваше значение параметра>
Параметр Описание Тип данных Пример
front_tls_secretname Имя секрета для front string front-tls
docs_tls_secretname Имя секрета для docs string docs-tls
cluster_issuer_name Имя созданного ClusterIssuer string letsencrypt
  1. Для подключения дашборда мониторинга со страницы кластера внесите изменения в SSC shturval-dashboards
Команда
kubectl edit ssc/shturval-dashboards
Изменения customvalues
grafana.ini:
  security:
    cookie_secure: true
  auth.generic_oauth:
    tls_skip_verify_insecure: true
ingress:
  annotations:
    cert-manager.io/cluster-issuer: <ваше значение параметра> 
  tls:
  - hosts:
    - <ваше значение параметра> 
    secretName: <ваше значение параметра> 
Параметр Описание Тип данных Пример
annotations.cert-manager.io/cluster-issuer Аннотация с именем созданного ClusterIssuer string letsencrypt
tls.hosts Список хостов, для которых устанавливается TLS-соединение array dashboards.apps.ip-10-11-11-13.shturval.link
tls.secretName Имя секрета для установления TLS-соединения, в котором будет сохранен сертификат для Grafana string dashboards-ingress-tls
  1. Для подключения интерфейса журналирования (OpenSearch.Kibana), доступного со страницы кластера, внесите изменения в SSC shturval-logs-operator.
Команда
kubectl edit ssc/shturval-logs-operator
Изменения customvalues
ingress:
  cluster:
    annotations:
      cert-manager.io/cluster-issuer:  <ваше значение параметра> 
    tls: []
    - secretName:  <ваше значение параметра> 
      hosts:
        -  <ваше значение параметра> 
  dashboards:
    annotations:
      cert-manager.io/cluster-issuer:  <ваше значение параметра> 
    tls: []
    - secretName:  <ваше значение параметра> 
      hosts:
        -  <ваше значение параметра> 
Параметр Описание Тип данных Пример
cluster.annotations.cert-manager.io/cluster-issuer Аннотация с именем созданного ClusterIssuer для кластера Opensearch string letsencrypt
dashboards.annotations.cert-manager.io/cluster-issuer Аннотация с именем созданного ClusterIssuer для дашборда OpenSearch string letsencrypt
cluster.hosts Список хостов кластера Opensearch array logs.apps.ip-10-11-11-13.shturval.link
cluster.tls.hosts Список хостов, для которых используется секрет с TLS-сертификатом array logs.apps.ip-10-11-11-13.shturval.link
cluster.tls.secretName Имя секрета, в котором будет сохранен TLS-сертификат для кластера OpenSearch string logs-tls
dashboards.hosts Список хостов для доступа к дашбордам OpenSearch array logs-dashboards.apps.ip-10-11-11-13.shturval.link
dashboards.tls.secretName Имя секрета, в котором будет сохранен TLS-сертификат для дашборда OpenSearch string logs-dashboards-tls
dashboards.tls.hosts Список хостов, для которых используется секрет array logs-dashboards.apps.ip-10-11-11-13.shturval.link
×