Anda dapat menambahkan entri untuk layanan eksternal—seperti database, API pihak ketiga, atau sistem warisan—ke dalam registrasi layanan internal instans Service Mesh (ASM), sehingga layanan dalam instans ASM tersebut dapat mengakses layanan eksternal tersebut.
Setiap entri layanan mendefinisikan nama domain, port, protokol, dan titik akhir dari layanan eksternal.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Instans ASM
Akses ke Konsol ASM
Layanan eksternal target dengan host, alamat IP, atau nama domain yang diketahui
Buat entri layanan
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih Cluster & Workload Management > External Service(ServiceEntry).
Klik Create from YAML.
Pada halaman Create, pilih namespace dan templat skenario, edit YAML di editor kode, lalu klik Create. Untuk daftar lengkap bidang entri layanan, lihat ServiceEntry dalam dokumentasi Istio.
Verifikasi hasil
Setelah membuat entri layanan, verifikasi bahwa entri tersebut berfungsi:
Pastikan entri layanan muncul di halaman External Service(ServiceEntry) dengan nama dan namespace yang sesuai.
Dari Pod di dalam mesh, kirim permintaan uji ke layanan eksternal: Output yang diharapkan (mengonfirmasi bahwa layanan eksternal dapat dijangkau melalui mesh):
kubectl exec <pod-name> -c <container-name> -- curl -sI https://www.aliyun.com | grep "HTTP/"HTTP/2 200
Ubah entri layanan
Pada halaman detail instans ASM, pilih Cluster & Workload Management > External Service(ServiceEntry) di panel navigasi sebelah kiri.
Temukan entri layanan yang ingin diubah, lalu klik YAML pada kolom Actions.
Pada kotak dialog Edit, perbarui konfigurasi, lalu klik OK.
Hapus entri layanan
Pada halaman detail instans ASM, pilih Cluster & Workload Management > External Service(ServiceEntry) di panel navigasi sebelah kiri.
Temukan entri layanan yang ingin dihapus, lalu klik Delete pada kolom Actions.
Pada pesan Submit, klik OK.
Menghapus entri layanan akan langsung mencabut akses ke layanan eksternal tersebut untuk semua workload dalam mesh. Sebelum menghapus entri, pastikan tidak ada workload aktif yang bergantung padanya.
Referensi bidang entri layanan
Bidang
| Field | Description |
|---|---|
hosts | Nama DNS yang terkait dengan layanan eksternal. Untuk HTTP, proxy mencocokkan Header Host. Untuk HTTPS/TLS, proxy mencocokkan nilai SNI. Mendukung wildcard (misalnya, *.aliyun.com). |
addresses | Alamat IP virtual untuk layanan tersebut. Wajib diisi untuk layanan TCP yang tidak memiliki Header Host atau SNI. |
ports | Port yang diekspos oleh layanan eksternal. Nama port harus mengikuti konvensi penamaan yang tercantum di bagian Konvensi penamaan port di bawah ini. |
location | MESH_EXTERNAL untuk layanan di luar mesh. MESH_INTERNAL untuk workload yang tidak dikelola (misalnya, VM) yang harus diperlakukan sebagai bagian dalam mesh. |
resolution | Cara proxy melakukan resolusi alamat IP layanan. Lihat bagian Mode resolusi di bawah ini. |
exportTo | Mengontrol namespace mana yang dapat mengakses entri layanan tersebut. Nilai default-nya adalah semua namespace ("*"). Atur ke "." untuk membatasi hanya pada namespace tempat entri dibuat. |
Mode resolusi
Bidang resolution mengontrol cara proxy melakukan resolusi alamat IP layanan eksternal:
| Mode | Behavior | When to use |
|---|---|---|
DNS | Melakukan kueri DNS untuk meresolusi host dan mengarahkan traffic ke IP yang dikembalikan. | Layanan yang diidentifikasi berdasarkan nama domain. Disarankan untuk sebagian besar kasus penggunaan. |
NONE | Meneruskan traffic ke alamat IP tujuan asli tanpa melakukan resolusi. | Koneksi yang sudah diarahkan ke IP yang benar, misalnya melalui aturan iptables. |
Dengan resolusi DNS, proxy mengabaikan alamat IP tujuan asli dan melakukan kueri DNS terhadap host yang ditentukan untuk mendapatkan alamat IP yang dapat dirutekan.
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: aliyun
spec:
hosts:
- www.aliyun.com
- aliyun.com
ports:
- number: 443
name: https
protocol: HTTPS
resolution: DNS
location: MESH_EXTERNALKonvensi penamaan port
Istio menggunakan nama port untuk menentukan protokol dalam perutean traffic. Beri nama port dalam entri layanan sesuai konvensi berikut:
| Protocol | Port name | Port name with a suffix |
|---|---|---|
| HTTP | http | http-\ |
| HTTP2 | http2 | http2-\ |
| HTTPS | https | https-\ |
| TLS | tls | tls-\ |
| gRPC | grpc | grpc-\ |
| TCP | tcp | tcp-\ |
| UDP | UDP | udp-\ |
| Mongo | mongo | mongo-\ |
| MySQL | mysql | mysql-\ |
| Redis | redis | redis-\ |
Port Envoy yang dicadangkan
Jangan gunakan port berikut dalam entri layanan. Port-port ini dicadangkan oleh proxy sidecar Envoy dan dapat menyebabkan konflik:
| Port | Protocol | Description |
|---|---|---|
| 15000 | TCP | Port admin Envoy |
| 15001 | TCP | Port arah keluar Envoy |
| 15006 | TCP | Port arah masuk Envoy |
| 15020 | HTTP | Telemetri Prometheus gabungan dari proxy Istio, Envoy, dan aplikasi |
| 15021 | HTTP | Port pemeriksaan kesehatan |
| 15090 | HTTP | Port telemetri Prometheus Envoy |
Konfigurasi spesifik protokol
Bidang yang diperlukan dalam entri layanan bergantung pada protokolnya.
HTTP, HTTPS, atau TLS
Tentukan bidang hosts. Proxy mencocokkan Header Host (HTTP) atau nilai SNI (HTTPS/TLS) untuk mengarahkan traffic.
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: aliyun
spec:
hosts:
- www.aliyun.com
- aliyun.com
ports:
- number: 443
name: https
protocol: HTTPS
resolution: DNS
location: MESH_EXTERNALTCP
Tentukan bidang addresses dengan rentang IP. Proxy menggunakan pencocokan berbasis IP karena TCP tidak memiliki Header Host atau SNI.
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: mysql-external
spec:
hosts:
- mysql-01.foo.bar
addresses:
- 10.0.0.5/32
- 10.0.0.6/32
ports:
- name: tcp
number: 3306
protocol: tcp
location: MESH_EXTERNALBeberapa layanan TCP pada port yang sama
Berikan alamat IP yang berbeda untuk setiap entri layanan agar proxy dapat membedakan traffic.
Layanan 1:
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: external-svc-1
namespace: default
spec:
hosts:
- fqdna.fqdn.com
addresses:
- 10.0.0.0
location: MESH_EXTERNAL
ports:
- name: TCP
number: 3306
protocol: TCP
resolution: DNSLayanan 2:
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: external-svc-2
namespace: default
spec:
hosts:
- fqdnb.fqdn.com
addresses:
- 10.1.0.0
location: MESH_EXTERNAL
ports:
- name: TCP
number: 3306
protocol: TCP
resolution: DNSVisibilitas namespace
Secara default, entri layanan dapat diakses dari semua namespace dalam mesh. Untuk membatasi visibilitas hanya ke namespace tempat entri tersebut dibuat, atur exportTo ke ".":
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: aliyun
spec:
hosts:
- www.aliyun.com
exportTo:
- "."
ports:
- number: 443
name: https
protocol: HTTPS
resolution: DNS
location: MESH_EXTERNALLangkah selanjutnya
Setelah membuat entri layanan, terapkan kebijakan manajemen traffic ke layanan eksternal tersebut dengan menggunakan resource VirtualService dan DestinationRule. Anda dapat mengonfigurasi timeout, retry, atau fault injection. VirtualService berikut menetapkan timeout 3 detik untuk permintaan ke layanan eksternal:
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: aliyun-ext
spec:
hosts:
- www.aliyun.com
http:
- timeout: 3s
route:
- destination:
host: www.aliyun.comUntuk informasi lebih lanjut tentang bidang entri layanan dan konfigurasi lanjutan, lihat ServiceEntry dalam dokumentasi Istio.