Seluruh lalu lintas keluar (outbound traffic) dari pod di instans Service Mesh (ASM) dialihkan melalui proxy sidecar secara default. Untuk memungkinkan pod mengakses layanan di luar mesh—seperti API pihak ketiga, database, atau titik akhir (endpoint) SaaS—Anda perlu mengonfigurasi cara proxy menangani permintaan ke destinasi yang tidak terdaftar.
ASM mendukung tiga pendekatan, masing-masing dengan pertimbangan berbeda terkait upaya penyiapan, visibilitas trafik, dan kontrol:
| Pendekatan | Visibilitas trafik | Traffic Control | Upaya penyiapan | Paling cocok untuk |
|---|---|---|---|---|
Kebijakan lalu lintas keluar (ALLOW_ANY) | Tidak ada | Tidak ada | Rendah | Pengujian awal dan evaluasi |
| ServiceEntry (direkomendasikan) | Lengkap | Lengkap (routing, retry, timeout, fault injection) | Sedang | Workload produksi |
| Intersepsi berbasis CIDR | Tidak ada untuk trafik yang dilewati | Tidak ada untuk trafik yang dilewati | Rendah | Workload sensitif terhadap performa yang tidak dapat mentoleransi overhead proxy |
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Instans ASM dengan injeksi proxy sidecar diaktifkan
Pod dengan proxy sidecar yang telah diinjeksikan untuk menguji akses eksternal
Izin untuk mengubah pengaturan instans ASM di Konsol ASM
Untuk menyiapkan pod uji, deploy workload contoh dan ekspor nama pod tersebut:
export SOURCE_POD=$(kubectl get pod -l <app-label> -o jsonpath='{.items..metadata.name}')Ganti <app-label> dengan pemilih label (label selector) untuk workload uji Anda. Semua perintah curl berikutnya dijalankan di dalam pod ini:
curl -I http://www.aliyun.com/Tetapkan kebijakan lalu lintas keluar
Pengaturan Outbound Traffic Policy mengontrol cara proxy sidecar menangani trafik ke destinasi yang tidak terdaftar di mesh.
ALLOW_ANY: Proksi meneruskan seluruh lalu lintas keluar. Pod dapat mengakses layanan eksternal apa pun, tetapi Istio tidak memantau atau mengontrol lalu lintas tersebut.REGISTRY_ONLY: Proxy memblokir trafik ke destinasi apa pun yang tidak terdaftar di registrasi layanan mesh.
Ketika kebijakan lalu lintas keluar diatur ke ALLOW_ANY dan tidak ada ServiceEntry yang didefinisikan, proxy sidecar mengizinkan trafik TCP ke alamat IP dan port mana pun. Pendekatan ini tidak menyediakan kontrol alur eksplisit dan dapat menyebabkan perilaku tak terduga jika beberapa layanan mendengarkan pada port yang sama. Jangan gunakan mode ini untuk layanan eksternal seperti database. Gunakan sumber daya ServiceEntry untuk secara eksplisit mengontrol destinasi trafik.
Tetapkan kebijakan ke ALLOW_ANY
Masuk ke Konsol ASM.
Di panel navigasi kiri, pilih Service Mesh > Mesh Management.
Pada halaman Mesh Management, temukan instans ASM target. Klik nama instans atau klik Manage di kolom Actions.
Di panel navigasi kiri, pilih Dataplane Component Management > Sidecar Proxy Setting.
Pada tab global, klik Outbound Traffic Policy, atur nilainya menjadi ALLOW_ANY, lalu klik Update Settings.
Verifikasi akses eksternal
Dari pod dengan proxy sidecar yang telah diinjeksikan, uji akses HTTP dan HTTPS:
Permintaan HTTP:
curl -I http://www.aliyun.com/Output yang diharapkan:
HTTP/1.1 301 Moved Permanently
server: envoy
date: Mon, 07 Sep 2020 09:28:54 GMT
content-type: text/html
content-length: 239
location: https://www.aliyun.com/
x-envoy-upstream-service-time: 67Permintaan HTTPS:
curl -I https://www.aliyun.com/Output yang diharapkan:
HTTP/2 200
server: Tengine
content-type: text/html; charset=utf-8
strict-transport-security: max-age=31536000Header server: envoy dalam respons HTTP mengonfirmasi bahwa trafik melewati proxy sidecar.
Buat ServiceEntry
Ketika kebijakan lalu lintas keluar diatur ke REGISTRY_ONLY, proxy sidecar memblokir permintaan ke layanan eksternal yang tidak terdaftar di mesh. Contohnya:
Permintaan HTTP diblokir (mengembalikan 502):
curl -I http://www.aliyun.com/HTTP/1.1 502 Bad Gateway
server: envoyPermintaan HTTPS diblokir (koneksi ditolak):
curl -I https://www.aliyun.com/curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to www.aliyun.com:443Untuk mengizinkan akses ke layanan eksternal tertentu sambil tetap menggunakan mode REGISTRY_ONLY, buat ServiceEntry untuk mendaftarkan layanan tersebut di mesh. ServiceEntry yang terdaftar memungkinkan manajemen trafik Istio secara lengkap—termasuk aturan routing, timeout, retry, dan fault injection—untuk trafik eksternal tersebut.
Langkah 1: Buat ServiceEntry
Masuk ke Konsol ASM.
Di panel navigasi kiri, pilih Service Mesh > Mesh Management.
Pada halaman Mesh Management, temukan instans ASM target. Klik nama instans atau klik Manage di kolom Actions.
Di panel navigasi kiri, pilih Cluster & Workload Management > External Service(ServiceEntry).
Klik Create from YAML.
Pilih namespace, tempel YAML berikut, lalu klik Create.
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: aliyun-com-ext
spec:
hosts:
- 'www.aliyun.com'
ports:
- number: 80
name: http
protocol: HTTP
- number: 443
name: https
protocol: HTTPS
resolution: DNS
location: MESH_EXTERNALAtur bidang hosts ke hostname layanan eksternal target. Contoh ini mendaftarkan www.aliyun.com pada port 80 (HTTP) dan 443 (HTTPS).
Langkah 2: Verifikasi akses eksternal
Dari pod dengan proxy sidecar yang telah diinjeksikan, uji akses kembali:
Permintaan HTTP:
curl -I http://www.aliyun.com/Output yang diharapkan:
HTTP/1.1 301 Moved Permanently
server: envoy
date: Mon, 07 Sep 2020 09:49:17 GMT
content-type: text/html
content-length: 239
location: https://www.aliyun.com/
x-envoy-upstream-service-time: 66Permintaan HTTPS:
curl -I https://www.aliyun.com/Output yang diharapkan:
HTTP/2 200
server: Tengine
content-type: text/html; charset=utf-8
strict-transport-security: max-age=31536000Respons sukses mengonfirmasi bahwa ServiceEntry berfungsi.
Langkah 3: Terapkan aturan manajemen trafik (opsional)
Setelah mendaftarkan layanan eksternal dengan ServiceEntry, Anda dapat menerapkan aturan manajemen trafik Istio padanya. Contoh berikut membuat VirtualService yang menambahkan penundaan 5 detik pada setiap permintaan ke www.aliyun.com. Ini berguna untuk menguji ketahanan workload terhadap ketergantungan eksternal yang lambat.
Di panel navigasi kiri, pilih Traffic Management Center > VirtualService.
Klik Create from YAML.
Pilih namespace, tempel YAML berikut, lalu klik Create.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: aliyun-com-ext
spec:
hosts:
- 'www.aliyun.com'
http:
- fault:
delay:
percent: 100
fixedDelay: 5s
route:
- destination:
host: www.aliyun.com
weight: 100Langkah 4: Verifikasi aturan trafik
Konfirmasi bahwa penundaan 5 detik diterapkan:
time curl -o /dev/null -s -w "%{http_code}\n" http://www.aliyun.com/Output yang diharapkan:
301
real 0m 5.07s
user 0m 0.00s
sys 0m 0.00sWaktu real sekitar 5 detik mengonfirmasi bahwa aturan fault injection VirtualService sedang berlaku.
Konfigurasi intersepsi berbasis CIDR
Secara default, proxy sidecar mengintersepsi Trafik ke semua alamat IP. Anda dapat mempersempit cakupan intersepsi ke Blok CIDR tertentu sehingga Trafik ke tujuan lain sepenuhnya melewati proxy sidecar.
Pola umum adalah mengatur cakupan intersepsi ke Blok CIDR layanan kluster Kubernetes di bidang data (data plane). Trafik ke layanan dalam kluster melewati proxy sidecar untuk observabilitas dan kontrol, sedangkan trafik ke layanan eksternal melewatinya demi latensi lebih rendah.
Berbeda dengan dua pendekatan lainnya, bypass berbasis CIDR sepenuhnya menonaktifkan fitur Istio (observabilitas, manajemen trafik, kebijakan keamanan) untuk trafik yang dilewati. Gunakan pendekatan ini hanya jika overhead proxy tidak dapat diterima untuk destinasi eksternal tertentu.
Prosedur
Masuk ke Konsol ASM.
Di panel navigasi kiri, pilih Service Mesh > Mesh Management.
Pada halaman Mesh Management, temukan instans ASM target. Klik nama instans atau klik Manage di kolom Actions.
Di panel navigasi kiri, pilih Dataplane Component Management > Sidecar Proxy Setting.
Pada tab global, klik Enable/Disable Sidecar Proxy by Ports or IP Addresses.
Pada bidang Addresses to Which External Access Is Redirected to Sidecar Proxy, masukkan Blok CIDR yang akan diintersepsi, lalu klik Update Settings.
Nilai default adalah *, yang mengintersepsi seluruh trafik. Anda dapat memasukkan Blok CIDR sesuai kebutuhan bisnis. Umumnya, Anda dapat memasukkan Blok CIDR layanan kluster Kubernetes di bidang data instans ASM.
Alternatifnya, gunakan bidang Addresses to Which External Access Is Not Redirected to Sidecar Proxy untuk menentukan Blok CIDR yang melewati proxy sidecar. Seluruh trafik lainnya akan diintersepsi.
Pertimbangan keamanan
Saat mengonfigurasi akses eksternal, perhatikan poin-poin berikut:
Lebih baik gunakan
REGISTRY_ONLYdengan sumber daya ServiceEntry di lingkungan produksi. Pendekatan ini memastikan hanya layanan eksternal yang secara eksplisit terdaftar yang dapat diakses, sehingga mengurangi risiko kebocoran data yang tidak disengaja.Hindari
ALLOW_ANYuntuk akses database. Tanpa definisi ServiceEntry eksplisit, trafik ke database tidak memiliki kontrol alur dan dapat menyebabkan perilaku tak terduga jika beberapa layanan mendengarkan pada port yang sama.
Langkah selanjutnya
Untuk melihat layanan yang terdaftar di mesh, buka ASM Instance > Instances Status di Konsol ASM.
Untuk informasi lebih lanjut tentang konfigurasi ServiceEntry Istio, lihat referensi ServiceEntry Istio.