Gerbang Alibaba Cloud Service Mesh (ASM) menghentikan TLS pada lapisan ingress, sehingga klien eksternal terhubung melalui HTTPS sementara lalu lintas internal dikirimkan tanpa enkripsi ke Layanan Knative. Gerbang ini memuat dinamis sertifikat TLS dari Kubernetes Secret, yang memungkinkan Anda memperbarui kredensial tanpa perlu me-restart Pod gerbang.
Panduan ini menjelaskan langkah-langkah untuk membuat sertifikat TLS, menyimpannya sebagai Kubernetes Secret, mengonfigurasi gerbang ASM untuk HTTPS, serta memverifikasi konektivitas end-to-end.
Cara kerja
Ketika klien mengirim Permintaan HTTPS ke Layanan Knative:
Permintaan tersebut mencapai Pod gerbang masuk ASM di namespace
istio-system.Gerbang menghentikan proses jabat tangan TLS menggunakan sertifikat dan kunci privat yang disimpan dalam Kubernetes Secret.
Gerbang meneruskan permintaan yang telah didekripsi ke Layanan Knative target di dalam mesh.
Pengaturan ini mengenkripsi lalu lintas antara klien eksternal dan gerbang, tetapi tidak mengenkripsi lalu lintas antar komponen internal dalam mesh. Untuk mengenkripsi lalu lintas antar layanan di dalam mesh, konfigurasikan mutual TLS (mTLS) ASM.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Layanan Knative yang telah dideploy melalui Knative on ASM. Untuk detailnya, lihat Gunakan Knative on ASM untuk mendeploy aplikasi arsitektur tanpa server.
Nama domain kustom yang telah dikonfigurasi di Knative on ASM (panduan ini menggunakan
aliyun.comsebagai contoh). Untuk detailnya, lihat Atur nama domain kustom di Knative on ASM.Pendaftaran Internet Content Provider (ICP) untuk nama domain
aliyun.com.OpenSSL yang telah diinstal di mesin lokal Anda (hanya diperlukan untuk sertifikat tanda tangan sendiri).
kubectlyang telah dikonfigurasi untuk mengakses baik lapisan kontrol ASM maupun kluster yang menjalankan Pod gerbang masuk.
Langkah 1: Buat sertifikat TLS dan kunci privat
Jika Anda sudah memiliki sertifikat dan kunci privat yang valid untuk aliyun.com, ubah namanya menjadi aliyun.com.crt dan aliyun.com.key, lalu lanjutkan ke bagian Simpan sertifikat sebagai Kubernetes Secret.
Untuk menghasilkan sertifikat tanda tangan sendiri dengan OpenSSL:
Buat Otoritas Sertifikat Root (CA):
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 \ -subj '/O=myexample Inc./CN=aliyun.com' \ -keyout aliyun.root.key -out aliyun.root.crtHasilkan sertifikat server dan kunci privat yang ditandatangani oleh CA root:
openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes \ -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization" openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key \ -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt
Untuk lingkungan produksi, gunakan sertifikat dari Certificate Authority (CA) publik atau integrasikan dengan cert-manager untuk mengotomatiskan penyediaan dan perpanjangan sertifikat. Sertifikat tanda tangan sendiri hanya cocok untuk pengembangan dan pengujian.
Simpan sertifikat sebagai Kubernetes Secret
Menggunakan kubeconfig dari kluster yang menjalankan Pod gerbang masuk, buat TLS Secret di namespace istio-system:
kubectl create -n istio-system secret tls myexample-credential \
--key=aliyun.com.key --cert=aliyun.com.crtCatat nama Secret (myexample-credential). Anda akan membutuhkannya pada langkah berikutnya.
Langkah 2: Konfigurasikan HTTPS pada gerbang ASM
Simpan YAML berikut sebagai
default.yaml. Ganti nilai-nilai berikut:Field Description domainNameNama domain kustom yang dikonfigurasi di Knative on ASM credentialNameNama TLS Secret yang dibuat pada langkah sebelumnya apiVersion: istio.alibabacloud.com/v1beta1 kind: ASMKnativeConfig metadata: name: default spec: enabled: true useExisting: true tag: 1.4.0 domainConfig: domainName: aliyun.com # Ganti dengan nama domain Anda. credentialName: myexample-credential # Ganti dengan nama Secret Anda.Hubungkan kubectl ke lapisan kontrol ASM dan terapkan konfigurasi:
kubectl apply -f default.yaml
Langkah 3: Verifikasi akses HTTPS
Perbarui file hosts lokal Anda
Tambahkan pemetaan DNS untuk domain Layanan Knative ke alamat IP gerbang ASM:
<gateway-ip> helloworld-go.default.aliyun.comGanti <gateway-ip> dengan alamat IP gerbang masuk ASM. Untuk menemukan alamat ini, lihat Langkah 3: Kueri alamat gerbang dalam *Gunakan Knative on ASM untuk mendeploy aplikasi arsitektur tanpa server*.
Uji dengan curl
Kirim Permintaan HTTPS ke Layanan Knative menggunakan CA root untuk verifikasi sertifikat:
curl --cacert aliyun.root.crt \
--cert aliyun.com.crt --key aliyun.com.key \
https://helloworld-go.default.aliyun.comOutput yang diharapkan:
Hello Knative!Flag --cacert memverifikasi sertifikat server terhadap CA root yang Anda hasilkan. Jika Anda menggunakan sertifikat dari CA publik, hilangkan flag --cacert.
Untuk melewati verifikasi sertifikat selama pengujian cepat dengan sertifikat tanda tangan sendiri, gunakan flag -k:
curl -k --cert aliyun.com.crt --key aliyun.com.key \
https://helloworld-go.default.aliyun.comUji dengan browser
Buka https://helloworld-go.default.aliyun.com di browser.
Browser akan menampilkan peringatan keamanan untuk sertifikat tanda tangan sendiri. Hal ini normal dan bukan indikasi adanya kesalahan konfigurasi.
Pemecahan Masalah
| Gejala | Kemungkinan penyebab | Penyelesaian |
|---|---|---|
connection refused pada port 443 | ASMKnativeConfig belum diterapkan, atau Pod gerbang belum dimuat ulang | Jalankan kubectl get asmknativeconfig default -o yaml untuk memverifikasi konfigurasi. Periksa log Pod gerbang untuk menemukan error. |
| TLS handshake failure | Nama Secret dalam ASMKnativeConfig tidak sesuai dengan Secret di istio-system | Jalankan kubectl get secret -n istio-system untuk memastikan Secret ada dan namanya sesuai dengan credentialName. |
certificate verify failed dengan curl | Flag --cacert mengarah ke sertifikat CA yang salah | Berikan CA root (aliyun.root.crt), bukan sertifikat server. |
| Browser menampilkan peringatan "Not Secure" | Sertifikat tanda tangan sendiri sedang digunakan | Hal ini normal untuk sertifikat tanda tangan sendiri. Gunakan sertifikat dari CA publik untuk lingkungan produksi. |
404 Not Found setelah menerapkan konfigurasi | Nama domain dalam ASMKnativeConfig tidak sesuai dengan domain Layanan Knative | Verifikasi bahwa domainName sesuai dengan domain yang dikonfigurasi di Knative on ASM. |
Langkah Selanjutnya
Rilis canary dengan pemisahan lalu lintas: Knative on ASM mendukung rilis canary berdasarkan pemisahan lalu lintas. Saat Anda membuat Layanan Knative, Knative secara otomatis membuat Revision pertama. Setiap kali konfigurasi Layanan berubah, Knative membuat Revision baru dan menyesuaikan persentase lalu lintas yang didistribusikan ke berbagai Revision. Untuk detailnya, lihat Lakukan rilis canary berdasarkan pemisahan lalu lintas untuk Layanan Knative menggunakan Knative on ASM.
Autoscaling Pod berbasis permintaan: Knative Serving menambahkan kontainer Queue Proxy ke setiap Pod. Kontainer Queue Proxy melaporkan metrik konkurensi ke Knative Pod Autoscaler (KPA). Berdasarkan metrik tersebut, KPA secara otomatis menyesuaikan jumlah Pod yang disediakan untuk suatu Penyebaran sesuai dengan jumlah permintaan konkuren dan algoritma autoscaling terkait. Untuk detailnya, lihat Aktifkan autoscaling Pod berdasarkan jumlah permintaan.