Sobes.tech
Middle+

Jaké máte zkušenosti s nastavením cyklického monitorování stavu certifikátu a jeho automatické výměny v DevOps?

sobes.tech AI

Odpověď od AI

Pro sledování certifikátů používám kombinaci nástrojů. Hlavní sledování stavu a doby platnosti certifikátů na webových serverech a službách je realizováno prostřednictvím:

  1. Prometheus Exporters:

    • ssl exporter: Sbírá metriky o dobách platnosti certifikátů z uvedených endpointů.
    • node exporter (ve spojení s textovými soubory): Může být použit pro sledování souborů certifikátů na souborovém systému.

    Skripty v Bash nebo Python pravidelně kontrolují stav certifikátů (například pomocí openssl x509 -in cert.pem -noout -enddate) a zapisují výsledek do formátu, který rozumí node exporter (textfile collector).

  2. Alertmanager:

    • Nastavuji pravidla v Alertmanageru pro spuštění upozornění (například 30, 7 a 1 den před vypršením platnosti) na základě metrik z Promethea.
    • Upozornění jsou odesílána do Slacku, e-mailu nebo jiných komunikačních kanálů.

Automatická výměna certifikátů je obvykle realizována pomocí ACME klientů, jako jsou certbot nebo lego.

  1. Plánování úlohy: Cron-úlohy nebo systémové časovače (systemd timers) spouštějí ACME klienta pro kontrolu a aktualizaci certifikátů.

    # Příklad cron záznamu pro certbot
    0 */12 * * * root certbot renew --quiet --standalone --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
    
  2. Automatizace přes CI/CD: Pro složitější scénáře nebo prostředí s Kubernetes může být proces aktualizace certifikátů integrován do CI/CD pipeline.

    • Například při použití v Kubernetes clusteru s objekty Ingress s TLS, správce certifikátů typu cert-manager automatizuje vydávání a aktualizaci certifikátů Let's Encrypt pomocí Controlleru a vlastních definic CRD.
    # Příklad Ingress s anotacemi pro 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. Aktualizace konfigurací: Po úspěšné aktualizaci certifikátů skripty nebo pipeline restartují nebo přečtou konfigurace služeb (webových serverů, load balancerů), aby začaly používat nový certifikát.

Kombinace sledování a automatizace minimalizuje riziko selhání služeb kvůli prošlým certifikátům.