Service Mesh (ASM) ingress gateways mendukung pemuatan sertifikat dinamis melalui Secret Discovery Service (SDS). Anda dapat menambahkan, memperbarui, atau menghapus sertifikat Transport Layer Security (TLS) secara real time tanpa me-restart gateway atau memasang volume secret. Hal ini menghilangkan gangguan layanan selama perubahan sertifikat serta menyederhanakan pengelolaan HTTPS multi-host.
Cara kerja
Ingress gateway memantau Kubernetes Secrets di namespace yang sama dengan ingress gateway. Ketika sumber daya Gateway merujuk ke sebuah Secret berdasarkan nama melalui field credentialName, gateway secara otomatis memuat sertifikat dan kunci privat terkait. Perubahan pada Secret berlaku segera.
Manfaat:
Tidak memerlukan restart — Anda dapat menambahkan, menghapus, dan memperbarui sertifikat server dan kunci privat atau sertifikat root secara dinamis tanpa me-restart ingress gateway.
Tidak memerlukan pemasangan volume secret — gateway membaca sertifikat server dan kunci privat atau sertifikat root langsung dari Kubernetes Secrets.
Dukungan multi-host — satu gateway dapat melayani traffic HTTPS untuk beberapa domain, masing-masing dengan sertifikatnya sendiri.
Prasyarat
Langkah 1: Buat sertifikat server dan kunci privat
Nama domain harus memiliki ICP Filing sebelum dapat diakses. Contoh ini menggunakan aliyun.com sebagai nama domain.
Jika Anda sudah memiliki sertifikat dan kunci privat untuk aliyun.com, ubah nama file menjadi aliyun.com.crt dan aliyun.com.key. Jika belum, buat sertifikat mandiri menggunakan OpenSSL:
Buat sertifikat root dan kunci privat:
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crtBuat sertifikat dan kunci privat untuk aliyun.com:
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.crtSimpan sertifikat dalam instans ASM Anda. Metode bergantung pada versi ASM:
Untuk versi ASM sebelum 1.17
Hubungkan ke kluster tempat pod ingress gateway berjalan menggunakan kubectl, lalu buat TLS Secret di namespace istio-system:
kubectl create -n istio-system secret tls myexample-credential --key=aliyun.com.key --cert=aliyun.com.crtPentingNama Secret tidak boleh dimulai dengan istio atau prometheus, dan tidak boleh berisi field token.
Untuk versi ASM 1.17 atau lebih baru
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instans ASM Anda. Di panel navigasi kiri, pilih .
Di halaman Certificate Management, klik Create. Di panel Certificate Information, konfigurasikan parameter berikut dan klik OK.
Parameter
Nilai
Name
myexample-credential
Public Key Certificate
Isi dari
aliyun.com.crtyang dihasilkan pada sublangkah 2Private Key
Isi dari
aliyun.com.keyyang dihasilkan pada sublangkah 2
Langkah 2: Deploy layanan backend untuk a.aliyun.com
Langkah ini mendeploy layanan backend berbasis NGINX yang mengembalikan salam pada path /hello.
Buat file konfigurasi NGINX bernama myexample-nginx.conf dengan konten berikut:
events { } http { log_format main '$remote_addr - $remote_user [$time_local] $status ' '"$request" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log; server { listen 80; location /hello { return 200 'Welcome to a.aliyun.com!'; add_header Content-Type text/plain; } } }Di kluster tempat pod ingress gateway berjalan, buat ConfigMap untuk menyimpan konfigurasi NGINX:
kubectl create configmap myexample-nginx-configmap --from-file=nginx.conf=./myexample-nginx.confAktifkan injeksi proxy sidecar otomatis untuk namespace default. Untuk informasi lebih lanjut, lihat Aktifkan Injeksi Proxy Sidecar Otomatis.
Buat file myexampleapp.yaml dengan konten berikut, lalu deploy:
kubectl apply -f myexampleapp.yaml
Langkah 3: Deploy layanan backend untuk b.aliyun.com
Langkah ini mendeploy layanan backend berbasis httpbin yang menyediakan endpoint pengujian HTTP.
Buat file httpbin.example.yaml dengan konten berikut:
Deploy layanan:
kubectl apply -f httpbin.example.yaml
Langkah 4: Buat sumber daya Gateway
Definisikan Istio Gateway yang mengakhiri TLS pada port 443 untuk semua host *.aliyun.com, menggunakan sertifikat yang tersimpan dalam myexample-credential.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instans ASM Anda. Di panel navigasi kiri, pilih . Klik Create from YAML.
Pilih namespace default, tempel YAML berikut, lalu klik Create:
Field credentialName harus cocok dengan nama Secret atau sertifikat yang dibuat pada Langkah 1. Gateway akan memuat sertifikat yang dirujuk oleh nama ini secara dinamis.
Langkah 5: Buat VirtualService
Definisikan VirtualService untuk setiap layanan backend agar traffic HTTPS dari Gateway dialihkan ke layanan yang sesuai.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instans ASM Anda. Di panel navigasi kiri, pilih . Klik Create from YAML.
Buat VirtualService untuk a.aliyun.com: