Sobes.tech
Middle+

Какъв е вашият опит в настройването на цикличен мониторинг на състоянието на сертификата и неговата автоматична смяна в DevOps?

sobes.tech AI

Отговор от AI

За мониторинг на сертификатите използвам комбинация от инструменти. Основният мониторинг на състоянието и срока на валидност на сертификатите на уеб сървъри и услуги се реализира чрез:

  1. Prometheus Exporters:

    • ssl exporter: Събира метрики за сроковете на валидност на сертификатите от посочените endpoint-и.
    • node exporter (в съчетание с текстови файлове): Може да се използва за мониторинг на файлове с сертификати в файловата система.

    Скриптове на Bash или Python редовно проверяват състоянието на сертификатите (например с openssl x509 -in cert.pem -noout -enddate) и записват резултата във формат, разбираем от node exporter (textfile collector).

  2. Alertmanager:

    • Настройвам правила в Alertmanager за задействане на известия (например 30, 7 и 1 ден преди изтичане) въз основа на метрики от Prometheus.
    • Известията се изпращат в Slack, по имейл или други комуникационни канали.

Автоматичната подмяна на сертификати обикновено се реализира с помощта на ACME клиенти като certbot или lego.

  1. Планиране на задача: Cron задачи или системни таймери (systemd timers) стартират ACME клиента за проверка и обновяване на сертификатите.

    # Пример за cron запис за certbot
    0 */12 * * * root certbot renew --quiet --standalone --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
    
  2. Автоматизация чрез CI/CD: За по-сложни сценарии или среди с Kubernetes, процесът на обновяване на сертификатите може да бъде интегриран в CI/CD pipeline.

    • Например, при използване в Kubernetes кластер с Ingress обекти с TLS, мениджърът на сертификати тип cert-manager автоматизира издаването и обновяването на сертификати на Let's Encrypt чрез Controller и Custom Resource Definitions (CRD).
    # Пример за Ingress с annotations за cert-manager
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress
      annotations:
        cert-manager.io/cluster-issuer: "letsencrypt-prod"
    spec:
      tls:
      - hosts:
        - example.com
        secretName: example-com-tls
      rules:
      - host: example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80
    
  3. Обновяване на конфигурациите: След успешно обновяване на сертификатите, скриптовете или пайплайна рестартират или преглеждат конфигурациите на услугите (уеб сървъри, балансировчици), за да започнат да използват новия сертификат.

Комбинацията от мониторинг и автоматизация минимизира риска от отказ на услуги поради изтекли сертификати.