Sobes.tech
Middle+

Milyen tapasztalatai vannak a tanúsítvány állapotának ciklikus monitorozásáról és automatikus cseréjéről a DevOps-ban?

sobes.tech MI

Válasz az MI-től

A tanúsítványok monitorozásához egyesítem az eszközöket. A web szervereken és szolgáltatásokon lévő tanúsítványok állapotának és lejárati idejének fő monitorozása a következőképpen történik:

  1. Prometheus exportálók:

    • ssl exporter: gyűjti a metrikákat a megadott végpontokról a tanúsítványok érvényességi idejéről.
    • node exporter (szövegfájlokkal együtt): használható a fájlrendszerben lévő tanúsítványfájlok monitorozására.

    Bash vagy Python szkriptek rendszeresen ellenőrzik a tanúsítványok állapotát (pl. openssl x509 -in cert.pem -noout -enddate segítségével), és az eredményt olyan formátumban írják, amit a node exporter (textfile collector) értelmez.

  2. Alertmanager:

    • Beállítok szabályokat az Alertmanagerben, hogy figyelmeztetéseket aktiváljanak (pl. 30, 7 és 1 nappal a lejárat előtt) a Prometheus metrikái alapján.
    • Az értesítések Slackre, e-mailre vagy más kommunikációs csatornákra kerülnek.

Az automatikus tanúsítványmegújítás általában ACME-kliensekkel történik, mint például a certbot vagy a lego.

  1. Feladatütemezés: Cron vagy rendszeridőzítők (systemd timers) indítják az ACME-klienst a tanúsítványok ellenőrzésére és megújítására.

    # Certbot például cron bejegyzés
    0 */12 * * * root certbot renew --quiet --standalone --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
    
  2. Automatizálás CI/CD-vel: Komplexebb forgatókönyvek vagy Kubernetes környezetek esetén a tanúsítványok frissítési folyamata beépíthető a CI/CD pipeline-ba.

    • Például, Kubernetes Ingress objektumokkal TLS-sel, a cert-manager automatikusan kiadja és megújítja a Let's Encrypt tanúsítványokat Controller és CRD segítségével.
    # Ingress példája cert-manager annotációkkal
    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. Konfigurációk frissítése: Sikeres tanúsítványmegújítás után a szkriptek vagy pipeline-ok újraindítják vagy újraolvassák a szolgáltatások konfigurációit (web szerverek, load balancerek), hogy az új tanúsítványt kezdjék el használni.

A monitorozás és az automatizálás kombinációja minimalizálja a szolgáltatások meghibásodásának kockázatát a lejárt tanúsítványok miatt.