Setelah mengonfigurasi sertifikat HTTPS, Anda dapat menerapkan enkripsi Transport Layer Security (TLS) atau Secure Socket Layer (SSL) untuk layanan yang diterapkan melalui gateway Ingress Microservices Engine (MSE). Langkah ini penting untuk melindungi keamanan data aplikasi web modern dan layanan API. Sertifikat HTTPS digunakan untuk mengenkripsi transmisi data antara klien dan server melalui gateway, mencegah pihak ketiga tidak berwenang mencuri atau memalsukan informasi sensitif serta melindungi dari serangan man-in-the-middle.
Prasyarat
Layanan harus diekspos menggunakan gateway Ingress MSE. Untuk informasi lebih lanjut, lihat , Akses layanan kontainer melalui MSE Ingress, dan Gunakan MSE Ingress untuk mengakses aplikasi dalam kluster ACK Serverless.
Sertifikat digital tepercaya harus tersedia. Anda bisa mendapatkannya dengan salah satu metode berikut:
Beli sertifikat di konsol Layanan Manajemen Sertifikat. Untuk informasi lebih lanjut, lihat Beli sertifikat SSL.
Beli sertifikat dari otoritas CA lainnya.
Hasilkan sertifikat tanda tangan sendiri di mesin lokal Anda.
Metode konfigurasi
Gateway Ingress MSE memungkinkan Anda mengonfigurasi sertifikat HTTPS menggunakan Kubernetes Secret atau di konsol MSE.
Item | Kubernetes Secret | MSE console |
Skenario |
|
|
Prioritas | Rendah. | Tinggi. |
Dukungan lintas namespace | Tidak didukung. | Didukung. |
Pembaruan sertifikat | Ganti konten Kubernetes Secret. | Ganti sertifikat di konsol MSE, atau terapkan sertifikat baru untuk menggantikan sertifikat yang ada di konsol Layanan Manajemen Sertifikat Alibaba Cloud. |
Terapkan layanan backend
Masuk ke Konsol ACK. Di panel navigasi di sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel sebelah kiri, pilih .
Di halaman Deployments, klik Create from YAML. Gunakan kode YAML berikut untuk menerapkan deployment bernama httpbin dan layanan bernama httpbin.
apiVersion: apps/v1 kind: Deployment metadata: name: httpbin namespace: default spec: replicas: 1 selector: matchLabels: app: httpbin template: metadata: labels: app: httpbin version: v1 spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/mse-ingress/go-httpbin args: - "--version=v1" imagePullPolicy: Always name: httpbin --- apiVersion: v1 kind: Service metadata: name: httpbin namespace: default spec: ports: - port: 8080 protocol: TCP selector: app: httpbin
Konfigurasikan sertifikat HTTPS
Konfigurasikan sertifikat HTTPS menggunakan Kubernetes Secret
Anda dapat mengonfigurasi sertifikat HTTPS untuk nama domain menggunakan semantik asli Ingress untuk merujuk ke Kubernetes Secret.
Siapkan sertifikat nama domain. Dalam contoh ini, sertifikat tanda tangan sendiri disiapkan.
CatatanDalam skenario produksi, Anda harus mengganti kunci dan sertifikat contoh dengan kunci dan sertifikat aktual. Anda dapat mengunduh kunci dan sertifikat nama domain dari konsol Layanan Manajemen Sertifikat Alibaba Cloud.
Jalankan perintah berikut untuk menghasilkan file sertifikat bernama tls.crt dan file kunci privat bernama tls.key:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=foo.bar.com/O=foo.bar.com"Buat Secret untuk menyimpan sertifikat TLS.
Masuk ke Konsol ACK. Di panel navigasi di sebelah kiri, klik Clusters.
Di halaman Clusters, klik nama kluster yang ingin Anda ubah. Di panel sebelah kiri, pilih .
Klik Create. Di panel Create, atur Name menjadi tls-test, atur Type menjadi TLS Certificate, salin file tls.crt dan tls.key ke bidang terkait, lalu klik OK.

Buat aturan MSE Ingress dan konfigurasikan Sertifikat HTTPS untuk nama domain foo.bar.com.
Di panel navigasi sebelah kiri, pilih Network > Ingresses.
Di halaman Ingresses, klik Create Ingress.
Di kotak dialog Create Ingress, pilih MSE Cloud-native Gateway untuk Gateway Type, tentukan informasi seperti services, annotations, dan certificates yang terkait dengan layanan backend, lalu klik OK.
Atur Ingress Class menjadi mse. Di aturan yang ingin Anda tambahkan, pilih Prefix (Prefix-based Match) dari daftar drop-down Rule, masukkan
/di kolom Path, pilih httpbin dari daftar drop-down Service, lalu konfigurasikan sertifikat domain dengan merujuk pada Kubernetes Secret.
Uji lalu lintas HTTPS. Jalankan perintah berikut untuk menguji lalu lintas. Ganti x.x.x.x dengan alamat IP sebenarnya dari gateway Anda. Anda dapat melihat alamat IP gateway di halaman Ingresses.
CatatanDalam contoh ini, sertifikat tanda tangan sendiri digunakan dan nama domain tidak didaftarkan dengan penyedia layanan DNS. Dalam kasus ini, Anda harus secara manual menyelesaikan nama domain ke alamat IP gateway dengan menggunakan
--resolvedan melewati pemeriksaan validitas sertifikat dengan menggunakan-k.curl -v -k https://foo.bar.com/version --resolve "foo.bar.com:443:x.x.x.x"Output yang diharapkan:
* Terhubung ke foo.bar.com (X.X.X.X) port 443 (#0) * ALPN, menawarkan h2 * ALPN, menawarkan http/1.1 * berhasil menetapkan lokasi verifikasi sertifikat: * CAfile: /etc/ssl/cert.pem CApath: none * TLSv1.2 (OUT), Proses jabat tangan TLS, Client hello (1): * TLSv1.2 (IN), Proses jabat tangan TLS, Server hello (2): * TLSv1.2 (IN), Proses jabat tangan TLS, Sertifikat (11): * TLSv1.2 (IN), Proses jabat tangan TLS, Pertukaran kunci server (12): * TLSv1.2 (IN), Proses jabat tangan TLS, Server selesai (14): * TLSv1.2 (OUT), Proses jabat tangan TLS, Pertukaran kunci klien (16): * TLSv1.2 (OUT), Perubahan sandi TLS, Ubah spesifikasi sandi (1): * TLSv1.2 (OUT), Proses jabat tangan TLS, Selesai (20): * TLSv1.2 (IN), Perubahan sandi TLS, Ubah spesifikasi sandi (1): * TLSv1.2 (IN), Proses jabat tangan TLS, Selesai (20): * Koneksi SSL menggunakan TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN, server menerima penggunaan http/1.1 * Sertifikat server: * subjek: CN=foo.bar.com; O=foo.bar.com * tanggal mulai: 17 Jan 06:47:23 2024 GMT * tanggal kedaluwarsa: 16 Jan 06:47:23 2025 GMT * penerbit: CN=foo.bar.com; O=foo.bar.com * Hasil verifikasi sertifikat SSL: sertifikat tanda tangan sendiri (18), tetap melanjutkan. > GET /version HTTP/1.1 > Host: foo.bar.com > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < date: Rab, 17 Jan 2024 07:49:39 GMT < content-length: 53 < content-type: text/plain; charset=utf-8 < req-cost-time: 3 < req-arrive-time: 1705477779046 < resp-start-time: 1705477779049 < x-envoy-upstream-service-time: 2 < server: istio-envoy < version: v1 hostname: httpbin-xxxxxx
Konfigurasikan Sertifikat HTTPS di Konsol MSE
Anda dapat mengonfigurasi sertifikat untuk nama domain di konsol MSE. Dengan cara ini, Anda tidak perlu merujuk pada Kubernetes Secret di Ingress. Anda hanya perlu mengonfigurasi aturan routing.
Untuk nama domain yang sama, metode menggunakan konsol MSE memiliki prioritas lebih tinggi dibandingkan dengan metode menggunakan Kubernetes Secret. Jika Anda mengonfigurasi sertifikat untuk nama domain yang sama baik di konsol MSE maupun di Kubernetes Ingress, sertifikat yang dikonfigurasi di konsol MSE akan memiliki prioritas.
Siapkan sertifikat nama domain. Dalam contoh ini, sertifikat tanda tangan sendiri telah disiapkan.
CatatanDalam skenario produksi, Anda harus mengganti kunci dan sertifikat contoh dengan kunci dan sertifikat sebenarnya. Anda dapat mengunduh kunci dan sertifikat nama domain dari konsol Layanan Manajemen Sertifikat Alibaba Cloud.
Jalankan perintah berikut untuk menghasilkan file sertifikat bernama tls.crt dan file kunci privat bernama tls.key:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=foo.bar.com/O=foo.bar.com"Unggah sertifikat tanda tangan sendiri ke konsol Layanan Manajemen Sertifikat Alibaba Cloud. Untuk informasi lebih lanjut, lihat Unggah dan bagikan sertifikat SSL. Jika sertifikat Anda dikelola oleh konsol Layanan Manajemen Sertifikat Alibaba Cloud, lanjutkan ke langkah berikutnya.
Buat nama domain dan konfigurasikan sertifikat.
Masuk ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
Di panel navigasi sisi kiri, pilih Cloud-native Gateway > Gateways. Pada halaman Gateways, klik ID gateway.
Domain Names
Klik Add Domain Name. Di panel Add Domain Name, masukkan foo.bar.com di bidang Domain Name, pilih HTTPS dari daftar drop-down Protocol, lalu pilih sertifikat dari daftar drop-down Certificate.

Buat MSE Ingress.
Masuk ke Konsol ACK. Di panel navigasi sisi kiri, klik Clusters.
Pada halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel sisi kiri, pilih .
Pada halaman Ingresses, klik Create Ingress.
Di kotak dialog Create Ingress, pilih MSE Ingress untuk Gateway Type, tentukan parameter yang terkait dengan layanan backend seperti service name dan annotations, lalu klik OK.
Atur Ingress Class menjadi mse. Di aturan yang ingin ditambahkan, pilih Prefix (Prefix-based Match) dari daftar drop-down Rule, masukkan
/di bidang Path, lalu pilih httpbin dari daftar drop-down Service.CatatanAnda tidak perlu mengonfigurasi sertifikat TLS.

Uji lalu lintas HTTPS. Jalankan perintah berikut untuk menguji lalu lintas. Ganti x.x.x.x dengan alamat IP sebenarnya dari gateway Anda. Anda dapat melihat alamat IP gateway di halaman Ingresses.
CatatanDalam contoh ini, sertifikat tanda tangan sendiri digunakan dan nama domain belum didaftarkan dengan penyedia layanan DNS. Dalam kasus ini, Anda harus secara manual menyelesaikan nama domain ke alamat IP gateway dengan menggunakan
--resolvedan melewati pemeriksaan validitas sertifikat dengan menggunakan-k.curl -v -k https://foo.bar.com/version --resolve "foo.bar.com:443:x.x.x.x"Output yang diharapkan:
* Connected to foo.bar.com (X.X.X.X) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/cert.pem CApath: none * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS change cipher, Change cipher spec (1): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: CN=foo.bar.com; O=foo.bar.com * start date: Jan 17 06:47:23 2024 GMT * expire date: Jan 16 06:47:23 2025 GMT * issuer: CN=foo.bar.com; O=foo.bar.com * SSL certificate verify result: self signed certificate (18), continuing anyway. > GET /version HTTP/1.1 > Host: foo.bar.com > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < date: Wed, 17 Jan 2024 08:16:27 GMT < content-length: 46 < content-type: text/plain; charset=utf-8 < req-cost-time: 5 < req-arrive-time: 1705479387567 < resp-start-time: 1705479387573 < x-envoy-upstream-service-time: 4 < server: istio-envoy < version: v1 hostname: httpbin-xxxxxx