Mulai versi 1.16.4, Alibaba Cloud Service Mesh mendukung CustomResourceDefinition (CRD) ASMEgressTrafficPolicy. Artikel ini menjelaskan cara menggunakan CRD tersebut untuk mengelola lalu lintas keluar.
Latar Belakang
Cara Kerja
Service mesh mendukung pengelolaan lalu lintas keluar dengan membuat dan menghubungkan berbagai resource seperti ServiceEntry, VirtualService, Gateway, dan Destination. Setelah resource tersebut dikonfigurasi, lalu lintas secara transparan diintersepsi dan diarahkan ke egress gateway, yang kemudian meneruskan lalu lintas tersebut ke layanan eksternal.
Proses konfigurasi ini kompleks, rentan kesalahan, dan memerlukan pemahaman mendalam tentang berbagai bidang. Untuk menyederhanakan konfigurasi lalu lintas keluar, ASM memperkenalkan resource ASMEgressTrafficPolicy.
Resource ASMEgressTrafficPolicy mengabstraksi dan menyederhanakan konfigurasi lalu lintas keluar. Alih-alih membuat dan mengelola resource seperti ServiceEntry, VirtualService, Gateway, dan Destination secara manual, Anda hanya perlu menentukan beberapa pengaturan penting. Service mesh kemudian secara transparan mengintersepsi lalu lintas, mengarahkannya ke egress gateway, dan meneruskannya ke layanan eksternal melalui HTTP atau HTTPS.
Karena ASMEgressTrafficPolicy merupakan abstraksi yang disederhanakan dari resource native service mesh, fitur ini mungkin tidak mendukung kasus penggunaan lanjutan, seperti routing lalu lintas berbasis persentase atau inisiasi mTLS dari egress gateway. Jika Anda memerlukan fitur lanjutan atau konfigurasi kustom, lihat Konfigurasi gerbang keluar terpadu untuk lalu lintas dalam mesh.
Fitur
ASM menyediakan cara terpadu untuk menghubungkan, mengelola, dan mengamankan komunikasi antar aplikasi. Berbeda dengan metode berbasis IP jaringan, ASM menggunakan pendekatan berbasis aplikasi yang tidak memerlukan perubahan pada kode aplikasi yang ada. Resource ASMEgressTrafficPolicy mendefinisikan cara mengelola lalu lintas keluar melalui egress gateway. Dengan menggabungkan egress gateway ASM dan AuthorizationPolicy, Anda dapat mengontrol lalu lintas keluar secara lebih fleksibel.
Contoh ini mencakup aliran lalu lintas berikut:
1. Komunikasi antara proxy mesh dan antara proxy dengan gateway: Secara default, ASM mengamankan komunikasi ini dengan mTLS dan mengelola sertifikatnya.
2. Komunikasi antara aplikasi dengan proxy mesh-nya, serta antara gateway dengan layanan eksternal:
a. Untuk menggunakan fitur L7 lanjutan dari service mesh, aplikasi sebaiknya berkomunikasi dengan proxy mesh-nya menggunakan plaintext bila memungkinkan. Hal ini memungkinkan proxy mesh mengakses informasi lalu lintas L7 dan mendukung fitur yang lebih canggih. Jika aplikasi harus langsung menginisiasi lalu lintas HTTPS, service mesh hanya dapat menyediakan kemampuan L4.
b. Anda dapat mengonfigurasi protokol komunikasi antara egress gateway dan layanan eksternal. Plaintext maupun HTTPS didukung.
Prasyarat
-
Anda harus memiliki instans ASM komersial (Edisi Perusahaan atau Edisi Ultimate) yang menjalankan versi 1.16.4 atau lebih baru. Untuk informasi selengkapnya, lihat Buat instans ASM dan Perbarui instans ASM.
-
Injeksi otomatis diaktifkan untuk namespace default. Untuk informasi selengkapnya, lihat Aktifkan injeksi otomatis.
Prasyarat
Tetapkan kebijakan lalu lintas keluar
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Pada tab global, klik Outbound Traffic Policy. Lalu, di sebelah kanan Outbound Traffic Policy, klik REGISTRY_ONLY, kemudian klik Update Settings.
Buat namespace
-
Buat namespace istio-egress. Untuk informasi selengkapnya, lihat Kelola namespace global.
-
Pada halaman Global Namespace, klik Sync Automatic Sidecar Injection to Kubernetes Cluster untuk menyinkronkan namespace dengan kluster ACK yang dikelola oleh instance ASM.
Buat egress gateway
Di ASM, buat egress gateway bernama egressgateway-a. Pada bagian Port Mapping, konfigurasikan HTTP pada port 80 serta HTTPS pada port 443 dan 444. Kemudian, aktifkan opsi Support two-way TLS authentication. Untuk informasi selengkapnya, lihat Buat layanan egress gateway.
Pastikan file YAML yang dihasilkan mencakup konten berikut di bidang spec:
spec:
podLabels:
security.istio.io/tlsMode: istio
Buat aplikasi contoh
-
Di instans ASM, buat namespace bernama mytest dan aktifkan injeksi sidecar otomatis. Untuk informasi selengkapnya, lihat Kelola namespace global.
-
Di kluster ACK, deploy layanan sleep-a di namespace mytest dan layanan nginx di namespace default.
-
Buat file bernama test.yaml dengan konten berikut:
-
Di kluster ACK, jalankan perintah berikut untuk deploy layanan sleep-a dan nginx:
kubectl apply -f test.yaml
-
-
Jalankan perintah berikut untuk mengakses
http://www.httpbin.orgdari 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 kedua perintah adalah
502, yang menunjukkan bahwa akses gagal.
Izinkan sleep-a mengakses layanan HTTP eksternal
Opsi 1: HTTP plaintext antara sidecar dan egress gateway
Opsi ini tidak praktis di lingkungan produksi. Komunikasi plaintext antara kontainer aplikasi dan egress gateway mencegah otorisasi berbasis identitas klien. ASMEgressTrafficPolicy tidak mendukung akses ke egress gateway melalui HTTP plaintext.
-
Pengelolaan lalu lintas terutama diterapkan di sidecar klien dan tidak memerlukan egress gateway.
-
Kemampuan observabilitas tidak bergantung pada egress gateway.
-
Fitur keamanan bergantung pada egress gateway. Namun, tanpa mTLS, semua kemampuan otorisasi berbasis identitas klien dinonaktifkan. Egress gateway hanya dapat menolak semua permintaan.
Opsi 2: mTLS antara sidecar dan egress gateway (direkomendasikan)
-
Buat ASMEgressTrafficPolicy.
Konsol
-
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih .
-
Klik nama gateway untuk membuka halaman gateway overview. Di panel navigasi sebelah kiri, klik Outbound Traffic Policy.
Konfigurasikan aturan kebijakan lalu lintas keluar. Tetapkan Egress Gateway ke
egressgateway. Di area In-cluster Service, tetapkan Namespace kemytest, Workload Label Name keapp, dan Label Value kesleep-a. Di area External Service, tetapkan External Service Name kehttpbin-service-http, tambahkanwww.httpbin.orgdanhttpbin.orgke Domain List. Untuk Service Port, tetapkan Port ke80, Nama Port kehttp, dan Protokol ke HTTP. Di area How to Access, pilih port egress gateway80, dan untuk Upgrade to HTTPS, pilih No.
kubectl
-
Buat file bernama egress-by-egressgateway.yaml dengan konten berikut.
Untuk deskripsi bidang, lihat Referensi CRD ASMEgressTrafficPolicy.
apiVersion: istio.alibabacloud.com/v1 kind: ASMEgressTrafficPolicy metadata: name: egress-by-egressgateway # Konvensi: egress-by-{nama-egress-gateway}. namespace: istio-egress # Konvensi: Tetap di namespace istio-egress. spec: byEgressGateway: name: egressgateway egressRules: - from: - namespace: mytest workloadSelector: app: sleep-a to: - name: httpbin-service-http hosts: - www.httpbin.org # Semua host harus mengarah ke alamat IP yang sama. - httpbin.org # Semua host harus mengarah ke alamat IP yang sama. port: name: http number: 80 protocol: HTTP byEgressGateway: port: 80 # Jalur lalu lintas: sidecar -> Gateway (port 80) -> Layanan (httpbin.org, port 80) -
Di kluster ACK Anda, jalankan perintah berikut untuk membuat resource ASMEgressTrafficPolicy.
kubectl apply -f egress-by-egressgateway.yaml
-
-
Verifikasi bahwa ASMEgressTrafficPolicy berlaku.
-
Jalankan perintah berikut untuk menguji akses dari layanan nginx di namespace default ke
http://www.httpbin.org.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgPerintah mengembalikan
502, yang menunjukkan bahwa akses dari layanan nginx kehttp://www.httpbin.orgdiblokir sebagaimana diharapkan. -
Jalankan perintah berikut untuk menguji akses dari layanan sleep-a di namespace mytest ke
http://www.httpbin.org.kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgPerintah mengembalikan
200, yang menunjukkan bahwa akses diizinkan sebagaimana diharapkan. -
Jalankan perintah berikut untuk menghapus kebijakan egress-by-egressgateway, lalu uji kembali akses dari layanan sleep-a di namespace mytest ke
http://www.httpbin.org.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.orgPerintah mengembalikan
502, yang menunjukkan bahwa setelah ASMEgressTrafficPolicy dihapus, layanan sleep-a tidak dapat mengakseshttp://www.httpbin.org.
Hasil ini mengonfirmasi bahwa ASMEgressTrafficPolicy bekerja dengan benar.
-
Akses layanan HTTPS eksternal dari sleep-a
Opsi 1: mTLS antara sidecar dan egress gateway (direkomendasikan)
-
Buat ASMEgressTrafficPolicy.
Konsol
-
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih .
-
Klik nama gateway untuk membuka halaman gateway overview. Di panel navigasi sebelah kiri, klik Outbound Traffic Policy.
Konfigurasikan aturan lalu lintas keluar. Di bagian in-cluster service, tetapkan Namespace ke mytest, Label Name ke
app, dan Label Value kesleep-a. Di bagian external service, tetapkan External Service Name kehttpbin-service-http, tambahkanwww.httpbin.orgdanhttpbin.orgke Domain List, dan konfigurasikan Service Port dengan Port: 80, Port Name: http, dan Protocol: HTTP. Di bagian How to Access, tetapkan Egress Gateway Port ke 80, Upgrade to HTTPS ke Yes, dan HTTPS Port ke 443.
Kubectl
-
Perbarui file egress-by-egressgateway.yaml dengan konten berikut.
Bidang httpsUpgrade dan definisi terkait untuk mengakses
https://www.httpbin.orgditambahkan ke bidang spec. Untuk deskripsi bidang, lihat referensi CRD ASMEgressTrafficPolicy.apiVersion: istio.alibabacloud.com/v1 kind: ASMEgressTrafficPolicy metadata: name: egress-by-egressgateway # Konvensi: egress-by-{nama-egress-gateway}. namespace: istio-egress # Konvensi: Tetap di namespace 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 tempat beberapa nama domain tersebut mengarah harus sama. - httpbin.org # Alamat IP tempat beberapa nama domain tersebut mengarah harus sama. port: name: http number: 80 protocol: HTTP byEgressGateway: port: 80 # Sidecar -> Port 80 Gateway -> Port 80 Layanan (httpbin.org) httpsUpgrade: enabled: true # Jika enabled diatur ke false, pengaturan port untuk httpsUpgrade tidak berpengaruh. port: 443 # Sidecar -> Port 80 Gateway -> Port 443 Layanan (httpbin.org) -
Di kluster ACK, jalankan perintah berikut untuk membuat resource ASMEgressTrafficPolicy:
kubectl apply -f egress-by-egressgateway.yaml
-
-
Verifikasi konfigurasi ASMEgressTrafficPolicy.
-
Verifikasi layanan sleep-a di namespace mytest.
-
Jalankan perintah berikut untuk mengakses
http://www.httpbin.orgdari layanan sleep-a.kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://httpbin.orgKode status
200menunjukkan bahwa layanan sleep-a dapat mengakseshttp://www.httpbin.org. -
Jalankan perintah berikut untuk meminta endpoint
anythingdarihttpbin.orgdan verifikasi bahwa egress gateway 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"Nilai bidang
urldiawali denganhttps, yang mengonfirmasi bahwa egress gateway meningkatkan permintaan menjadihttpssebelum meneruskannya kehttpbin.org. -
Jalankan perintah berikut untuk mengakses
https://www.httpbin.orgdari 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.orgKode status
200menunjukkan bahwa layanan sleep-a dapat mengakseshttps://www.httpbin.org.
-
-
Verifikasi layanan Nginx di namespace default.
-
Jalankan perintah berikut untuk mengakses
http://www.httpbin.orgdari layanan Nginx.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgKode status
502menunjukkan bahwa layanan Nginx gagal mengakseshttp://www.httpbin.org. -
Jalankan perintah berikut untuk mengakses
https://www.httpbin.orgdari layanan Nginx.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" https://www.httpbin.orgTerjadi error connection refused, yang menunjukkan bahwa layanan Nginx gagal mengakses
https://www.httpbin.org. -
Jalankan perintah berikut untuk melihat log akses sidecar untuk workload Nginx guna mengidentifikasi penyebab koneksi ditolak.
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 menunjukkan bahwa permintaan diteruskan ke
BlackHoleCluster, yang menolak koneksi.
-
-
Jalankan perintah berikut untuk menghapus egress-by-egressgateway, lalu akses kembali
http://www.httpbin.orgdanhttps://www.httpbin.orgdari 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.orgPermintaan ke
http://www.httpbin.orgmengembalikan502, dan permintaan kehttps://www.httpbin.orgditolak. Setelah konfigurasi ASMEgressTrafficPolicy dihapus, layanan sleep-a tidak dapat lagi mengakseshttp://www.httpbin.orgatauhttps://www.httpbin.org.
Hasil ini mengonfirmasi bahwa ASMEgressTrafficPolicy bekerja sebagaimana diharapkan.
-
Opsi 2: HTTPS antara sidecar dan egress gateway
-
Buat ASMEgressTrafficPolicy.
Konsol
-
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih .
-
Klik nama gateway untuk membuka halaman gateway overview. Di panel navigasi sebelah kiri, klik Outbound Traffic Policy.
Pada halaman aturan lalu lintas keluar, klik Add Rule dan konfigurasikan parameter aturan. Tetapkan Namespace ke
mytest. Untuk Workload Labels, tetapkan nama label keappdan nilai label kesleep-a. Tetapkan External Service Name kehttpbin-service-https. Tambahkanwww.httpbin.orgdanhttpbin.orgke Domain List. Untuk Service Port, tetapkan port ke443, nama port kehttps, dan Protocol ke HTTPS. Untuk How to Access, pilih Via egress gateway port dan tetapkan port ke444.
Kubectl
-
Perbarui file egress-by-egressgateway.yaml dengan konten berikut.
Bidang httpsUpgrade dan definisi untuk mengakses langsung
https://www.httpbin.orgditambahkan ke bidang spec. Untuk deskripsi bidang, lihat CRD ASMEgressTrafficPolicy.apiVersion: istio.alibabacloud.com/v1 kind: ASMEgressTrafficPolicy metadata: name: egress-by-egressgateway # Konvensi: egress-by-{nama-egress-gateway}. namespace: istio-egress # Konvensi: Tetap di namespace 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 untuk egress gateway di prasyarat. -
Di kluster ACK, jalankan perintah berikut untuk membuat resource ASMEgressTrafficPolicy:
kubectl apply -f egress-by-egressgateway.yaml
-
-
Verifikasi konfigurasi ASMEgressTrafficPolicy.
-
Verifikasi layanan sleep-a di namespace mytest.
-
Jalankan perintah berikut untuk mengakses
http://www.httpbin.orgdari layanan sleep-a.kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://httpbin.orgKode status
502menunjukkan bahwa layanan sleep-a gagal mengakseshttp://www.httpbin.org. -
Jalankan perintah berikut untuk mengakses
https://www.httpbin.orgdari 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.orgKode status
200menunjukkan bahwa layanan sleep-a dapat mengakseshttps://www.httpbin.org.
-
-
Verifikasi layanan Nginx di namespace default.
-
Jalankan perintah berikut untuk mengakses
http://www.httpbin.orgdari layanan Nginx.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgKode status
502menunjukkan bahwa layanan Nginx gagal mengakseshttp://www.httpbin.org. -
Jalankan perintah berikut untuk mengakses
https://www.httpbin.orgdari layanan Nginx.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" https://www.httpbin.orgTerjadi error connection refused, yang menunjukkan bahwa layanan Nginx gagal mengakses
https://www.httpbin.org. -
Jalankan perintah berikut untuk melihat log akses sidecar untuk workload Nginx guna mengidentifikasi penyebab koneksi ditolak.
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 menunjukkan bahwa permintaan diteruskan ke
BlackHoleCluster, yang menolak koneksi.
-
-
Jalankan perintah berikut untuk menghapus egress-by-egressgateway, lalu akses kembali
http://www.httpbin.orgdanhttps://www.httpbin.orgdari 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.orgPermintaan ke
http://www.httpbin.orgmengembalikan502, dan permintaan kehttps://www.httpbin.orgditolak. Setelah konfigurasi ASMEgressTrafficPolicy dihapus, layanan sleep-a tidak dapat lagi mengakseshttp://www.httpbin.orgatauhttps://www.httpbin.org.Hasil ini mengonfirmasi bahwa ASMEgressTrafficPolicy bekerja sebagaimana diharapkan.
-
Akses layanan TCP eksternal dari layanan sleep-a
-
Buat ASMEgressTrafficPolicy.
Konsol
-
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih .
-
Klik nama gateway. Pada halaman Gateway overview, klik Outbound Traffic Policy di panel navigasi sebelah kiri. Konfigurasikan kebijakan seperti yang ditunjukkan pada gambar berikut.

kubectl
-
Buat file bernama 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: TCP -
Di kluster ACK, jalankan perintah berikut untuk membuat resource ASMEgressTrafficPolicy.
kubectl apply -f egress-by-egressgateway.yaml
-
-
Verifikasi bahwa konfigurasi ASMEgressTrafficPolicy diterapkan.
-
Verifikasi layanan sleep-a di namespace mytest.
-
Jalankan perintah berikut untuk mengakses
www.alibabacloud.comdari layanan sleep-a.kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.alibabacloud.comOutput adalah
502, yang menunjukkan bahwa layanan sleep-a gagal mengakseshttp://www.alibabacloud.com. -
Jalankan perintah berikut untuk mengakses
https://www.alibabacloud.comdari 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 adalah
200, yang menunjukkan bahwa layanan sleep-a berhasil mengakseshttps://www.alibabacloud.com.
-
-
Verifikasi layanan Nginx di namespace default.
-
Jalankan perintah berikut untuk mengakses
http://www.alibabacloud.comdari layanan Nginx.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" http://www.alibabacloud.comOutput adalah
502, yang menunjukkan bahwa layanan Nginx gagal mengakseshttp://www.alibabacloud.com. -
Jalankan perintah berikut untuk mengakses
https://www.alibabacloud.comdari layanan Nginx.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" https://www.alibabacloud.comOutput menunjukkan bahwa koneksi ditolak, yang menunjukkan bahwa layanan Nginx gagal mengakses
https://www.alibabacloud.com. -
Jalankan perintah berikut untuk memeriksa log akses sidecar untuk workload Nginx guna memahami penyebab koneksi ditolak.
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 menunjukkan bahwa permintaan diarahkan ke
BlackHoleCluster, sehingga koneksi ditolak.
-
-
Jalankan perintah berikut untuk menghapus egress-by-egressgateway, lalu coba akses kembali
http://www.alibabacloud.comdanhttps://www.alibabacloud.comdari 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.comPermintaan ke
http://www.alibabacloud.commengembalikan error502, dan permintaan kehttps://www.alibabacloud.comditolak. Hal ini menunjukkan bahwa penghapusan konfigurasi ASMEgressTrafficPolicy mencegah layanan sleep-a mengakseshttp://www.alibabacloud.comatauhttps://www.alibabacloud.com.Hasil ini mengonfirmasi bahwa konfigurasi ASMEgressTrafficPolicy bekerja sebagaimana diharapkan.
-
Operasi Terkait
Tolak permintaan POST dari namespace tertentu
Gunakan egress gateway ASM dengan ASMEgressTrafficPolicy untuk mengontrol lalu lintas keluar dari kluster Anda. Untuk kontrol akses yang lebih granular, terapkan AuthorizationPolicy. Sebagai contoh, konfigurasi berikut 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-a
Setelah menerapkan konfigurasi ini, permintaan POST dari layanan sleep-a ke www.httpbin.org mengembalikan RBAC: access. Permintaan GET dari layanan sleep-a ke www.httpbin.org tidak terpengaruh.