Saat aplikasi dalam mesh Anda perlu berkomunikasi dengan layanan eksternal, Anda dapat menggunakan egress gateway sebagai titik keluar terpusat untuk mengelola seluruh outbound traffic. Konfigurasi egress gateway memungkinkan penerapan kontrol keamanan dan kebijakan routing, sehingga meningkatkan keamanan dan observabilitas aplikasi Anda.
Sebelum membaca artikel ini, pastikan Anda telah memahami konten dalam Gunakan ASMEgressTrafficPolicy untuk mengelola egress traffic. Artikel ini menggunakan resource Service Mesh untuk secara transparan mengintersepsi permintaan ke layanan di luar kluster dan mengarahkannya ke egress gateway. Egress gateway kemudian menerapkan kebijakan keamanan dan meneruskan permintaan tersebut ke layanan eksternal. Konfigurasi ini relatif kompleks. Jika konten dalam Gunakan ASMEgressTrafficPolicy untuk mengelola egress traffic tidak memenuhi kebutuhan Anda, rujuk artikel ini.
Prasyarat
Proses konfigurasi

Langkah 1: Deploy aplikasi contoh
-
Deploy aplikasi sleep.
-
Buat file bernama sleep.yaml dengan konten berikut.
-
Menggunakan KubeConfig untuk kluster ACK Anda, jalankan perintah berikut untuk mendeploy aplikasi sleep.
Untuk informasi lebih lanjut tentang cara menggunakan kubectl untuk mengelola kluster, lihat Dapatkan KubeConfig kluster dan gunakan kubectl untuk terhubung ke kluster.
kubectl apply -f sleep.yaml
-
-
Jalankan perintah berikut untuk membuka shell di Pod sleep dan mengakses layanan eksternal.
Anda dapat menjalankan perintah
kubectl get pod -n defaultuntuk melihat nama Pod sleep.kubectl exec -it ${sleep-pod-name} -- /bin/sh curl aliyun.com -IContoh output:
HTTP/1.1 301 Moved Permanently server: envoy date: Thu, 14 Dec 2023 03:05:41 GMT content-type: text/html content-length: 239 location: https://aliyun.com/ eagleeye-traceid: 0b57ff8717025231418255220e**** timing-allow-origin: * x-envoy-upstream-service-time: 69Tanggapan
301menunjukkan bahwa aplikasi dalam mesh dapat mengakses layanan eksternal. Secara default, Pod menggunakan HTTP untuk akses dan situs web mengembalikan redirect.CatatanPendekatan ini tidak memberikan kontrol keamanan dan mencegah penggunaan fitur observabilitas mesh. Kami merekomendasikan agar Anda mengaktifkan
REGISTRY_ONLYuntuk membatasi akses hanya ke layanan yang terdaftar dan menggunakan egress gateway sebagai titik keluar terpadu untuk traffic, seperti yang dijelaskan dalam langkah-langkah berikut.
(Opsional) Langkah 2: Aktifkan REGISTRY_ONLY
Kebijakan outbound traffic default untuk ASM adalah ALLOW_ANY. Kami merekomendasikan mengubahnya menjadi REGISTRY_ONLY. Dalam mode ini, proxy sidecar memblokir akses ke host eksternal mana pun yang tidak memiliki ServiceEntry yang sesuai dalam mesh. Konfigurasi ini meningkatkan keamanan aplikasi.
-
Jika Anda mengaktifkan
REGISTRY_ONLYtetapi belum membuat ServiceEntry untuk layanan eksternal, akses ke layanan tersebut akan ditolak. -
Jika Anda tidak mengaktifkan
REGISTRY_ONLYdan belum membuat ServiceEntry, Anda tetap dapat mengakses layanan eksternal, tetapi konfigurasi egress gateway Anda tidak akan berlaku.
-
Login ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Configure the agent parameters of the injected Sidecar, klik tab global, klik Outbound Traffic Policy, atur Outbound Traffic Policy menjadi REGISTRY_ONLY, lalu klik Update Settings.
-
Jalankan perintah berikut untuk membuka shell di Pod sleep dan mengakses layanan eksternal.
kubectl exec -it ${sleep-pod-name} -- /bin/sh curl aliyun.com -IContoh output:
HTTP/1.1 502 Bad Gateway date: Thu, 14 Dec 2023 03:08:46 GMT server: envoy transfer-encoding: chunkedTanggapan
502menunjukkan bahwa aplikasi dalam mesh tidak dapat mengakses layanan eksternal yang tidak terdaftar.
Langkah 3: Buat ServiceEntry untuk layanan eksternal
Untuk mengakses layanan di luar kluster melalui egress gateway, Anda harus membuat ServiceEntry untuk layanan eksternal tersebut.
-
Login ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih . Pada halaman yang muncul, klik Create from YAML.
-
Pada halaman Create, pilih Namespaces tempat aplikasi sleep berada, pilih Access mesh external services untuk Scenario Template, konfigurasi YAML seperti pada contoh berikut, lalu klik Create.
apiVersion: networking.istio.io/v1beta1 kind: ServiceEntry metadata: name: external-svc-http spec: hosts: - aliyun.com location: MESH_EXTERNAL ports: - number: 80 name: http protocol: HTTP resolution: DNS -
Jalankan perintah berikut untuk membuka shell di Pod sleep dan mengakses layanan eksternal.
kubectl exec -it ${sleep-pod-name} -- /bin/sh curl aliyun.com -ITanggapan
301menunjukkan bahwa aplikasi kini dapat mengakses layanan eksternal. Karena Anda telah mendaftarkan aliyun.com dengan ServiceEntry dalam mesh, akses diperbolehkan. Pada tahap ini, outbound traffic masih mengalir langsung dari Pod, bukan melalui egress gateway.
Langkah 4: Arahkan traffic melalui egress gateway
Karena Anda telah membuat ServiceEntry untuk aliyun.com, Anda dapat menggunakan resource seperti VirtualService dan Gateway untuk mengelola traffic ke aliyun.com.
-
Buat egress gateway yang mendengarkan traffic HTTP pada Port 80. Untuk informasi lebih lanjut, lihat Buat egress gateway.
-
Buat resource Gateway sebagai berikut. Untuk informasi lebih lanjut, lihat Kelola Istio gateway.
Pada halaman pembuatan Gateway, atur Namespace menjadi
defaultdan Name menjadiegress-gw. Di area Gateway instance, atur Label key menjadiistiodan Label value menjadiegressgateway. Di area Exposed services, atur Name layanan menjadihttp, Port menjadi80, Protocol menjadi HTTP, dan Service Domain menjadialiyun.com. Lalu, klik Create. -
Gunakan YAML berikut untuk membuat VirtualService. Untuk informasi lebih lanjut, lihat Kelola VirtualServices.
-
Uji akses ke layanan eksternal.
-
Jalankan perintah berikut untuk membuka shell di Pod sleep dan mengakses layanan eksternal.
kubectl exec -it ${sleep-pod-name} -- /bin/sh curl aliyun.com -ITanggapan
301menunjukkan bahwa aplikasi masih dapat mengakses layanan eksternal. Aplikasi kini mengarahkan traffic melalui egress gateway, bukan mengakses layanan langsung dari Pod. -
Jalankan perintah berikut untuk memeriksa log akses di Pod gateway.
Catatan-
Jika egress gateway Anda memiliki beberapa replika, log akses mungkin muncul di salah satu Pod tersebut. Anda mungkin perlu memeriksa setiap Pod gateway untuk menemukan entri tersebut.
-
Jika Anda telah mengaktifkan logging akses untuk egress gateway, Anda juga dapat melihat catatan akses di Konsol Simple Log Service.
kubectl -n istio-system logs ${egress-gateway-pod-name} -c istio-proxy | grep aliyun.com | tail -n 1Contoh output:
{"trace_id":null,"upstream_host":"106.11.XXX.XX:80","downstream_remote_address":"10.34.0.140:47942","requested_server_name":null,"response_code":301,"upstream_service_time":"24","user_agent":"curl/7.86.0-DEV","path":"/","route_name":null,"bytes_sent":0,"response_flags":"-","upstream_local_address":"10.34.0.141:60388","duration":24,"upstream_cluster":"outbound|80||aliyun.com","upstream_transport_failure_reason":null,"authority":"aliyun.com","request_id":"55789d59-9b81-4e39-b64a-66baf44e****","protocol":"HTTP/1.1","bytes_received":0,"method":"HEAD","downstream_local_address":"10.34.0.141:80","start_time":"2022-11-30T08:03:01.315Z","istio_policy_status":null,"x_forwarded_for":"10.34.0.140"}Bidang
downstream_remote_addressmenunjukkan alamat IP Pod sleep.Setelah menyelesaikan langkah-langkah ini, seluruh outbound traffic ke layanan eksternal diarahkan melalui egress gateway.
-
-
Dokumen terkait
-
Anda dapat menggunakan kemampuan observabilitas dan keamanan ASM pada egress gateway untuk mengelola egress traffic secara lebih efisien. Untuk informasi lebih lanjut, lihat Kemampuan observabilitas dan Dukungan keamanan dan pemuatan sertifikat dinamis.
-
Anda dapat menggunakan CRD ASMEgressTrafficPolicy untuk menyesuaikan cara mengelola dan mengakses traffic eksternal melalui egress gateway. Untuk informasi lebih lanjut, lihat Gunakan ASMEgressTrafficPolicy untuk mengelola egress traffic.
-
Untuk informasi lebih lanjut tentang fitur gateway, lihat Ikhtisar gateway ASM.