GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Menginstal Kubernetes Cert-Manager dan Mengonfigurasi Let's Encrypt

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.


Docker
  1. Cara Menginstal dan Mengonfigurasi Ansible di Windows

  2. Cara Menginstal dan Mengonfigurasi Monit.

  3. Cara Menginstal dan Mengonfigurasi Monit.

  1. Cara Menginstal dan Mengkonfigurasi Nginx di CentOS 7

  2. Cara Menginstal dan Mengonfigurasi Redis di Ubuntu 18.04

  3. Cara Menginstal dan Mengkonfigurasi Redmine di Ubuntu 18.04

  1. Cara Menginstal dan Mengonfigurasi Samba di Ubuntu 18.04

  2. Cara Menginstal dan Mengonfigurasi Redis di Ubuntu 20.04

  3. Cara Menginstal dan Mengonfigurasi Redis di CentOS 7