Untuk menegakkan kontrol akses berbasis IP pada gateway ingress, Anda perlu memperoleh alamat IP asal klien. Sebagai contoh, Anda dapat membuat kebijakan otorisasi untuk menolak atau mengizinkan permintaan ke gateway ingress dengan mengonfigurasi daftar hitam atau daftar putih alamat IP. Topik ini menjelaskan cara memperoleh alamat IP asal klien dari header permintaan HTTP.
Prasyarat
Injeksi proxy sidecar diaktifkan untuk namespace tertentu. Untuk informasi lebih lanjut, lihat Aktifkan Injeksi Proxy Sidecar Otomatis.
Informasi latar belakang
Dalam banyak kasus, permintaan yang berisi atribut klien diteruskan ke aplikasi menggunakan reverse proxy. Contohnya, sebuah permintaan berisi Header X-Forwarded-For. Istio mendukung berbagai topologi jaringan. Untuk mengakses alamat IP gateway ingress, Anda dapat menggunakan alamat IP publik dari instance Classic Load Balancer (CLB), menambahkan alamat IP gateway ingress ke Web Application Firewall (WAF), atau menggunakan topologi jaringan lainnya. Dalam hal ini, nilai default tidak dapat digunakan untuk mengidentifikasi alamat IP asal dalam Header X-Forwarded-For jika permintaan yang berisi atribut klien diteruskan ke beban kerja tertentu. Oleh karena itu, Anda tidak dapat memperoleh alamat IP asal klien berdasarkan nilai header permintaan X-Forwarded-For.
Untuk menyelesaikan masalah ini, atur parameter numTrustedProxies ke jumlah proxy tepercaya sebelum gateway ingress. Gateway ingress akan memperoleh alamat IP asal klien berdasarkan nilai parameter numTrustedProxies dan mengatur nilai header X-Envoy-External-Address. Layanan upstream kemudian dapat mengakses alamat IP asal klien melalui nilai header X-Envoy-External-Address.
Prosedur
Sebarkan aplikasi sampel.
Gunakan kubectl untuk terhubung ke cluster Container Service for Kubernetes (ACK). Untuk informasi lebih lanjut, lihat Dapatkan File kubeconfig Cluster dan Gunakan kubectl untuk Terhubung ke Cluster.
Sebarkan aplikasi HTTPBin.
Buat file httpbin.yaml dengan konten berikut:
Jalankan perintah berikut untuk menerapkan aplikasi HTTPBin:
kubectl apply -f httpbin.yaml
Buat gateway ingress.
Masuk ke Konsol ASM. Di panel navigasi sisi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sisi kiri, pilih .
Di halaman Ingress Gateway, klik Create. Di halaman Buat, konfigurasikan parameter yang diperlukan untuk gateway ingress.
Atur CLB Instance Type ke Internet Access. Untuk informasi lebih lanjut tentang parameter, lihat Buat Gateway Ingress.
Klik Advanced Options, atur External Traffic Policy ke Local, lalu klik Create.
Buat gateway Istio dan layanan virtual.
Gunakan kubectl untuk terhubung ke instance ASM sehingga Anda dapat memanggil operasi API untuk mengelola instance tersebut. Untuk informasi lebih lanjut, lihat Gunakan kubectl di Bidang Kontrol untuk Mengakses Sumber Daya Istio.
Buat gateway Istio.
Buat file httpbin-gateway.yaml dengan konten berikut:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: httpbin-gateway spec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - "*"Jalankan perintah berikut untuk membuat gateway Istio:
kubectl apply -f httpbin-gateway.yaml
Buat layanan virtual.
Buat file httpbin-virtualservice.yaml dengan konten berikut:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: httpbin spec: hosts: - "*" gateways: - httpbin-gateway http: - route: - destination: host: httpbin port: number: 8000Jalankan perintah berikut untuk membuat layanan virtual:
kubectl apply -f httpbin-virtualservice.yaml
Dapatkan alamat IP gateway ingress dengan nomor port 80. Untuk informasi lebih lanjut, lihat Buat Gateway Ingress.
Tambahkan alamat IP gateway ingress yang Anda peroleh di sublangkah 4 ke WAF. Untuk informasi lebih lanjut, lihat Tutorial.
Tambahkan parameter numTrustedProxies ke gateway ingress.
Masuk ke Konsol ASM. Di panel navigasi sisi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sisi kiri, pilih .
Di halaman Ingress Gateway, temukan gateway ingress dan klik YAML.
Di kotak dialog Edit, tambahkan konten berikut ke parameter spec, lalu klik OK.
podAnnotations: proxy.istio.io/config: '{"gatewayTopology" : { "numTrustedProxies": 2 } }'Atur parameter numTrustedProxies ke jumlah proxy tepercaya yang diterapkan sebelum gateway ingress sesuai dengan topologi jaringan. Jika Anda mengatur parameter numTrustedProxies ke nilai N yang lebih besar dari nol, alamat IP asal klien tepercaya adalah alamat ke-(N +1) dalam nilai parameter X-Forwarded-For.
Jalankan perintah berikut untuk mengakses aplikasi HTTPBin dan mendapatkan alamat IP asal klien:
curl http://{Alamat IP gateway ingress}/get?show_env=trueKeluaran yang Diharapkan:
{ "args": { "show_env": "true" }, "headers": { "Accept": "*/*", .... "X-Envoy-Attempt-Count": "1", "X-Envoy-External-Address": "106.11.**.**", .... }, .... }Nilai parameter X-Envoy-External-Address adalah alamat IP asal klien.