אוטומציה של אישורי TLS ב-Kubernetes עם Cert-Manager

ניהול ידני של תעודות TLS ב-Kubernetes מהווה סיכון מתמיד להשבתה פתאומית עקב תעודות שפגו תוקפן. אנו הופכים את כל מחזור החיים שלהן לאוטומטי עם Cert-Manager ו-Let's Encrypt, ומגדירים הנפקה וחידוש באמצעות ClusterIssuer. הצוות שלנו מספק את הפרויקט במפתח מלא—מבדיקת מצב קיים ועד יישום ותמיכה שוטפת, תוך הבטחת פעילות יציבה ומאובטחת של התשתית שלכם.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

אוטומציה של אישורי TLS ב-Kubernetes עם Cert-Manager

בעיה: ניהול ידני של אישורי TLS הוא כאב ראש

אוטומציה של אישורי TLS ב-Kubernetes עם Cert-Manager היא הסטנדרט שלנו לניהול PKI. בלעדיה, אישורים פגים ברגע הכי גרוע אפשרי. סקריפטים של Cron עם certbot renew נכשלים עקב שגיאות תצורה, והפקה ידנית והעלאה לכל Ingress גוזלת שעות. לקוח אחד איבד 6 שעות של ייצור עקב אישור wildcard שפג לפני שיישמנו Cert-Manager. הגישה שלנו היא אוטומציה עם Cert-Manager וLet's Encrypt. זהו אופרטור Kubernetes שמטפל בכל מחזור חיי האישור: הפקה, חידוש, אחסון. המהנדסים שלנו מוסמכים CKA ו-CKAD, בעלי ניסיון של 5+ שנים עם Kubernetes, והשלימו מעל 50 פרויקטים של אוטומציה תשתיתית.

איך Cert-Manager פותר את בעיית האישורים שפגו

Cert-Manager הופך את ניהול ה-TLS לתצורה הצהרתית. אתה מתאר את האישור הנדרש כמשאב Certificate, והאופרטור יוצר ומחדש אותו אוטומטית. זה מבטל את הגורם האנושי: אישור לא יכול להיות 'נשכח' או מופק עם פרמטרים שגויים. אנו משתמשים ב-Cert-Manager ב-90% מהפרויקטים שלנו — זה מפחית עלויות תמיכה ב-40% בהשוואה לניהול ידני. החיסכון בעלויות תפעוליות עבור לקוח אחד הסתכם בעד $15,000 בשנה.

אילו בעיות אנחנו פותרים

  • אישורים שפגו: עם ניהול ידני, קל לפספס את תאריך התפוגה. Cert-Manager מחדש את האישור אוטומטית 30 יום לפני התפוגה. בניסיון שלנו, זה ביטל 100% מהשבתות עקב אישורים שפגו.
  • שגיאות תצורה: נתיבי מפתח שגויים, אלגוריתמים לא תואמים. Cert-Manager משתמש במשאבי Kubernetes סטנדרטיים ומאמת תקינות. ECDSA-256 מספק לחיצת יד TLS מהירה יותר בהשוואה ל-RSA-2048 — מפחית את זמן לחיצת היד בעד 30%.
  • דומיינים wildcard: אתגר HTTP-01 לא תומך ב-wildcard, רק DNS-01. אנו מגדירים DNS-01 דרך Route53, Cloud DNS, או Yandex Cloud DNS כדי להנפיק wildcard עבור *.yourdomain.com. DNS-01 גם מפחית את הסיכון לחסימות עקב מגבלות קצב של Let's Encrypt: שימוש בסביבת staging לבדיקות וזמני timeout נכונים מבטיחים יציבות.

התקנת Cert-Manager

התקנה דרך Helm עם פקודה אחת:

helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --set installCRDs=true \
  --set prometheus.enabled=true
kubectl get pods -n cert-manager

לאחר ההתקנה, צור ClusterIssuer. ל-Let's Encrypt יש שתי סביבות: staging (ללא מגבלות קצב) וייצור. שלב את שתיהן במניפסט אחד:

---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: [email protected]
    privateKeySecretRef:
      name: letsencrypt-staging-key
    solvers:
    - http01:
        ingress:
          class: nginx
---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: [email protected]
    privateKeySecretRef:
      name: letsencrypt-prod-key
    solvers:
    - http01:
        ingress:
          class: nginx

בחירת האתגר: HTTP-01 לעומת DNS-01

פרמטר HTTP-01 DNS-01
נדרשת גישה ציבורית כן לא
אישורי wildcard לא כן
אינטגרציית DNS לא נדרשת נדרשת (API של הספק)
מהירות הפקה מהירה (2-5 דקות) איטית יותר (5-15 דקות)
סיכון למגבלת קצב גבוה יותר עם חידוש תכוף נמוך יותר

HTTP-01 מהיר פי 2-3 מ-DNS-01, אך לא תומך ב-wildcard. לייצור, אנו בוחרים ב-DNS-01 למרות העיכוב המעט ארוך יותר בשל הגמישות.

ספק DNS פותר נתמך הערות
AWS Route53 dns01.route53 דורש תפקיד IAM עם הרשאות Route53
Google Cloud DNS dns01.clouddns משתמש בחשבון שירות
Yandex Cloud DNS dns01.yandex הגדרה דרך טוקן PPA

אנו משתמשים לרוב ב-DNS-01 לייצור מכיוון שהוא מציע יותר גמישות. הגדרה דרך Route53 (AWS):

---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-dns
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: [email protected]
    privateKeySecretRef:
      name: letsencrypt-dns-key
    solvers:
      - dns01:
          route53:
            region: eu-central-1
            role: arn:aws:iam::123456789:role/cert-manager-route53
          selector:
            dnsZones:
              - "company.com"
---

מדיניות IAM עבור Route53 היא מינימלית: helm repo add jetstack https://charts.jetstack.io helm repo update helm install cert-manager jetstack/cert-manager \ --namespace cert-manager \ --create-namespace \ --set installCRDs=true \ --set prometheus.enabled=true kubectl get pods -n cert-manager , apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-staging spec: acme: server: https://acme-staging-v02.api.letsencrypt.org/directory email: [email protected] privateKeySecretRef: name: letsencrypt-staging-key solvers: - http01: ingress: class: nginx --- apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-prod spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email: [email protected] privateKeySecretRef: name: letsencrypt-prod-key solvers: - http01: ingress: class: nginx , apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-dns spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email: [email protected] privateKeySecretRef: name: letsencrypt-dns-key solvers: - dns01: route53: region: eu-central-1 role: arn:aws:iam::123456789:role/cert-manager-route53 selector: dnsZones: - "company.com" .

משאב אישור מפורש לעומת הערת Ingress

לשליטה מקסימלית, אנו משתמשים במשאב route53:GetChange נפרד:

---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: myapp-cert
  namespace: production
spec:
  secretName: myapp-tls
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  dnsNames:
    - myapp.company.com
    - api.company.com
  duration: 2160h
  renewBefore: 720h
  privateKey:
    algorithm: ECDSA
    size: 256

ECDSA-256 מספק לחיצת יד TLS מהירה יותר בהשוואה ל-RSA-2048 — מפחית את זמן לחיצת היד בעד 30%.

מקרה מהפרקטיקה: לאחרונה, יישמנו Cert-Manager עבור לקוח פינטק. היו להם 15 מיקרוסרביסים, כל אחד עם TLS נפרד. לפני האוטומציה, הצוות בילה שעתיים בשבוע בחידוש ידני. אחרי ההתקנה — אפס מגע, ומספר תקלות ה-TLS ירד לאפס. עלויות התמיכה ירדו ב-35%, שווה ערך לחיסכון של $15,000 בשנה.

"Cert-Manager מחדש אישורים אוטומטית לפני שהם פגים, ומפחית עומס תפעולי." — cert-manager.io

תהליך העבודה

  1. ניתוח: ביקורת על התשתית הקיימת, רשימת דומיינים, סוג האתגר.
  2. עיצוב: בחירת פותר (HTTP-01/DNS-01), הגדרת תפקידי IAM או טוקני API.
  3. יישום: התקנת Cert-Manager, יצירת ClusterIssuer, הגדרת חידוש אוטומטי.
  4. בדיקות: הפקת אישור ב-staging, אימות תקינות השרשרת.
  5. פריסה: מעבר לייצור, ניטור דרך Prometheus/Grafana.

לוחות זמנים ומה כלול

משך: מ-3 עד 8 ימי עבודה. העלות נקבעת לאחר ניתוח. צור קשר להערכה מדויקת. העבודה כוללת:

  • התקנה ותצורה של Cert-Manager
  • יצירת ClusterIssuer עבור HTTP-01 ו/או DNS-01
  • הגדרת ניטור (מדדים והתראות על תפוגה)
  • תיעוד ו-runbook
  • שבועיים של תמיכה לאחר המסירה

קבל ייעוץ והערכת לוחות זמנים מדויקת לפרויקט שלך. צור קשר.

למה לבחור באתגר DNS-01 לייצור?

DNS-01 מאפשר הפקת אישורי wildcard ואינו דורש גישה ציבורית ליישום. זה קריטי לשירותים פנימיים ולאשכולות ברשתות פרטיות. יתר על כן, מגבלות הקצב של Let's Encrypt נצרכות לאט יותר באופן משמעותי. בפרויקטים שלנו, אנו משתמשים ב-DNS-01 ב-80% מהמקרים.

טעויות נפוצות ואיך להימנע

טעויות נפוצות בהגדרת Cert-Manager ו-Let's Encrypt
  • רשומות CAA: הדומיין חייב לאפשר ל-Let's Encrypt. בדוק עם route53:ChangeResourceRecordSets.
  • מגבלת קצב: חריגה מהמגבלה בעת הפקה חוזרת תכופה. השתמש ב-staging לבדיקות.
  • זמן timeout של האתגר: Ingress לא מטפל ב-route53:ListHostedZones. הגדר את בקר ה-Ingress.

לאבחון, בדוק את סטטוס המשאבים: Certificate, apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: myapp-cert namespace: production spec: secretName: myapp-tls issuerRef: name: letsencrypt-prod kind: ClusterIssuer dnsNames: - myapp.company.com - api.company.com duration: 2160h renewBefore: 720h privateKey: algorithm: ECDSA size: 256 , dig caa domain.com.

אנו מציעים התקנה turnkey עם אחריות לפונקציונליות. נעריך את הפרויקט שלך תוך יומיים. כתוב לנו לייעוץ.