Cert-Manager mengotomatiskan penyediaan sertifikat dalam cluster Kubernetes. Ini menyediakan satu set sumber daya khusus untuk menerbitkan sertifikat dan melampirkannya ke layanan.
Salah satu kasus penggunaan yang paling umum adalah mengamankan aplikasi web dan API dengan sertifikat SSL dari Let's Encrypt. Berikut cara menambahkan Cert-Manager ke cluster Anda, menyiapkan penerbit sertifikat Let's Encrypt, dan mendapatkan sertifikat untuk Pod yang diekspos melalui Ingress.
Memasang Cert-Manager
Cert-Manager paling mudah dipasang menggunakan Helm. Helm adalah pengelola paket Kubernetes yang memungkinkan Anda menambahkan aplikasi ke klaster menggunakan repositori bagan yang dibuat sebelumnya. Pastikan Anda sudah menginstal dan menyiapkan Helm dengan koneksi ke cluster Kubernetes Anda.
Mulailah dengan menambahkan repositori Jetstack ke instalasi Helm Anda. Jetstack awalnya mengembangkan Cert-Manager sebelum disumbangkan ke CNCF.
helm repo add jetstack https://charts.jetstack.io helm repo update
Sekarang instal Cert-Manager ke dalam cluster Anda:
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.5.3 --set installCRDs=true
Ganti nomor versi yang ditampilkan di atas dengan rilis terbaru yang ditampilkan dalam dokumentasi Cert-Manager.
Perintah tersebut akan menginstal Cert-Manager di namespace Kubernetes baru yang disebut cert-manager
. installCRDs
pengaturan akan menambahkan sumber daya Kubernetes khusus Cert-Manager selama instalasi. Ini hanya berfungsi dengan Helm versi 3.2 dan yang lebih baru – jika Anda menggunakan versi yang lebih lama, Anda harus menambahkan definisi sumber daya secara manual dengan Kubectl:
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.crds.yaml
Menambahkan Plugin Kubectl
Cert-Manager memiliki plugin Kubectl yang menyederhanakan beberapa tugas manajemen umum. Ini juga memungkinkan Anda memeriksa apakah Cert-Manager aktif dan siap melayani permintaan.
Instal plugin dengan mengunduh arsipnya dan mengekstraknya ke direktori yang benar:
curl -L -o kubectl-cert-manager.tar.gz https://github.com/jetstack/cert-manager/releases/latest/download/kubectl-cert_manager-linux-amd64.tar.gz tar xzf kubectl-cert-manager.tar.gz sudo mv kubectl-cert_manager /usr/local/bin
Sekarang gunakan plugin untuk memeriksa apakah instalasi Cert-Manager Anda berfungsi:
kubectl cert-manager check api
Anda akan melihat output berikut:
The cert-manager API is ready
Sekarang Anda siap menambahkan penerbit untuk mendapatkan sertifikat dari Let's Encrypt.
Membuat Penerbit Sertifikat
Penerbit dan penerbit klaster adalah sumber daya yang memasok sertifikat ke klaster Anda. Instalasi Cert-Manager dasar yang dibuat sejauh ini tidak mampu mengeluarkan sertifikat. Menambahkan penerbit yang dikonfigurasi untuk menggunakan Let's Encrypt memungkinkan Anda memperoleh sertifikat baru secara dinamis untuk layanan di kluster Anda.
Buat file YAML di direktori kerja Anda dan beri nama issuer.yml
. Tambahkan konten berikut:
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 solvers: - http01: ingress: class: nginx
Anda harus mengganti alamat email dengan email kontak Anda sendiri. Ini akan disertakan dalam sertifikat Anda. Let's Encrypt juga dapat mengirim email kepada Anda di alamat tersebut jika perlu mengirimi Anda peringatan tentang sertifikat Anda.
Kami sedang membuat ClusterIssuer
karena ini tersedia untuk semua sumber daya di cluster Anda, terlepas dari namespace. Issuer
standar adalah resource dengan namespace yang hanya dapat menyediakan sertifikat di dalam namespacenya sendiri.
Konfigurasi penerbit kami menginstruksikan Cert-Manager untuk mendapatkan sertifikat dari server pementasan Let's Encrypt. Sebaiknya gunakan lingkungan staging saat Anda menyiapkan integrasi untuk menghindari batasan tingkat produksi yang ketat dari Let's Encrypt.
Gunakan kubectl
untuk menambahkan penerbit ke kluster Anda:
kubectl create -f issuer.yml
Mendapatkan Sertifikat
Sekarang Anda dapat menggunakan penerbit Anda untuk memperoleh sertifikat untuk layanan yang diekspos melalui sumber daya Ingress. Cert-Manager secara otomatis memantau sumber daya Ingress dan membuat sertifikat menggunakan konfigurasi di tls
mereka bidang. Anda hanya perlu menambahkan anotasi yang menyebutkan nama penerbit atau penerbit cluster yang ingin Anda gunakan.
apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: wordpress:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-app ports: port: 80 --- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: my-ingress annotations: kubernetes.io/ingress.class: nginx cert-manager.io/cluster-issuer: letsencrypt-staging spec: rules: - host: example.com http: paths: - path: / backend: serviceName: my-service servicePort: 80 tls: - hosts: - example.com
File YAML ini mendefinisikan Pod, Service, dan Ingress yang mengekspos layanan tersebut. Ini mengasumsikan penggunaan nginx-ingress
sebagai pengontrol Ingress. Pod menjalankan container WordPress yang dapat diakses melalui HTTPS di example.com
.
Kehadiran cert-manager.io/cluster-issuer
anotasi di sumber daya Ingress akan dideteksi oleh Cert-Manager. Ini akan menggunakan letsencrypt-staging
penerbit cluster yang dibuat sebelumnya untuk memperoleh sertifikat yang mencakup nama host yang ditentukan dalam tls.hosts
Ingress lapangan.
Menggunakan Let's Encrypt di Produksi
Setelah Anda berhasil memperoleh sertifikat staging, Anda dapat bermigrasi ke server produksi Let's Encrypt. Sertifikat staging valid tetapi tidak dipercaya oleh browser sehingga Anda harus mendapatkan pengganti produksi sebelum menayangkan situs Anda.
Sebaiknya tambahkan penerbit cluster terpisah untuk server produksi. Anda kemudian dapat merujuk penerbit yang sesuai di setiap resource Ingress Anda, bergantung pada apakah mereka siap produksi.
Salin konfigurasi penerbit yang ditunjukkan di atas dan ubah name
bidang ke letsencrypt-production
. Selanjutnya, ganti URL server dengan nilai yang ditunjukkan di bawah ini:
https://acme-v02.api.letsencrypt.org/directory
Buat penerbit baru di cluster Anda:
kubectl create -f issuer-production.yml
Perbarui sumber daya Ingress Anda untuk meminta sertifikat produksi dengan mengubah nilai cert-manager.io/cluster-issuer
anotasi ke letsencrypt-production
(atau nama yang Anda tetapkan untuk penerbit produksi Anda sendiri). Gunakan kubectl
untuk menerapkan perubahan:
kubectl apply -f my-ingress.yaml
Anda sekarang seharusnya mengaktifkan HTTPS yang berfungsi penuh untuk sumber daya Ingress Anda. Cert-Manager akan secara otomatis mengelola sertifikat Anda dan memperbaruinya sebelum habis masa berlakunya.
Meningkatkan Cert-Manager
Rilis Cert-Manager biasanya mendukung peningkatan di tempat dengan Helm:
helm repo update helm upgrade --version <new version> cert-manager jetstack/cert-manager
Sertifikat tetap tersedia selama peningkatan versi tetapi proses perpanjangan akan dihentikan.
Meskipun pemutakhiran sekarang biasanya mudah, Anda harus selalu meninjau catatan rilis untuk mengidentifikasi potensi perubahan yang perlu Anda buat. Ini sangat penting jika Anda mengupgrade Kubernetes atau berpindah melalui beberapa versi Cert-Manager. Jika Anda masih menggunakan rilis Kubernetes yang lebih lama, Anda mungkin menggunakan versi Cert-Manager yang memerlukan intervensi manual yang signifikan untuk memperbaruinya.
Ringkasan
Let's Encrypt mudah ditambahkan ke cluster Kubernetes menggunakan Cert-Manager. Anda perlu menginstal Cert-Manager dengan Helm, membuat penerbit yang menggunakan Let's Encrypt API, lalu merujuk penerbit tersebut di sumber daya Ingress Anda.
Anda dapat menyediakan Cert-Manager dengan konfigurasi Anda sendiri untuk kasus penggunaan yang lebih lanjut. Anda dapat menentukan masa pakai sertifikat (gunakan cert-manager.io/duration
Anotasi masuk), secara manual mendeklarasikan nama umum sertifikat (cert-manager.io/common-name
), dan gunakan tantangan DNS alih-alih HTTP. Opsi terakhir dapat berguna dalam skenario tertentu, seperti saat Anda ingin memperoleh sertifikat wildcard.
Penggunaan langsung untuk melindungi aplikasi web dan API harus berfungsi apa adanya menggunakan sumber daya yang ditunjukkan di atas. Verifikasi HTTP bekerja dengan memanipulasi pengontrol Ingress untuk memberikan .well-known
temporary sementara URL yang dapat diakses oleh Let's Encrypt. Jika domain Anda memberikan nilai yang benar pada URL tersebut, Let's Encrypt percaya bahwa Anda yang memegang kendali dan menerbitkan sertifikat.