Saat mengonfigurasi pendengar HTTPS, Anda harus mengaitkan sertifikat SSL atau TLS dengan pendengar untuk mengenkripsi koneksi antara klien dan pendengar. Topik ini menjelaskan cara menggunakan Application Load Balancer (ALB) Ingress untuk mengonfigurasi sertifikat untuk pendengar HTTPS.
Perbandingan metode konfigurasi sertifikat
ALB Ingress memungkinkan Anda mengonfigurasi penemuan sertifikat otomatis, mengelola sertifikat sebagai Kubernetes Secrets, dan menentukan sertifikat dalam AlbConfigs. Tabel berikut membandingkan metode-metode tersebut.
Item Perbandingan | Konfigurasikan Penemuan Sertifikat Otomatis | Tentukan Sertifikat dalam AlbConfigs | Kelola Sertifikat sebagai Secrets |
Penyimpanan Sertifikat | Sertifikat disimpan di Layanan Manajemen Sertifikat. | Sertifikat disimpan sebagai Kubernetes Secrets. | |
Penemuan Sertifikat | Sertifikat ditemukan berdasarkan nama domain yang terikat pada sertifikat. | Sertifikat ditemukan berdasarkan ID-nya. | Sertifikat ditemukan berdasarkan Secret tempat sertifikat disimpan. |
Skenario | Metode ini cocok untuk sertifikat yang dibeli di konsol Layanan Manajemen Sertifikat atau sertifikat yang diunggah ke konsol Layanan Manajemen Sertifikat. | Fitur ini cocok untuk sertifikat yang dikelola di kluster. Misalnya, jika Anda menggunakan cert-manager untuk mengelola sertifikat, Anda dapat menyimpan sertifikat dalam Secrets. | |
Penggunaan Sertifikat Lintas Namespace | Ya. Anda dapat mengaktifkan akses internal dan eksternal untuk ALB Ingress secara bersamaan. | Tidak didukung. Sertifikat yang disimpan sebagai Secret hanya dapat digunakan dalam namespace Secret tersebut. | |
Metode Pembaruan Sertifikat | Anda harus mengunggah sertifikat baru atau memperbarui sertifikat asli di Konsol Layanan Manajemen Sertifikat. Kemudian, Anda perlu memodifikasi konfigurasi Ingress yang terkait dengan sertifikat secara manual. | Anda harus memperbarui konfigurasi Secret tempat sertifikat disimpan. | |
Instance ALB mendukung maksimal 25 sertifikat. Dalam banyak kasus, jumlah sertifikat yang digunakan oleh instance ALB sama dengan total jumlah sertifikat yang terkait dengan semua pendengar instance tersebut, termasuk sertifikat yang terkait dengan Ingress. Untuk informasi lebih lanjut, lihat Metode untuk Menghitung Kuota ALB.
Kompatibilitas sertifikat yang dikonfigurasi menggunakan metode berbeda
Tabel berikut menjelaskan kompatibilitas metode konfigurasi sertifikat yang berbeda.
Cara Sertifikat Dikonfigurasi | Deskripsi |
Sertifikat dikonfigurasi menggunakan penemuan sertifikat otomatis dan sertifikat lain dikonfigurasi menggunakan Kubernetes Secret. |
|
Sertifikat dikonfigurasi menggunakan penemuan sertifikat otomatis dan sertifikat lain ditentukan dalam AlbConfig. Kedua sertifikat terkait dengan pendengar yang sama. | Pendengar hanya menggunakan sertifikat yang ditentukan dalam AlbConfig. |
Sertifikat dikonfigurasi menggunakan Kubernetes Secret dan sertifikat lain ditentukan dalam AlbConfig. Kedua sertifikat terkait dengan pendengar yang sama. | Kedua sertifikat digunakan. |
Prasyarat
Sertifikat tepercaya telah diperoleh. Anda dapat memperoleh sertifikat dengan salah satu cara berikut:
Beli sertifikat di konsol Layanan Manajemen Sertifikat. Untuk informasi lebih lanjut, lihat Beli Sertifikat Resmi.
Beli sertifikat yang diterbitkan oleh otoritas sertifikat (CA) lain.
(Opsional) Ikuti langkah-langkah dalam Hasilkan Sertifikat Tanda Tangan Sendiri untuk menghasilkan sertifikat tanda tangan sendiri.
Prosedur
Secara default, AlbConfig dikonfigurasi dengan pendengar HTTP pada port 80. Anda harus membuat pendengar HTTPS dan mengonfigurasi sertifikat. Jika tidak ada sertifikat yang dikonfigurasi, pendengar HTTPS menjadi tidak tersedia dan kontroler gagal karena kurangnya sertifikat.
Langkah 1: Buat pendengar HTTPS dalam AlbConfig
Jalankan perintah berikut untuk mengedit file konfigurasi
albconfig:kubectl edit albconfig <Albconfig_Name>Modifikasi konfigurasi berdasarkan kebutuhan bisnis Anda. Anda dapat mengonfigurasi parameter
portdanprotocoldalam Albconfig untuk membuat pendengar yang sesuai.apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: addressAllocatedMode: Fixed addressType: Internet zoneMappings: - vSwitchId: vsw-bp19sXXXXXXX176iv - vSwitchId: vsw-bp1boXXXXXXXu74xz listeners: - port: 80 protocol: HTTP - port: 443 # Konten baru protocol: HTTPS # Konten baru
(Opsional) Langkah 2: Hasilkan sertifikat tanda tangan sendiri
Jalankan perintah OpenSSL berikut untuk menghasilkan sertifikat tanda tangan sendiri:
Secara default, sertifikat tanda tangan sendiri tidak dipercayai oleh browser atau klien. Jika Anda mengaitkan sertifikat tanda tangan sendiri dengan Ingress, Anda mungkin menerima peringatan keamanan saat mengakses aplikasi yang menggunakan Ingress. Sertifikat tanda tangan sendiri yang dihasilkan dalam contoh ini hanya untuk referensi. Jangan gunakan sertifikat ini di lingkungan produksi.
openssl genrsa -out albtop-key.pem 4096
openssl req -subj "/CN=demo.alb.ingress.top" -sha256 -new -key albtop-key.pem -out albtop.csr
echo subjectAltName = DNS:demo.alb.ingress.top > extfile.cnf
openssl x509 -req -days 3650 -sha256 -in albtop.csr -signkey albtop-key.pem -out albtop-cert.pem -extfile extfile.cnfHasil yang Diharapkan:
Permintaan sertifikat berhasil ditandatangani sendiri
subject=CN=demo.alb.ingress.topDalam baris perintah sebelumnya, nama domain demo.alb.ingress.top terkait dengan sertifikat tanda tangan sendiri. Anda dapat mengganti nama domain dengan nama domain kustom.
Langkah 3: Buat sumber daya sampel
Selain AlbConfig yang Anda buat, Anda perlu membuat Deployment, Service, IngressClass, dan Ingress agar ALB Ingress berfungsi dengan normal. Anda dapat menggunakan template YAML berikut untuk membuat sumber daya tersebut.
Buat file bernama https-quickstart.yaml dan salin konten berikut ke file tersebut:
(Opsional) Jika pendengar HTTP dan HTTPS dikonfigurasi dalam AlbConfig, tambahkan bidang
annotationske konfigurasi Ingress. Contoh:Jalankan perintah berikut untuk membuat sumber daya tersebut:
kubectl apply -f https-quickstart.yaml
Langkah 4: Konfigurasikan sertifikat
Konfigurasikan penemuan sertifikat otomatis
Setelah Anda mengunggah sertifikat tanda tangan sendiri ke Layanan Manajemen Sertifikat, Anda dapat menentukan nama domain yang terikat pada bidang tls konfigurasi Ingress. Dengan cara ini, ALB Ingress dapat menemukan dan menggunakan sertifikat yang diunggah secara otomatis.
Unggah sertifikat tanda tangan sendiri ke konsol Layanan Manajemen Sertifikat. Untuk informasi lebih lanjut, lihat Unggah Sertifikat SSL.
Perbarui konfigurasi Ingress.
Jalankan perintah berikut untuk memodifikasi Ingress:
kubectl edit ingress https-ingressTambahkan bidang
tlsdan tentukan nama domain yang terikat pada sertifikat.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: https-ingress namespace: default spec: ingressClassName: alb rules: - host: demo.alb.ingress.top http: #... tls: - hosts: - demo.alb.ingress.top # Atur nilai ini ke nama domain yang terikat pada sertifikat. Nama domain harus sama dengan nama domain yang ditentukan di bidang “rules: host“.
Setelah penemuan sertifikat otomatis dikonfigurasi, instance ALB terkait secara otomatis membuat pendengar HTTPS:443.
Kelola sertifikat sebagai Secrets
Anda dapat menyimpan sertifikat tanda tangan sendiri dalam Secret dan kemudian menentukan Secret dalam konfigurasi Ingress.
Jalankan perintah berikut untuk mengkodekan file sertifikat dan kunci privat dalam Base64: Ganti
albtop-key.pemdanalbtop-cert.pemdengan file kunci dan sertifikat aktual.echo -n `cat albtop-key.pem` | base64echo -n `cat albtop-cert.pem` | base64Buat Secret.
Buat file bernama albconfig.yaml dan salin konten berikut ke file tersebut: Ganti
{base64 albtop-key.pem}dan{base64 albtop-cert.pem}dengan kode Base64 dari langkah sebelumnya.apiVersion: v1 kind: Secret metadata: name: https-secret type: kubernetes.io/tls data: tls.key: | {base64 albtop-key.pem} tls.crt: | {base64 albtop-cert.pem}Jalankan perintah berikut untuk membuat Secret:
kubectl apply -f https-secret.yaml
Perbarui konfigurasi Ingress.
Jalankan perintah berikut untuk memodifikasi Ingress:
kubectl edit ingress https-ingressTambahkan bidang
tlsdan tentukan nama domain yang terikat pada sertifikat dan Secret tempat sertifikat disimpan.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: https-ingress namespace: default spec: ingressClassName: alb rules: - host: demo.alb.ingress.top http: #... tls: - hosts: - demo.alb.ingress.top # Atur nilai ini ke nama domain yang terikat pada sertifikat. Nama domain harus sama dengan nama domain yang ditentukan di bidang “rules: host“. secretName: https-secret
Setelah Anda mengonfigurasi Secret, sertifikat bernama default-https-secret-****** secara otomatis diunggah ke halaman manajemen sertifikat SSL di konsol Layanan Manajemen Sertifikat. Instance ALB terkait secara otomatis membuat pendengar HTTPS:443.
Tentukan sertifikat dalam AlbConfigs
Setelah Anda mengunggah sertifikat tanda tangan sendiri ke Layanan Manajemen Sertifikat, Anda dapat menentukan ID sertifikat di bidang CertificateId dalam konfigurasi pendengar AlbConfig. Dengan cara ini, sertifikat terkait dengan pendengar.
Jika pendengar terkait dengan sertifikat, Ingress tidak lagi menggunakan fitur penemuan sertifikat otomatis.
Unggah sertifikat tanda tangan sendiri ke konsol Layanan Manajemen Sertifikat. Untuk informasi lebih lanjut, lihat Unggah dan Bagikan Sertifikat SSL.
Peroleh ID Sertifikat.
Masuk ke Konsol Layanan Manajemen Sertifikat.
Di panel navigasi sisi kiri, pilih .
Di halaman SSL Certificate Management, klik tab Manage Uploaded Certificates. Pilih sertifikat yang Anda unggah dan klik More di kolom Actions.
Di panel Certificate Details, Anda dapat melihat ID sertifikat di bidang CertIdentifier.
Tentukan sertifikat dalam AlbConfig.
Jalankan perintah berikut untuk memodifikasi AlbConfig:
kubectl edit albconfig <ALBCONFIG_NAME> # Ganti <ALBCONFIG_NAME> dengan nama AlbConfig.Tambahkan bidang
certificateske konfigurasi pendengar AlbConfig dan tentukan certificate ID yang Anda peroleh di langkah sebelumnya.apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: addressType: Intranet name: xiaosha-alb-test listeners: - port: 80 protocol: HTTP - certificates: - CertificateId: 756****-cn-hangzhou # ID sertifikat. IsDefault: true # Tentukan apakah sertifikat adalah default. port: 443 protocol: HTTPSJalankan perintah berikut untuk memodifikasi Ingress:
kubectl edit ingress https-ingressTambahkan anotasi
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 443}]'.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 443}]' # Bidang baru. Jika Anda ingin mendengarkan permintaan HTTP dan HTTPS, ubah nilainya menjadi '[{"HTTP": 80},{"HTTPS": 443}]'. name: https-ingress spec: ingressClassName: https-ingressclass rules: - host: demo.alb.ingress.top # Ganti demo.alb.ingress.top dengan nama domain yang ingin Anda gunakan. http: paths: - backend: service: name: https-svc port: number: 443 path: / pathType: Prefix
Setelah AlbConfig dikonfigurasi, instance ALB terkait secara otomatis membuat pendengar HTTPS:443.
Langkah 5: Verifikasi hasil
Akses aplikasi melalui HTTPS untuk memeriksa apakah sertifikat telah dikonfigurasi.
Jalankan perintah berikut untuk menanyakan Ingress:
kubectl get ingressHasil yang Diharapkan:
NAME CLASS HOSTS ADDRESS PORTS AGE https-ingress https-ingressclass demo.alb.ingress.top alb-********.alb.aliyuncs.com 80, 443 83mCatat nilai-nilai di kolom
HOSTSdanADDRESS.Jalankan perintah berikut untuk mengakses Service backend dari ALB Ingress: Ganti
demo.alb.ingress.topdanalb-********.alb.aliyuncs.comdengan nilai-nilai yang Anda peroleh di langkah sebelumnya.curl -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.comJika keluaran berikut dikembalikan, sertifikat telah dikonfigurasi:
old
Referensi
Jika Anda ingin menerima permintaan dari klien yang menggunakan protokol HTTP/3, lihat Gunakan Pendengar QUIC untuk Mendukung HTTP/3 dan Meningkatkan Kinerja Jaringan.
Jika Anda ingin menggunakan pendengar untuk mengaktifkan autentikasi mutual HTTPS, lihat Gunakan Autentikasi Mutual HTTPS untuk Meningkatkan Keamanan Layanan.