Semua data antara gerbang masuk dan proxy sidecar dikirim melalui saluran Mutual Transport Layer Security (mTLS). Jika proxy sidecar disuntikkan ke dalam aplikasi, sebaiknya Anda mengonfigurasi terminasi TLS pada gerbang masuk untuk memastikan enkripsi end-to-end. Namun, jika proxy sidecar tidak disuntikkan ke dalam aplikasi atau terdapat kondisi khusus lainnya, gerbang masuk mendukung TLS pass-through. Topik ini menjelaskan cara mengaktifkan TLS pass-through pada gerbang masuk guna memastikan akses aman ke layanan HTTPS dalam kluster.
Prasyarat
Gerbang masuk telah dideploy. Untuk informasi selengkapnya, lihat Buat gerbang masuk.
Aplikasi telah dideploy di kluster yang ditambahkan ke instans ASM. Untuk informasi selengkapnya, lihat Deploy aplikasi ke kluster yang terkait dengan ASM.
Nama domain dengan pengajuan Internet Content Provider (ICP) tersedia. Pada topik ini, digunakan nama domain aliyun.com.
Langkah 1: Siapkan sertifikat server dan kunci privat
Jika Anda memiliki sertifikat server dan kunci privat yang tersedia untuk nama domain sample.aliyun.com, ubah nama kunci privat menjadi sample.aliyun.com.key dan sertifikat server menjadi sample.aliyun.com.crt. Atau, jalankan perintah openssl berikut untuk membuat sertifikat server dan kunci privat untuk sample.aliyun.com.
Jalankan perintah berikut untuk membuat sertifikat root dan kunci privat:
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=mynginx Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crtJalankan perintah berikut untuk menghasilkan sertifikat server dan kunci privat untuk server
sample.aliyun.com:openssl req -out sample.aliyun.com.csr -newkey rsa:2048 -nodes -keyout sample.aliyun.com.key -subj "/CN=sample.aliyun.com/O=mynginx sample organization" openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in sample.aliyun.com.csr -out sample.aliyun.com.crt
Langkah 2: Definisikan layanan internal
Layanan internal dalam contoh ini adalah server NGINX. Pertama, buat file konfigurasi untuk server NGINX. Untuk domain aliyun.com, konfigurasikan path root agar mengembalikan pesan Welcome to aliyun.com without TLS Termination! dan kode status 200. Berikut adalah isi file mynginx.conf.
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 443 ssl;
location / {
return 200 'Welcome to aliyun.com without TLS Termination!';
add_header Content-Type text/plain;
}
server_name www.aliyun.com;
ssl_certificate /etc/nginx-server-certs/tls.crt;
ssl_certificate_key /etc/nginx-server-certs/tls.key;
}
}
Gunakan kubectl untuk terhubung ke kluster tempat Pod gerbang masuk berada berdasarkan informasi dalam file kubeconfig. Lalu, jalankan perintah berikut untuk membuat ConfigMap guna menyimpan konfigurasi server NGINX:
kubectl create configmap mynginx-configmap --from-file=nginx.conf=./mynginx.confGunakan kubectl untuk terhubung ke kluster tempat Pod gerbang masuk berada berdasarkan informasi dalam file kubeconfig. Lalu, jalankan perintah berikut untuk membuat secret yang berisi sertifikat server dan kunci privat di namespace default:
kubectl create secret tls nginx-server-certs --key sample.aliyun.com.key --cert sample.aliyun.com.crtAktifkan injeksi proxy sidecar otomatis untuk namespace default. Untuk prosedurnya, lihat Aktifkan injeksi proxy sidecar otomatis.
Buat file mynginxapp.yaml yang berisi konten berikut. Lalu, jalankan perintah
kubectl apply -f mynginxapp.yamluntuk membuat layanan internal untuk nama domain aliyun.com.Jalankan perintah berikut untuk mengirim permintaan dari proxy sidecar ke server NGINX guna memeriksa apakah server NGINX telah dideploy:
kubectl exec -it $(kubectl get pod -l app=mynginxapp -o jsonpath={.items..metadata.name}) -c istio-proxy -- curl -v -k --resolve sample.aliyun.com:443:127.0.0.1 https://sample.aliyun.com
Langkah 3: Buat gateway
-
Masuk ke Konsol ASM.
-
Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, temukan instans ASM yang ingin Anda konfigurasi. Klik nama instans ASM tersebut atau klik Manage di kolom Actions.
-
Pada halaman detail instans ASM, pilih di panel navigasi kiri. Pada halaman yang muncul, klik Create from YAML.
-
Konfigurasikan Gateway sebagai berikut, lalu klik Create.
-
Pilih namespace. Contoh ini menggunakan namespace default.
Di editor kode, definisikan gateway Istio menggunakan kode YAML berikut:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: istio-mynginx-customingressgateway spec: selector: istio: ingressgateway servers: - hosts: - 'sample.aliyun.com' port: name: https number: 443 protocol: HTTPS tls: mode: PASSTHROUGH
Di halaman Gateway, Anda dapat melihat gateway Istio yang telah dibuat.
-
Langkah 4: Buat layanan virtual
-
Masuk ke Konsol ASM.
-
Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, temukan instans ASM yang ingin Anda konfigurasi. Klik nama instans ASM tersebut atau klik Manage di kolom Actions.
-
Pada halaman detail instans ASM, pilih di panel navigasi kiri. Pada halaman yang muncul, klik Create from YAML.
-
Konfigurasikan VirtualService sebagai berikut, lalu klik Create.
-
Pilih namespace. Contoh ini menggunakan namespace default.
Di editor kode, definisikan layanan virtual menggunakan kode YAML berikut:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: istio-mynginx-customvirtualservice spec: hosts: - "sample.aliyun.com" gateways: - istio-mynginx-customingressgateway tls: - match: - port: 443 sniHosts: - sample.aliyun.com route: - destination: host: mynginxapp.default.svc.cluster.local port: number: 443
Di halaman VirtualService, Anda dapat melihat layanan virtual yang telah dibuat.
-
Lihat hasilnya
Gunakan salah satu metode berikut untuk mendapatkan alamat IP gerbang masuk:
Metode 1: menggunakan Konsol ASM. Untuk informasi selengkapnya, lihat Langkah 3 Sublangkah 1 dalam topik Gunakan sumber daya Istio untuk mengarahkan traffic ke versi layanan yang berbeda.
Metode 2: menjalankan perintah kubectl.
Gunakan kubectl untuk terhubung ke kluster tempat Pod gerbang masuk berada berdasarkan informasi dalam file kubeconfig. Lalu, jalankan perintah berikut untuk mendapatkan alamat IP gerbang masuk:
kubectl get svc -n istio-system -l istio=ingressgateway
Jalankan perintah berikut untuk mengakses nama domain aliyun.com melalui HTTPS:
curl -v --cacert aliyun.root.crt --resolve sample.aliyun.com:443:xx.xx.xx.xx https://sample.aliyun.comOutput yang diharapkan:
Welcome to aliyun.com without TLS Termination!%