Semua data antara gateway ingress dan proxy sidecar ditransmisikan melalui terowongan Mutual Transport Layer Security (mTLS). Jika proxy sidecar disuntikkan ke dalam aplikasi, konfigurasikan terminasi TLS di gateway ingress untuk memastikan enkripsi ujung-ke-ujung. Jika proxy sidecar tidak disuntikkan atau kondisi khusus lainnya terjadi, gunakan dukungan TLS pass-through di gateway ingress. Topik ini menjelaskan cara mengaktifkan TLS pass-through pada gateway ingress untuk memastikan akses aman ke layanan HTTPS dalam kluster.
Prasyarat
Sebuah gateway ingress telah diterapkan. Untuk informasi lebih lanjut, lihat Buat gateway ingress.
Sebuah aplikasi telah diterapkan di kluster yang ditambahkan ke instance ASM. Untuk informasi lebih lanjut, lihat Terapkan aplikasi di kluster ACK yang ditambahkan ke instance ASM.
Nama domain dengan pendaftaran Penyedia Konten Internet (ICP) tersedia. Dalam topik ini, nama domain aliyun.com digunakan.
Langkah 1: Siapkan sertifikat server dan kunci privat
Jika Anda memiliki sertifikat server dan kunci privat untuk nama domain sample.aliyun.com, ubah nama kunci privat menjadi sample.aliyun.com.key dan sertifikat server menjadi sample.aliyun.com.crt. Sebagai alternatif, 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 diimplementasikan menggunakan NGINX. Buat file konfigurasi untuk server NGINX terlebih dahulu. Dalam contoh ini, layanan internal untuk nama domain aliyun.com digunakan. Tentukan path root permintaan untuk langsung mengembalikan kalimat Selamat datang di aliyun.com tanpa TLS Termination! dan kode status 200. Contoh kode berikut menunjukkan 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 'Selamat datang di aliyun.com tanpa 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 gateway ingress berada berdasarkan informasi dalam file kubeconfig. Kemudian, jalankan perintah berikut untuk membuat ConfigMap yang menyimpan konfigurasi server NGINX:
kubectl create configmap mynginx-configmap --from-file=nginx.conf=./mynginx.confGunakan kubectl untuk terhubung ke kluster tempat pod gateway ingress berada berdasarkan informasi dalam file kubeconfig. Kemudian, jalankan perintah berikut untuk membuat rahasia 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 informasi lebih lanjut tentang prosedurnya, lihat Aktifkan injeksi proxy sidecar otomatis.
Buat file mynginxapp.yaml dengan konten berikut. Kemudian, 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 untuk memeriksa apakah server NGINX telah diterapkan:
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 Istio
Masuk ke Konsol ASM.
Di panel navigasi sisi kiri, pilih .
Di halaman Mesh Management, temukan instance ASM yang ingin dikonfigurasi. Klik nama instance tersebut atau klik Manage di kolom Actions.
Di halaman detail instance ASM, pilih di panel navigasi sisi kiri. Di halaman yang muncul, klik Create from YAML.
Di halaman Buat, lakukan langkah-langkah berikut untuk mendefinisikan gateway Istio. Kemudian, klik Create.
Pilih namespace sesuai kebutuhan. Dalam contoh ini, namespace default dipilih.
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 sisi kiri, pilih .
Di halaman Mesh Management, temukan instance ASM yang ingin dikonfigurasi. Klik nama instance tersebut atau klik Manage di kolom Actions.
Di halaman detail instance ASM, pilih di panel navigasi sisi kiri. Di halaman yang muncul, klik Create from YAML.
Di halaman Buat, lakukan langkah-langkah berikut untuk mendefinisikan layanan virtual. Kemudian, klik Create.
Pilih namespace sesuai kebutuhan. Dalam contoh ini, namespace default dipilih.
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 gateway ingress:
Metode 1: menggunakan Konsol ASM. Untuk informasi lebih lanjut, lihat Sublangkah 1 dari Langkah 3 dalam topik Gunakan sumber daya Istio untuk merutekan trafik ke versi layanan yang berbeda.
Metode 2: dengan menjalankan perintah kubectl.
Gunakan kubectl untuk terhubung ke kluster tempat pod gateway ingress berada berdasarkan informasi dalam file kubeconfig. Kemudian, jalankan perintah berikut untuk mendapatkan alamat IP gateway ingress:
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:
Selamat datang di aliyun.com tanpa TLS Termination!%