Настройка TLS
Корпоративные и промежуточные сертификаты могут быть установлены в процессе инсталляции. Для замены сертификатов после завершения инсталляции воспользуйтесь инструкцией.
Для установки в развернутый кластер следуйте инструкциям, указанным ниже.
Корпоративные сертификаты
- Создайте сертификат
Сертификат
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, с которым устанавливаете платформу.
- Создайте запрос на сертификат (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
- Отправьте созданный запрос на сертификат (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 контроллер был доступен из сети Интернет. Для реализации этого требования должно выполняться хотя бы одно из следующих условий:
- Внешний балансировщик должен иметь белый (публичный) IP адрес;
- Должен быть указан белый (публичный) IP адрес для IngressVIP.
Инструкция по созданию и установке сертификата с помощью Let’s Enсrypt
- Создайте 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
- Примените созданный манифест.
Команда
kubectl apply -f acme-issuer.yaml
- Для присвоения секрета для 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 |
- Для присвоения секрета для 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 |
- Для подключения дашборда мониторинга со страницы кластера внесите изменения в 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 |
- Для подключения интерфейса журналирования (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 |