אוטומציה של אישורי 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
תהליך העבודה
- ניתוח: ביקורת על התשתית הקיימת, רשימת דומיינים, סוג האתגר.
- עיצוב: בחירת פותר (HTTP-01/DNS-01), הגדרת תפקידי IAM או טוקני API.
- יישום: התקנת Cert-Manager, יצירת ClusterIssuer, הגדרת חידוש אוטומטי.
- בדיקות: הפקת אישור ב-staging, אימות תקינות השרשרת.
- פריסה: מעבר לייצור, ניטור דרך 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 עם אחריות לפונקציונליות. נעריך את הפרויקט שלך תוך יומיים. כתוב לנו לייעוץ.







