- Обзор
- Оператор Service CA в OpenShift
- Требования к управлению SSL-сертификатами
- Оператор сервисного УЦ
- Контроллер подписывающего сертификата сервиса
- Оператор OpenShift Service CA в действии
- Запуск кластера CodeReady Container (CRC)
- Создание приложения Spring Boot с конечной точкой с HTTPS
- Развертывание приложения Spring Boot
- Проверка
- Ручная ротация SSL-сертификата
- Заключение
Обзор
OpenShift – это платформа контейнерных приложений, разработанная компанией Red Hat Enterprise.
Она расширяет Kubernetes, добавляя пользовательские компоненты для улучшения работы разработчиков.
Эти компоненты включают в себя встроенную систему пайплайнов CI/CD, реджестри образов контейнеров, сетку сервисов, внутренний сервис центра сертификации (CA) и многое другое.
В этом руководстве мы узнаем об операторе CA сервиса в OpenShift и рассмотрим практический пример, демонстрирующий функциональность оператора CA сервиса.
🦊 Безопасность CI/CD – Как защитить свой пайплайн CI/CD
Оператор Service CA в OpenShift
Чтобы обеспечить шифрование данных при передаче между клиентом и сервером, многие сервисы предпочитают передавать свой трафик по защищенному каналу SSL/TLS.
По сути, оба канала устанавливают защищенный канал связи до передачи данных.
Например, HTTPS – это протокол HTTP, работающий по защищенному каналу.
Чтобы включить защищенный канал SSL/TLS, сервер должен иметь сертификат SSL, а также пары закрытых и открытых ключей.
🔐 В чем разница между файлами .cer и .pfx
Требования к управлению SSL-сертификатами
SSL-сертификаты обычно не хранятся долго в целях безопасности.
Как правило, срок действия сертификата не превышает пяти лет, и его необходимо регулярно менять. Управление жизненным циклом этих сертификатов часто является источником проблем во многих организациях.
В обычном кластере Kubernetes управление сертификатом возлагается на администратора.
Многие предпочитают использовать внешний инструмент, например cert-manager, для управления жизненным циклом сертификатов.
В платформе OpenShift есть встроенный оператор сервисного УЦ, который управляет жизненным циклом SSL-сертификатов.
Оператор сервисного УЦ
Оператор сервисного УЦ (Или ЦС) в OpenShift – это компонент, который работает с цифровыми сертификатами.
В частности, оператор создает самоподписанный ЦС при развертывании кластера OpenShift.
Затем он выпускает и вращает цифровые сертификаты для запрашивающих их сервисных ресурсов.
Для поддержки этих функций оператор сервисного ЦС запускает два контроллера:
- serving cert signer
- configmap cabundle injector
Давайте вкратце обсудим оба.
Контроллер подписывающего сертификата сервиса
Контроллер подписывающего сертификата – это контроллер для выдачи подписанного сертификата ресурсам сервиса, аннотированным с service.beta.openshift.io/serving-cert-secret-name.
Когда мы развертываем сервисный ресурс с аннотацией service.beta.openshift.io/serving-cert-secret-name=<secret-name>, контроллер генерирует сертификат и соответствующие пары ключей, подписанные сервисным УЦ.
Затем он сохраняет сертификат, tls.crt, и закрытый ключ, tls.key, в объект Secret с тем же именем, что и значение аннотации.
Сгенерированный сертификат действует в течение двух лет до истечения срока его действия.
Кроме того, контроллер автоматически поворачивает сертификат, который он выдает до истечения срока его действия.
Оператор OpenShift Service CA в действии
В этом разделе мы рассмотрим практический пример, демонстрирующий работу оператора Service CA.
Запуск кластера CodeReady Container (CRC)
Существует несколько способов получить доступ к кластеру OpenShift для разработки и тестирования.
Начиная с версии 4.0, мы можем создать локальный кластер OpenShift с помощью CodeReady Container (CRC) или MicroShift.
В данной демонстрации мы используем подход CRC из-за его простоты и почти полного равенства возможностей с полноценным кластером OpenShift.
Для начала, следуя официальному руководству CRC, мы устанавливаем программный комплекс CRC на систему.
Затем мы запускаем кластер с помощью команды crc start:
Консоль выводит информацию о кластере OpenShift, который мы только что создали.
Следуя инструкциям, мы настраиваем команду oc для указания на новый кластер:
Затем создадим новый проект в кластере OpenShift с помощью команды oc new-project:
С новым проектом кластер готов к развертыванию приложений.
Создание приложения Spring Boot с конечной точкой с HTTPS
На данном этапе давайте создадим Docker-образ приложения Spring Boot, которое открывает конечную точку /welcome по протоколу HTTPS.
Мы можем следовать руководству по созданию конечной точки Spring Boot HTTPS за некоторыми исключениями.
Во-первых, нам не нужно генерировать пакет хранилища ключей.
Кроме того, нам нужно указать путь к сертификату и закрытому ключу SSL.
spring.ssl.bundle.pem:
server:
keystore:
certificate: ${CERT_PATH}/tls.crt
private-key: ${CERT_PATH}/tls.key
Эта конфигурация позволяет указать путь к сертификату и закрытому ключу в базовом пути, CERT_PATH.
Таким образом, мы можем указать этот путь позже в манифесте ресурсов развертывания.
Развертывание приложения Spring Boot
Для развертывания приложений нам необходимы ресурсы службы и развертывания в кластере OpenShift.
Давайте создадим манифест, определяющий ресурс развертывания:
В манифесте развертывания мы сопоставляем том server-ssl-bundle с одноименным секретным объектом.
Это секретный объект, который оператор центра обслуживания использует для хранения созданного SSL-сертификата и закрытого ключа.
Затем мы монтируем том по пути /opt/ssl. Наконец, мы завершаем цикл, устанавливая CERT_PATH в /opt/ssl.
Таким образом, приложение должно получить tls.crt и tls.key из секретного объекта server-ssl-bundle.
Затем мы создаем ресурс Service:
Мы аннотируем ресурс сервиса ключом service.beta.openshift.io/serving-cert-secret-name и значением server-ssl-bundle.
С помощью этой аннотации оператор сервисного УЦ создает секретный пакет server-ssl-bundle, содержащий сгенерированный SSL-сертификат и закрытый ключ.
Для развертывания мы применяем оба манифеста к кластерам OpenShift:
На этом этапе все должно быть готово. Чтобы подтвердить это, давайте проверим настройку.
Проверка
Чтобы убедиться, что оператор CA действительно создает секретный ресурс, как и ожидалось, мы можем выполнить команду oc describe secret server-ssl-bundle:
Из полученного результата можно сделать несколько выводов:
- Секрет содержит описание, в котором говорится, что он сгенерирован оператором сервисного центра, как и ожидалось.
- В аннотации service.beta.openshift.io/expiry указана дата истечения срока действия сертификата, которая составляет два года после генерации.
- В разделе данных мы можем увидеть файл сертификата и закрытый ключ под именами tls.crt и tls.key соответственно.
Это говорит о том, что оператор центра обслуживания сгенерировал SSL-сертификат и хранит его в секрете, на который мы можем впоследствии ссылаться в приложении.
Ручная ротация SSL-сертификата
Оператор центра обслуживания должен обеспечить регулярную ротацию SSL-сертификатов до истечения срока их действия.
Однако может возникнуть ситуация, когда нам потребуется принудительная ротация SSL-сертификата. Например, когда закрытый ключ сертификата скомпрометирован, мы можем захотеть обновить все SSL-сертификаты.
Чтобы принудительно повернуть SSL-сертификат, мы можем удалить секретный объект, содержащий SSL-сертификат:
Сразу после удаления оператор сервисного центра должен заново создать секрет с новым сертификатом и закрытым ключом:
Примечательно, что время истечения срока действия обновлено по сравнению с тем, когда мы впервые описали тот же секретный объект.
Заключение
В этом руководстве мы кратко узнали, что OpenShift строится на основе Kubernetes и предлагает больше компонентов из коробки, которые облегчают процесс разработки.
Затем мы обсудили оператор сервисного центра сертификации и то, как два его контроллера автоматизируют управление сертификатами SSL. Наконец, мы рассмотрели пример развертывания HTTPS-серверного приложения Spring Boot на кластере OpenShift.
см. также:
- ☸️ Как предоставить пользователям доступ к проекту/пространству имен в OpenShift
- ☸️ Как разрешить незащищенные реджестри в кластере OpenShift / OKD 4.x
- ☸️ Управление пользователями OpenShift / OKD с индентити провайдером HTPasswd
- ☸️ Установка Harbor – реджестри образов в Kubernetes / OpenShift с помощью Helm
- ☸️ Как отобразить логи узлов OpenShift с помощью команды oc