Настройка Удостоверяющего центра на базе HashiCorp Vault и OpenSSL для автоматизации выдачи сертификатов в Kubernetes
Краткое резюме
В статье описывается настройка Удостоверяющего Центра на базе HashiCorp Vault и OpenSSL в Kubernetes. Процесс включает развёртывание Vault, генерацию корневого и промежуточного сертификатов, интеграцию с cert-manager для автоматизации управления TLS-сертификатами.
**Цель**: автоматизация процесса получения сертификатов от Certificate Authority с самоподписанным сертификатом с помощью Vault и cert-manager в Kubernetes.
**Краткое описание**:
В данном руководстве представлено подробное объяснение того, как развернуть кластер HashiCorp Vault в Kubernetes, который будет устойчив к отказам, и настроить двухуровневую инфраструктуру открытых ключей (PKI). Корневой сертификат и промежуточный центр сертификации (CA) создаются с помощью OpenSSL, при этом промежуточный CA импортируется и настраивается в Vault для регулярного выпуска сертификатов. Интеграция с cert-manager позволяет автоматически управлять жизненным циклом TLS-сертификатов.
**План действий**:
1. **Развёртывание Vault в Kubernetes**: установка отказоустойчивого кластера Vault с использованием Helm-чарта и встроенного хранилища Raft, а также активация Ingress непосредственно в чарте.
2. **Генерация корневого и промежуточного сертификатов с помощью OpenSSL**: создание корневого сертификата apatsev.corp и промежуточного CAintermediate.apatsev.corp.
3. **Импорт промежуточного сертификата в Vault**: настройка PKI-движка в Vault для работы с промежуточным CA.
4. **Интеграция с cert-manager**: установка и настройка cert-manager для автоматизации выпуска и обновления сертификатов.
5. **Настройка Ingress для Vault через Helm**: активация и конфигурация Ingress в Helm-чарте Vault для обеспечения безопасного доступа и автоматического создания TLS-сертификата.
6. **Создание ролей и выпуск сертификатов для приложений**: демонстрация процесса создания ролей для различных сервисов и автоматического выпуска сертификатов для них.
**Пояснения для начинающих DevOps**:
Перед началом работы важно понимать несколько ключевых концепций:
* **PKI (Public Key Infrastructure)** — это комплекс технологий для выпуска и управления цифровыми сертификатами. Вместо одного сертификата используется цепочка доверия: корневой CA — промежуточный CA — сертификат приложения. Это повышает безопасность, так как корневой ключ хранится в сейфе и используется редко, а промежуточный — для повседневных задач.
* **HashiCorp Vault** — это не только хранилище секретов, но и мощная система управления секретами и шифрования. Его PKI-движок может выступать в роли полноценного Удостоверяющего Центра.
* **cert-manager** — это оператор для Kubernetes, который автоматически запрашивает и продлевает TLS-сертификаты у различных провайдеров (в нашем случае — Vault), упрощая тем самым процесс управления сертификатами.
* **Ingress в Kubernetes** — это объект, который управляет внешним доступом к услугам внутри кластера, обычно через HTTP/HTTPS. В данной статье весь TLS-трафик расшифровывается на уровне Ingress, а до Vault доходит уже незашифрованный HTTP-трафик, что упрощает его конфигурацию.
**Предварительные условия**:
* Рабочий кластер Kubernetes.
* Установленные утилиты командной строки: kubectl, helm, openssl, jq, vault.
* Настроенный доступ kubectl к целевому кластеру.
* Установленный и настроенный Ingress-контроллер (например, nginx-ingress).