Добавление собственного SSL-сертификата для домена

1. Подключение домена к ПО

Актуально, если домен еще не подключен.

Переходим в раздел "Настройки"->"Общие". В строке "Доменное имя" нажимаем "Указать домен". В открывшемся окне включаем переключатель и вводим имя домена.

1.5 Отключаем уже имеющиеся сертификаты.

Проверьте, что в строке "TLS" у вас активная строка "Использовать Let's Encrypt". Если написано что-то другое, то нужно нажать "Изменить" и в открывшемся окне отключить галочку в графе "Выпустить TLS сертификат"

Добавление сертификата.

Проверка наличия старого сертификата

Заходим на сервер ПО. Проверяем, что для текущего домена нет секрета с сертификатом:

$ kubectl -n stopphish get secrets 

NAME                            TYPE                             DATA   AGE
secuchamp-license               Opaque                           2      11d
secuchamp-registry-pullsecret   kubernetes.io/dockerconfigjson   1      11d
stph.local-tls                  kubernetes.io/tls                2      8m56s

В полученом списке не должно быть секретов с именем <your_domain>-tls. Если такой есть (в примере выше это stph.local-tls), его нужно удалить:

$ kubectl -n secuchamp delete secret stph.local-tls 

secret "stph.local-tls" deleted

Добавляем собственный сертификат

Загружаем на сервер собственные сетрификаты. В данном примере они загружены директорию пользователя (~/).

Создаем секрет с сертификатом для нашего домена. Формат имени <your_domain>-tls. В нашем примере это stph.local-tls.

$ kubectl -n secuchamp create secret tls stph.local-tls \
          --cert=~/server.crt \
          --key=~/server.key

secret/stph.local-tls created

Вклюяаем TLS через Базу Данных

Находим имя пода с базой данных:

$ kubectl -n secuchamp get pod 

NAME                                   READY   STATUS    RESTARTS       AGE
api-5dbf6896d5-vwqp6                   1/1     Running   0              16m
api-campaigns-64dfd6cc49-wzq5p         1/1     Running   27 (70m ago)   11d
api-hosting-7c96ccf6f4-vdfds           1/1     Running   9 (72m ago)    11d
api-ldap-86f84c9975-lx59d              1/1     Running   7 (72m ago)    8d
api-lms-7ddbf85fb9-prqkp               1/1     Running   3 (70m ago)    18h
api-mailer-85c78f4777-zwdq6            1/1     Running   23 (71m ago)   11d
api-website-scraper-74476d6987-x88xj   1/1     Running   5 (72m ago)    6d19h
frontend-7b98d89cd8-j4kgz              1/1     Running   9 (72m ago)    11d
lms-frontend-5bf6c5cd4f-lwk4x          1/1     Running   1 (72m ago)    18h
nats-98fb57859-z85c9                   1/1     Running   9 (72m ago)    11d
postgres-74468b87f6-l82jz              1/1     Running   9 (72m ago)    11d
redis-c78f8d7bd-hxpzq                  1/1     Running   9 (72m ago)    11d

Нам нужен под название которого начинается с postgres- (в примере выше это postgres-74468b87f6-l82jz).

Выполняем запрос для создания записи:

$ kubectl -n secuchamp exec postgres-74468b87f6-l82jz -- psql --user=secuchamp secuchamp -c 'UPDATE settings SET value=\'true\' WHERE namespace = \'core\' AND key =\'tls\';'

UPDATE 1

Это включит "TLS" без запуска процесса выпуска сертификата Let's Encrypt.

Если по какойи либо причине запрос выше выдал ошибку, можно выполнить следующую команду:

$ kubectl -n secuchamp exec postgres-74468b87f6-l82jz -- psql --user=secuchamp secuchamp -c 'INSERT INTO settings (namespace, key, value) VALUES (\'core\', \'tls\', \'true\') ON CONFLICT (namespace, key) DO UPDATE SET value = EXCLUDED.value;'

INSERT 0 1

Перезагружаем сервис API для применения изменений:

Находим имя пода с API:

$ kubectl -n stopphish get pod 

NAME                                   READY   STATUS    RESTARTS       AGE
api-5dbf6896d5-vwqp6                   1/1     Running   0              16m
api-campaigns-64dfd6cc49-wzq5p         1/1     Running   27 (70m ago)   11d
api-hosting-7c96ccf6f4-vdfds           1/1     Running   9 (72m ago)    11d
api-ldap-86f84c9975-lx59d              1/1     Running   7 (72m ago)    8d
api-lms-7ddbf85fb9-prqkp               1/1     Running   3 (70m ago)    18h
api-mailer-85c78f4777-zwdq6            1/1     Running   23 (71m ago)   11d
api-website-scraper-74476d6987-x88xj   1/1     Running   5 (72m ago)    6d19h
frontend-7b98d89cd8-j4kgz              1/1     Running   9 (72m ago)    11d
lms-frontend-5bf6c5cd4f-lwk4x          1/1     Running   1 (72m ago)    18h
nats-98fb57859-z85c9                   1/1     Running   9 (72m ago)    11d
postgres-74468b87f6-l82jz              1/1     Running   9 (72m ago)    11d
redis-c78f8d7bd-hxpzq                  1/1     Running   9 (72m ago)    11d

Нам нужен pod в названии которого есть только api-**********-*****. В примере выше это api-5dbf6896d5-vwqp6.

Удаляем этот под командой

kubectl -n secuchamp delete pod api-5dbf6896d5-vwqp6 

pod "api-5dbf6896d5-vwqp6" deleted

Ждем 30 сек - минуту и проеряем что новый под запущен:

$ kubectl -n secuchamp get pod

NAME                                   READY   STATUS    RESTARTS       AGE
api-5dbf6896d5-pgdnv                   1/1     Running   0              36s
...
...
...

После этого можно проверять что сертифика подключен к вебинтерфейсу.