Instans ASM versi 1.16.4 dan yang lebih baru memungkinkan Anda menggunakan bidang CustomResourceDefinition (CRD) untuk mendefinisikan kebijakan trafik egress. Topik ini menjelaskan cara menggunakan kebijakan trafik egress untuk mengelola trafik egress.
Latar Belakang
Prinsip
ASM mendukung pengelolaan trafik egress dengan membuat beberapa sumber daya seperti ServiceEntry, VirtualService, Gateway, dan Destination, serta memastikan bahwa sumber daya tersebut saling terhubung. Setelah konfigurasi selesai, hal ini mencapai pengalihan trafik transparan ke gateway egress, yang kemudian meneruskannya ke layanan eksternal.
Konfigurasi ini kompleks dan memerlukan pemahaman mendalam tentang bidang-bidang terkait, sehingga rentan terhadap kesalahan. Untuk menurunkan ambang batas konfigurasi trafik egress, ASM memperkenalkan sumber daya ASMEgressTrafficPolicy.
ASMEgressTrafficPolicy mengabstraksi dan menyederhanakan konfigurasi trafik egress. Alih-alih secara manual mengonfigurasi sumber daya seperti ServiceEntry, VirtualService, Gateway, dan Destination, Anda hanya perlu menambahkan beberapa konfigurasi yang diperlukan untuk mencapai pengalihan trafik transparan ke gateway egress dan mengirimkannya ke layanan eksternal melalui protokol HTTP/HTTPS.
Karena ASMEgressTrafficPolicy menyederhanakan sumber daya asli ASM, mungkin tidak dapat memenuhi beberapa kebutuhan lanjutan Anda (seperti rute proporsional trafik egress, memulai mTLS dari gateway egress, dan lainnya). Jika Anda memerlukan fitur lanjutan, seperti menambahkan konfigurasi kustom, lihat Konfigurasikan Gateway Egress untuk Merutekan Semua Trafik Keluar di ASM.
Fitur
ASM menyediakan cara yang seragam untuk menghubungkan, mengelola, dan melindungi komunikasi antar aplikasi. Tidak seperti metode berbasis IP, ASM menggunakan pendekatan berbasis aplikasi tanpa memerlukan modifikasi pada kode aplikasi yang ada. ASMEgressTrafficPolicy mendefinisikan cara mengelola dan mengakses trafik eksternal melalui gateway egress. Dengan menggabungkan gateway egress ASM dan AuthorizationPolicy, Anda dapat mengontrol trafik egress secara lebih fleksibel. 
Jalur trafik dalam contoh ini dapat dikategorikan menjadi dua jenis:
1. Komunikasi antara proxy sidecar dan antara proxy sidecar dan gateway: Secara default, mutual Transport Layer Security (mTLS) diaktifkan untuk komunikasi tersebut, dan sertifikat dikelola oleh ASM.
2. Komunikasi antara aplikasi dan proxy sidecar dan antara gateway dan layanan eksternal:
a. Untuk memastikan bahwa kemampuan tingkat lanjut Lapisan 7 ASM dapat berfungsi dengan baik, aplikasi dan proxy sidecar berkomunikasi dalam teks biasa sebanyak mungkin. Dengan cara ini, proxy sidecar dapat memperoleh informasi Lapisan 7 dari trafik dan mendukung fitur-fitur tingkat lanjut. Karena alasan khusus tertentu, jika aplikasi harus mengirim Permintaan HTTPS secara langsung, hanya kemampuan Lapisan 4 ASM yang dapat digunakan.
b. Anda dapat mengonfigurasi protokol komunikasi antara gateway egress dan layanan eksternal, baik teks biasa maupun HTTPS.
Prasyarat
Sebuah instans ASM edisi komersial (Enterprise Edition atau Ultimate Edition) telah dibuat. Versi instans tersebut adalah 1.16.4 atau yang lebih baru. Untuk informasi lebih lanjut, lihat Buat Instans ASM. Untuk informasi tentang peningkatan instans, lihat Tingkatkan Instans ASM.
Injeksi sidecar otomatis diaktifkan untuk namespace default. Untuk informasi lebih lanjut, lihat Aktifkan Injeksi Proxy Sidecar Otomatis.
Persiapan
Tetapkan kebijakan trafik egress untuk instans ASM
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
Di tab global, klik Outbound Traffic Policy, klik REGISTRY_ONLY di sebelah kanan External Access Policy, dan klik Update Settings.
Buat namespace
Buat namespace istio-egress. Untuk informasi lebih lanjut, lihat Kelola Namespace Global.
Di halaman Global namespace, klik Sync Automatic Sidecar Injection to Kubernetes Cluster untuk menyinkronkan namespace ke kluster ACK yang dikelola oleh instans ASM.
Buat gateway egress
Buat gateway egress bernama egressgateway-a di ASM, atur Port Mapping ke HTTP 80, HTTPS 443, dan HTTPS 444, dan aktifkan Support two-way TLS authentication. Untuk informasi lebih lanjut, lihat Buat Gateway Egress.
Pastikan bahwa bidang spec dalam file YAML yang dihasilkan berisi konten berikut. Jika tidak, tambahkan konten tersebut:
spec:
podLabels:
security.istio.io/tlsMode: istioBuat layanan
Buat namespace bernama mytest untuk instans ASM dan aktifkan injeksi proxy sidecar otomatis. Untuk informasi lebih lanjut, lihat Kelola Namespace Global.
Di kluster ACK, deploy layanan sleep-a di namespace mytest dan deploy layanan NGINX di namespace default.
Buat file bernama test.yaml dan salin konten berikut ke file tersebut:
Di kluster ACK, jalankan perintah berikut untuk menerapkan layanan sleep-a dan NGINX:
kubectl apply -f test.yaml
Jalankan perintah berikut untuk mengakses
http://www.httpbin.orgmelalui layanan sleep-a dan NGINX:kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.org kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgOutput mengembalikan
502, menunjukkan kegagalan akses.
Gunakan layanan sleep-a untuk mengakses layanan eksternal melalui HTTP
Solusi 1: Gunakan teks biasa HTTP untuk komunikasi antara proxy sidecar dan gateway egress
Solusi ini tidak masuk akal dalam lingkungan nyata. Komunikasi antara kontainer sidecar dan gateway egress melalui teks biasa HTTP dapat menyebabkan otentikasi klien tidak tersedia. Saat ini, ASMEgressTrafficPolicy tidak mendukung penggunaan teks biasa HTTP untuk mengakses gateway egress.
Pengelolaan trafik dilakukan di proxy sidecar di sisi klien dan tidak memerlukan gateway egress.
Keterlihatan tidak bergantung pada gateway egress.
Kemampuan keamanan bergantung pada gateway egress. Namun, tanpa mTLS, semua kemampuan otorisasi berdasarkan identitas klien tidak tersedia. Dalam kasus ini, gateway egress hanya dapat menolak semua permintaan secara tidak pandang bulu.
(Direkomendasikan) Solusi 2: Gunakan mTLS untuk komunikasi antara proxy sidecar dan gateway egress
Buat kebijakan trafik egress.
Konfigurasikan melalui konsol
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
Klik nama gateway untuk masuk ke halaman Gateway overview. Klik Outbound Traffic Policy di sebelah kiri. Konfigurasikan parameter seperti yang ditunjukkan pada gambar berikut.

Konfigurasikan melalui kubectl
Buat file egress-by-egressgateway.yaml yang berisi konten berikut:
Untuk informasi lebih lanjut tentang bidang-bidang, lihat Deskripsi CRD ASMEgressTrafficPolicy.
apiVersion: istio.alibabacloud.com/v1 kind: ASMEgressTrafficPolicy metadata: name: egress-by-egressgateway # Format nilai ini adalah egress-by-{Nama gateway egress}. Nilai ini sesuai dengan nama gateway egress. namespace: istio-egress # Nilai ini tetap istio-egress. spec: byEgressGateway: name: egressgateway egressRules: - from: - namespace: mytest workloadSelector: app: sleep-a to: - name: httpbin-service-http hosts: - www.httpbin.org # Alamat IP dari beberapa nama domain setelah resolusi DNS harus sama. - httpbin.org # Alamat IP dari beberapa nama domain setelah resolusi DNS harus sama. port: name: http number: 80 protocol: HTTP byEgressGateway: port: 80 # Sidecar → 80 Gateway → 80 Layanan (httpbin.org)Di kluster ACK, jalankan perintah berikut untuk membuat sumber daya ASMEgressTrafficPolicy:
kubectl apply -f egress-by-egressgateway.yaml
Verifikasi apakah konfigurasi ASMEgressTrafficPolicy berlaku.
Jalankan perintah berikut untuk mengakses
http://www.httpbin.orgmelalui layanan NGINX di namespace default.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgOutput mengembalikan
502, menunjukkan bahwa akses kehttp://www.httpbin.orgmelalui layanan NGINX gagal.Jalankan perintah berikut untuk mengakses
http://www.httpbin.orgmelalui layanan sleep-a di namespace mytest:kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgOutput mengembalikan
200sesuai harapan.Jalankan perintah berikut untuk menghapus egress-by-egressgateway, dan akses
http://www.httpbin.orglagi melalui layanan sleep-a di namespace mytest.kubectl -n istio-egress delete ASMEgressTrafficPolicy egress-by-egressgateway kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgOutput mengembalikan
502, menunjukkan bahwa akses kehttp://www.httpbin.orgmelalui layanan sleep-a gagal setelah konfigurasi ASMEgressTrafficPolicy dihapus.
Output menunjukkan bahwa kebijakan trafik egress berlaku.
Gunakan layanan sleep-a untuk mengakses layanan eksternal melalui HTTPS
(Direkomendasikan) Solusi 1: Gunakan mTLS untuk komunikasi antara proxy sidecar dan gateway egress
Buat kebijakan trafik egress.
Konfigurasikan melalui konsol
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
Klik nama gateway untuk masuk ke halaman Gateway overview dan klik Outbound Traffic Policy di sebelah kiri. Konfigurasikan parameter seperti yang ditunjukkan pada gambar berikut.

Konfigurasikan melalui kubectl
Perbarui file egress-by-egressgateway.yaml dengan konten berikut:
Bidang spec diperbarui untuk menyertakan bidang httpsUpgrade dan definisi untuk akses langsung ke
https://www.httpbin.org. Untuk informasi lebih lanjut tentang bidang-bidang, lihat Deskripsi CRD ASMEgressTrafficPolicy.apiVersion: istio.alibabacloud.com/v1 kind: ASMEgressTrafficPolicy metadata: name: egress-by-egressgateway # Format nilai ini adalah egress-by-{Nama gateway egress}. Nilai ini sesuai dengan nama gateway egress. namespace: istio-egress # Nilai ini tetap istio-egress. spec: byEgressGateway: name: egressgateway egressRules: - from: - namespace: mytest workloadSelector: app: sleep-a to: - name: httpbin-service-http hosts: - www.httpbin.org # Alamat IP dari beberapa nama domain setelah resolusi DNS harus sama. - httpbin.org # Alamat IP dari beberapa nama domain setelah resolusi DNS harus sama. port: name: http number: 80 protocol: HTTP byEgressGateway: port: 80 # Sidecar → 80 Gateway → 80 Layanan (httpbin.org) httpsUpgrade: enabled: true # Jika nilai ini disetel ke false, nilai parameter port di bawah httpsUpgrade tidak berlaku. port: 443 # Sidecar → 80 Gateway → 443 Layanan (httpbin.org)Di kluster ACK, jalankan perintah berikut untuk membuat sumber daya ASMEgressTrafficPolicy:
kubectl apply -f egress-by-egressgateway.yaml
Verifikasi apakah konfigurasi ASMEgressTrafficPolicy berlaku.
Verifikasi layanan sleep-a di namespace mytest.
Jalankan perintah berikut untuk mengakses
http://www.httpbin.orgmelalui layanan sleep-a.kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://httpbin.orgOutput mengembalikan
200, menunjukkan akses berhasil kehttp://www.httpbin.orgmelalui layanan sleep-a.Jalankan perintah berikut untuk meminta API
anythingdarihttpbin.orguntuk memverifikasi apakah gateway egress meningkatkan Permintaan HTTP menjadi Permintaan HTTPS:kubectl -n mytest exec deployment/sleep-a -- sh -c "curl -s http://httpbin.org/anything |grep url"Output yang diharapkan:
"url": "https://httpbin.org/anything"Anda dapat melihat bahwa informasi bidang
urldimulai denganhttps, menunjukkan bahwa gateway egress berhasil meningkatkan permintaan menjadihttpsdan kemudian meneruskannya kehttpbin.org.Jalankan perintah berikut untuk mengakses
https://www.httpbin.orgmelalui layanan sleep-a di namespace mytest:kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" https://www.httpbin.orgOutput mengembalikan
200, menunjukkan akses berhasil kehttps://www.httpbin.orgmelalui layanan sleep-a.
Verifikasi layanan NGINX di namespace default.
Jalankan perintah berikut untuk mengakses
http://www.httpbin.orgmelalui layanan NGINX.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgOutput mengembalikan
502, menunjukkan bahwa akses kehttp://www.httpbin.orgmelalui layanan NGINX gagal.Jalankan perintah berikut untuk mengakses
https://www.httpbin.orgmelalui layanan NGINX:kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" https://www.httpbin.orgOutput menunjukkan bahwa koneksi permintaan ditolak, menunjukkan bahwa akses ke
https://www.httpbin.orgmelalui layanan NGINX gagal.Jalankan perintah berikut untuk melihat log akses proxy sidecar dalam workload layanan NGINX dan memperoleh alasan penolakan:
kubectl -n default logs -f deployment/nginx -c istio-proxy --tail=1Output yang diharapkan:
{"authority":"-","bytes_received":"0","bytes_sent":"0","downstream_local_address":"52.86.XX.XX:443","downstream_remote_address":"172.16.0.199:56748","duration":"0","istio_policy_status":"-","method":"-","path":"-","protocol":"-","request_id":"-","requested_server_name":"-","response_code":"0","response_flags":"UH","route_name":"-","start_time":"2023-04-11T02:00:07.409Z","trace_id":"-","upstream_cluster":"BlackHoleCluster","upstream_host":"-","upstream_local_address":"-","upstream_service_time":"-","upstream_transport_failure_reason":"-","user_agent":"-","x_forwarded_for":"-"}Output yang diharapkan menunjukkan bahwa permintaan diteruskan ke
BlackHoleCluster, sehingga menyebabkan koneksi ditolak.
Jalankan perintah berikut untuk menghapus egress-by-egressgateway, dan akses
http://www.httpbin.orglagi melalui layanan sleep-a di namespace mytest.kubectl -n istio-egress delete ASMEgressTrafficPolicy egress-by-egressgateway kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.org kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" https://www.httpbin.orgSaat mengakses
http://www.httpbin.org,502dikembalikan. Saat mengakseshttps://www.httpbin.org, koneksi permintaan ditolak. Setelah konfigurasi ASMEgressTrafficPolicy dihapus, akses kehttp://www.httpbin.orgdanhttps://www.httpbin.orgmelalui layanan sleep-a gagal.
Output menunjukkan bahwa kebijakan trafik egress berlaku.
Solusi 2: Gunakan HTTPS untuk komunikasi antara proxy sidecar dan gateway egress
Buat kebijakan trafik egress.
Konfigurasikan melalui antarmuka konsol
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
Klik nama gateway untuk masuk ke halaman Gateway overview dan klik Outbound Traffic Policy di sebelah kiri. Konfigurasikan parameter seperti yang ditunjukkan pada gambar berikut.

Konfigurasikan melalui kubectl
Perbarui file egress-by-egressgateway.yaml dengan konten berikut:
Bidang spec diperbarui untuk menyertakan bidang httpsUpgrade dan definisi untuk akses langsung ke
https://www.httpbin.org. Untuk informasi lebih lanjut tentang bidang-bidang, lihat Deskripsi CRD ASMEgressTrafficPolicy.apiVersion: istio.alibabacloud.com/v1 kind: ASMEgressTrafficPolicy metadata: name: egress-by-egressgateway # Format nilai ini adalah egress-by-{Nama gateway egress}. Nilai ini sesuai dengan nama gateway egress. namespace: istio-egress # Nilai ini tetap istio-egress. spec: byEgressGateway: name: egressgateway egressRules: - from: - namespace: mytest workloadSelector: app: sleep-a to: - name: httpbin-service-https hosts: - www.httpbin.org - httpbin.org port: name: https number: 443 protocol: HTTPS byEgressGateway: port: 444 # Port HTTPS 444 yang didefinisikan di langkah 3 Persiapan.Di kluster ACK, jalankan perintah berikut untuk membuat sumber daya ASMEgressTrafficPolicy:
kubectl apply -f egress-by-egressgateway.yaml
Verifikasi apakah konfigurasi ASMEgressTrafficPolicy berlaku.
Verifikasi layanan sleep-a di namespace mytest.
Jalankan perintah berikut untuk mengakses
http://www.httpbin.orgmelalui layanan sleep-a.kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://httpbin.orgOutput mengembalikan
200, menunjukkan akses berhasil kehttp://www.httpbin.orgmelalui layanan sleep-a.Jalankan perintah berikut untuk meminta API
anythingdarihttpbin.orguntuk memverifikasi apakah gateway egress meningkatkan Permintaan HTTP menjadi Permintaan HTTPS:kubectl -n mytest exec deployment/sleep-a -- sh -c "curl -s http://httpbin.org/anything |grep url"Output yang diharapkan:
"url": "https://httpbin.org/anything"Anda dapat melihat bahwa informasi bidang
urldimulai denganhttps, menunjukkan bahwa gateway egress berhasil meningkatkan permintaan menjadihttpsdan kemudian meneruskannya kehttpbin.org.Jalankan perintah berikut untuk mengakses
https://www.httpbin.orgmelalui layanan sleep-a di namespace mytest:kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" https://www.httpbin.orgOutput mengembalikan
200, menunjukkan akses berhasil kehttps://www.httpbin.orgmelalui layanan sleep-a.
Verifikasi layanan NGINX di namespace default.
Jalankan perintah berikut untuk mengakses
http://www.httpbin.orgmelalui layanan NGINX:kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgOutput mengembalikan
502, menunjukkan bahwa akses kehttp://www.httpbin.orgmelalui layanan NGINX gagal.Jalankan perintah berikut untuk mengakses
https://www.httpbin.orgmenggunakan layanan NGINX:kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" https://www.httpbin.orgOutput menunjukkan bahwa koneksi permintaan ditolak, yang berarti akses ke
https://www.httpbin.orgmelalui layanan NGINX gagal.Jalankan perintah berikut untuk melihat log akses proxy sidecar dalam workload layanan NGINX dan memperoleh alasan penolakan:
kubectl -n default logs -f deployment/nginx -c istio-proxy --tail=1Output yang diharapkan:
{"authority":"-","bytes_received":"0","bytes_sent":"0","downstream_local_address":"52.86.XX.XX:443","downstream_remote_address":"172.16.0.199:56748","duration":"0","istio_policy_status":"-","method":"-","path":"-","protocol":"-","request_id":"-","requested_server_name":"-","response_code":"0","response_flags":"UH","route_name":"-","start_time":"2023-04-11T02:00:07.409Z","trace_id":"-","upstream_cluster":"BlackHoleCluster","upstream_host":"-","upstream_local_address":"-","upstream_service_time":"-","upstream_transport_failure_reason":"-","user_agent":"-","x_forwarded_for":"-"}Output yang diharapkan menunjukkan bahwa permintaan diteruskan ke
BlackHoleCluster, sehingga menyebabkan koneksi ditolak.
Jalankan perintah berikut untuk menghapus egress-by-egressgateway, lalu akses
<span data-tag="ph" id="9c666e92d8e4i"><code code-type="xCode" data-tag="code">http://www.httpbin.orgdan<span data-tag="ph" id="9c666e93d8r7p"><code code-type="xCode" data-tag="code">https://www.httpbin.orglagi melalui layanan sleep-a di namespace mytest:kubectl -n istio-egress delete ASMEgressTrafficPolicy egress-by-egressgateway kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.org kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" https://www.httpbin.orgSaat mengakses
http://www.httpbin.org,502dikembalikan. Saat mengakseshttps://www.httpbin.org, koneksi permintaan ditolak. Setelah konfigurasi ASMEgressTrafficPolicy dihapus, akses kehttp://www.httpbin.orgdanhttps://www.httpbin.orgmelalui layanan sleep-a gagal.
Output menunjukkan bahwa kebijakan trafik egress berlaku.
Gunakan layanan sleep-a untuk mengakses layanan eksternal melalui TCP
Buat kebijakan trafik egress.
Konfigurasikan melalui konsol
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
Klik nama gateway untuk masuk ke halaman Gateway overview dan klik Outbound Traffic Policy di sebelah kiri. Konfigurasikan parameter seperti yang ditunjukkan pada gambar berikut.

Konfigurasikan melalui kubectl
Buat file egress-by-egressgateway.yaml dengan konten berikut:
apiVersion: istio.alibabacloud.com/v1 kind: ASMEgressTrafficPolicy metadata: name: egress-by-egressgateway namespace: istio-egress spec: byEgressGateway: name: egressgateway egressRules: - from: - namespace: mytest workloadSelector: app: sleep-a to: - byEgressGateway: {} hosts: - www.alibabacloud.com name: aliyun-service-tcp port: name: tcp number: 443 protocol: TCPDi kluster ACK, jalankan perintah berikut untuk membuat sumber daya ASMEgressTrafficPolicy:
kubectl apply -f egress-by-egressgateway.yaml
Verifikasi apakah konfigurasi ASMEgressTrafficPolicy berlaku.
Verifikasi layanan sleep-a di namespace mytest.
Jalankan perintah berikut untuk mengakses
www.alibabacloud.commelalui layanan sleep-a.kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.alibabacloud.comOutput mengembalikan
502, menunjukkan bahwa akses kehttp://www.alibabacloud.commelalui layanan sleep-a gagal.Jalankan perintah berikut untuk mengakses
https://www.alibabacloud.commelalui layanan sleep-a di namespace mytest.kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" https://www.alibabacloud.comOutput mengembalikan
200, menunjukkan akses berhasil kehttps://www.alibabacloud.commelalui layanan sleep-a.
Verifikasi layanan NGINX di namespace default.
Jalankan perintah berikut untuk mengakses
http://www.alibabacloud.commelalui layanan NGINX:kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" http://www.alibabacloud.comOutput mengembalikan
502, menunjukkan bahwa akses kehttp://www.alibabacloud.commelalui layanan NGINX gagal.Jalankan perintah berikut untuk mengakses
https://www.alibabacloud.commelalui layanan NGINX:kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" https://www.alibabacloud.comOutput menunjukkan bahwa koneksi permintaan ditolak, menunjukkan bahwa akses ke
https://www.alibabacloud.commelalui layanan NGINX gagal.Jalankan perintah berikut untuk melihat log akses proxy sidecar dalam workload layanan NGINX dan memperoleh alasan penolakan:
kubectl -n default logs -f deployment/nginx -c istio-proxy --tail=1Output yang diharapkan:
{"authority":"-","bytes_received":"0","bytes_sent":"0","downstream_local_address":"52.86.XX.XX:443","downstream_remote_address":"172.16.0.199:56748","duration":"0","istio_policy_status":"-","method":"-","path":"-","protocol":"-","request_id":"-","requested_server_name":"-","response_code":"0","response_flags":"UH","route_name":"-","start_time":"2023-04-11T02:00:07.409Z","trace_id":"-","upstream_cluster":"BlackHoleCluster","upstream_host":"-","upstream_local_address":"-","upstream_service_time":"-","upstream_transport_failure_reason":"-","user_agent":"-","x_forwarded_for":"-"}Output yang diharapkan menunjukkan bahwa permintaan diteruskan ke
BlackHoleCluster, sehingga menyebabkan koneksi ditolak.
Jalankan perintah berikut untuk menghapus egress-by-egressgateway, lalu akses
http://www.alibabacloud.comdanhttps://www.alibabacloud.comlagi melalui layanan sleep-a di namespace mytest:kubectl -n istio-egress delete ASMEgressTrafficPolicy egress-by-egressgateway kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.alibabacloud.com kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" https://www.alibabacloud.comSaat mengakses
http://www.alibabacloud.com,502dikembalikan. Saat mengakseshttps://www.alibabacloud.com, koneksi permintaan ditolak. Setelah konfigurasi ASMEgressTrafficPolicy dihapus, akses kehttp://www.alibabacloud.comdanhttps://www.alibabacloud.commelalui layanan sleep-a gagal.Output menunjukkan bahwa kebijakan trafik egress berlaku.
Operasi terkait
Tolak permintaan POST dari namespace tertentu
Dengan menggunakan gateway egress dan kebijakan trafik egress, Anda dapat secara fleksibel mengontrol trafik keluar di kluster. Dalam kombinasi dengan kebijakan otorisasi, Anda dapat menerapkan kontrol akses yang lebih rinci. Sebagai contoh, Anda dapat menggunakan kebijakan berikut untuk menolak permintaan POST dari namespace mytest:
kind: AuthorizationPolicy
apiVersion: security.istio.io/v1beta1
metadata:
name: sleep-a-egress-www-httpbin-org
namespace: istio-system
spec:
action: DENY
rules:
- to:
- operation:
hosts:
- www.httpbin.org
- httpbin.org
methods:
- POST
from:
- source:
namespaces: ["mytest"]
selector:
matchLabels:
istio: egressgateway-aSetelah menerapkan konfigurasi di atas, saat mengakses www.httpbin.org melalui layanan sleep-a menggunakan permintaan POST, RBAC: access dikembalikan. Permintaan GET ke www.httpbin.org tidak akan terpengaruh.