Ketika aplikasi dalam instance ASM perlu berkomunikasi dengan layanan eksternal, Anda dapat menggunakan egress gateway untuk mengelola secara terpusat semua trafik keluar. Setelah mengonfigurasi egress gateway, Anda dapat menerapkan kontrol keamanan dan pengarahan trafik guna meningkatkan keamanan serta observabilitas aplikasi dalam instance ASM.
Sebelum membaca topik ini, pastikan Anda memahami konten dalam Gunakan ASMEgressTrafficPolicy untuk Mengelola Trafik Keluar. Topik ini menggunakan sumber daya ASM untuk mengalihkan permintaan secara transparan guna mengakses layanan eksternal melalui egress gateway, di mana kebijakan keamanan diterapkan sebelum dikirimkan ke layanan eksternal. Konfigurasi ini relatif kompleks. Jika konten dalam Gunakan ASMEgressTrafficPolicy untuk Mengelola Trafik Keluar tidak memenuhi kebutuhan Anda, lihat topik ini.
Prasyarat
Proses konfigurasi

Langkah 1: Terapkan aplikasi sampel
Terapkan aplikasi sleep.
Gunakan konten berikut untuk membuat sleep.yaml:
Di lingkungan KubeConfig cluster ACK, jalankan perintah berikut untuk menerapkan aplikasi sleep:
Untuk informasi lebih lanjut tentang cara menggunakan kubectl untuk mengelola cluster, lihat Dapatkan File kubeconfig Cluster dan Gunakan kubectl untuk Terhubung ke Cluster.
kubectl apply -f sleep.yaml
Jalankan perintah berikut untuk mengakses layanan eksternal dari pod tempat aplikasi sleep berada:
Anda dapat menjalankan perintah
kubectl get pod -n defaultuntuk melihat nama pod aplikasi sleep.kubectl exec -it ${sleep pod name} -- /bin/sh curl aliyun.com -IBerikut adalah contoh 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: 69Jika 301 dikembalikan, itu menunjukkan bahwa aplikasi dalam instance ASM dapat mengakses layanan eksternal. Dalam hal ini, permintaan akses HTTP dilakukan secara default. Server web mengembalikan respons 301 untuk mengarahkan ulang permintaan.
CatatanSecara default, ASM menggunakan kebijakan ALLOW_ANY untuk mengizinkan aplikasi dalam instance ASM mengakses semua layanan eksternal. Dalam hal ini, Anda tidak dapat menerapkan kontrol izin atau menggunakan kemampuan observabilitas yang disediakan oleh ASM. Kami merekomendasikan Anda mengubah kebijakan menjadi REGISTRY_ONLY untuk mengizinkan aplikasi dalam instance ASM mengakses hanya layanan eksternal tertentu, dan menggunakan egress gateway untuk mengarahkan semua trafik keluar.
(Opsional) Langkah 2: Atur kebijakan untuk mengakses layanan eksternal ke REGISTRY_ONLY
Secara default, ASM menggunakan kebijakan ALLOW_ANY untuk mengakses layanan eksternal. Kami merekomendasikan Anda mengubah kebijakan menjadi REGISTRY_ONLY. Setelah mengubah kebijakan menjadi REGISTRY_ONLY, proxy sidecar akan menolak akses ke host eksternal yang tidak memiliki entri layanan yang didefinisikan dalam instance ASM. Ini menjamin keamanan aplikasi dalam instance ASM.
Jika Anda telah mengaktifkan REGISTRY_ONLY tetapi belum membuat entri layanan, akses ke layanan eksternal akan ditolak.
Jika Anda belum mengaktifkan REGISTRY_ONLY dan belum membuat entri layanan, Anda dapat mengakses layanan, tetapi egress gateway yang dikonfigurasi tidak akan berlaku.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih .
Di halaman Sidecar Proxy Setting, klik tab global, klik Outbound Traffic Policy, atur External Access Policy ke REGISTRY_ONLY, lalu klik Update Settings.
Jalankan perintah berikut untuk mengakses layanan eksternal dari pod tempat aplikasi sleep berada:
kubectl exec -it ${sleep pod name} -- /bin/sh curl aliyun.com -IBerikut adalah contoh output:
HTTP/1.1 502 Bad Gateway date: Thu, 14 Dec 2023 03:08:46 GMT server: envoy transfer-encoding: chunkedKode kesalahan 502 dikembalikan, menunjukkan bahwa aplikasi dalam instance ASM tidak dapat mengakses layanan eksternal yang tidak didefinisikan dalam registri layanan instance ASM.
Langkah 3: Buat entri layanan untuk mendefinisikan layanan eksternal
Anda perlu membuat entri layanan untuk mendefinisikan layanan eksternal sehingga aplikasi dalam instance ASM dapat mengakses layanan eksternal menggunakan egress gateway.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih . Di halaman yang muncul, klik Create from YAML.
Di halaman Create, pilih namespace tempat aplikasi sleep berada, pilih Access mesh external services untuk Template, konfigurasikan contoh YAML, lalu klik Create. File YAML berikut memberikan contoh.
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: DNSJalankan perintah berikut untuk mengakses layanan eksternal dari pod tempat aplikasi sleep berada:
kubectl exec -it ${sleep pod name} -- /bin/sh curl aliyun.com -IJika
301dikembalikan, itu menunjukkan bahwa aplikasi dalam instance ASM dapat mengakses layanan eksternal. Nama domain aliyun.com didefinisikan dalam registri layanan instance ASM, sehingga aplikasi dalam instance ASM dapat mengakses layanan eksternal ini. Dalam hal ini, pod tempat aplikasi sleep berada langsung mengirim permintaan akses ke layanan eksternal dan permintaan tersebut tidak melewati egress gateway.
Langkah 4: Gunakan egress gateway untuk mengarahkan semua permintaan untuk mengakses layanan eksternal
Anda telah mendefinisikan nama domain aliyun.com dalam entri layanan instance ASM. Oleh karena itu, Anda dapat mengonfigurasi layanan virtual dan Istio gateway untuk mengelola trafik ke aliyun.com.
Buat egress gateway dan konfigurasikan untuk mengizinkan trafik HTTP pada port 80. Untuk informasi lebih lanjut, lihat Buat Egress Gateway.
Buat Istio gateway dan konfigurasikan parameter terkait sesuai instruksi pada gambar berikut. Untuk informasi lebih lanjut, lihat Kelola Istio Gateways.

Gunakan kode YAML berikut untuk membuat layanan virtual. Untuk informasi lebih lanjut, lihat Kelola Layanan Virtual.
Akses layanan eksternal untuk memverifikasi konfigurasi.
Jalankan perintah berikut untuk mengakses layanan eksternal dari pod tempat aplikasi sleep berada:
kubectl exec -it ${sleep pod name} -- /bin/sh curl aliyun.com -IJika 301 dikembalikan, itu menunjukkan bahwa aplikasi dalam instance ASM dapat mengakses layanan eksternal. Dalam hal ini, aplikasi dalam instance ASM tidak langsung mengakses layanan eksternal dari pod tempat aplikasi berada. Sebagai gantinya, aplikasi mengakses layanan eksternal melalui egress gateway.
Jalankan perintah berikut untuk melihat log akses di pod gateway:
CatatanJika pod gateway egress Anda memiliki beberapa replika, log akses dihasilkan di salah satunya. Anda harus menjalankan perintah ini pada replika pod satu per satu untuk menemukan log akses.
Jika Anda telah mengaktifkan fitur log akses untuk egress gateway, Anda dapat masuk ke Konsol Simple Log Service untuk melihat catatan akses.
kubectl -n istio-system logs ${egress gateway pod name} -c istio-proxy | grep aliyun.com | tail -n 1Berikut adalah contoh 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"}downstream_remote_addressmenunjukkan alamat IP pod tempat aplikasi sleep berada.Setelah menyelesaikan konfigurasi, permintaan akses ke layanan eksternal yang ditentukan melewati egress gateway. Anda dapat menggunakan kemampuan observabilitas dan keamanan yang disediakan oleh ASM untuk mengelola trafik keluar di egress gateway secara efisien.
Referensi
Anda dapat menggunakan kemampuan observabilitas dan keamanan yang disediakan oleh ASM untuk mengelola trafik keluar lebih efisien di egress gateway Anda. Untuk informasi lebih lanjut, lihat Observabilitas dan Keamanan Trafik dan Pemuatan Sertifikat Dinamis.
Anda dapat menggunakan bidang CustomResourceDefinition (CRD) ASMEgressTrafficPolicy untuk menyesuaikan cara mengelola trafik keluar menggunakan egress gateway. Untuk informasi lebih lanjut, lihat Gunakan Kebijakan Trafik Keluar untuk Mengelola Trafik Keluar.
Untuk informasi lebih lanjut tentang fitur gateway, lihat Ikhtisar Gateway ASM.