ServiceEntry: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya | Dewa234

Istio ServiceEntry: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya | Dewa234

Istio ServiceEntry: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya

Ilustrasi Istio ServiceEntry untuk menghubungkan service eksternal dan internal dengan Service Mesh

Dalam arsitektur microservices modern, aplikasi Dewa234 tidak selalu berkomunikasi hanya dengan service yang berada di dalam Kubernetes atau Service Mesh. Sebuah aplikasi dapat membutuhkan layanan eksternal seperti API pihak ketiga, payment gateway, database di luar cluster, layanan cloud, sistem legacy, virtual machine, hingga berbagai endpoint yang berada pada jaringan berbeda.

Pada lingkungan Istio Service Mesh, service yang berada di dalam mesh biasanya ditemukan melalui service registry yang tersedia pada platform seperti Kubernetes. Namun, service eksternal atau workload tertentu yang tidak terdaftar secara otomatis tidak selalu memiliki informasi yang cukup bagi Istio untuk diperlakukan seperti service biasa.

Untuk mengatasi kebutuhan tersebut, Istio menyediakan ServiceEntry. Resource ini memungkinkan administrator menambahkan service secara manual ke dalam internal service registry Istio sehingga Envoy Proxy dapat mengenali destination tersebut dan menerapkan kemampuan traffic management serta observability yang tersedia di dalam service mesh.

ServiceEntry dapat digunakan untuk mendefinisikan service eksternal seperti API berbasis internet, maupun service internal seperti workload yang berjalan pada virtual machine. ServiceEntry juga dapat dikombinasikan dengan VirtualService, DestinationRule, WorkloadEntry, dan Egress Gateway untuk membangun arsitektur jaringan yang lebih terkontrol. ([istio.io](https://istio.io/latest/docs/reference/config/networking/service-entry/))


Apa Itu Istio ServiceEntry?

Istio ServiceEntry adalah resource konfigurasi Istio yang digunakan untuk menambahkan entry tambahan ke dalam internal service registry yang dikelola oleh Istio.

Dengan ServiceEntry, administrator dapat mendeskripsikan karakteristik sebuah service seperti hostname, port, protocol, lokasi service, metode resolusi, endpoint, serta konfigurasi lain yang diperlukan oleh service mesh.


                Istio Service Registry
                         │
             ┌───────────┴───────────┐
             │                       │
             ▼                       ▼
      Auto Discovered          ServiceEntry
         Services                   │
             │                      │
             │              ┌───────┴────────┐
             │              │                │
             ▼              ▼                ▼
        Kubernetes       External API       VM
          Service         / Legacy        Workload

Dengan demikian, ServiceEntry dapat memperluas service registry Istio sehingga service yang sebelumnya tidak ditemukan secara otomatis dapat diperlakukan sebagai destination yang dikenali oleh mesh.

Dokumentasi Istio menjelaskan bahwa ServiceEntry memungkinkan service yang ditambahkan secara manual untuk dapat diakses atau dirouting oleh service yang ditemukan secara otomatis di dalam mesh. ([istio.io](https://istio.io/latest/docs/reference/config/networking/service-entry/))


Mengapa Istio ServiceEntry Dibutuhkan?

Service Mesh tidak hanya berisi komunikasi antar-service internal. Pada aplikasi nyata, dependency eksternal sering menjadi bagian penting dari sistem.

Sebagai contoh, aplikasi e-commerce dapat memiliki arsitektur seperti berikut:


User
 │
 ▼
API Gateway
 │
 ▼
Order Service
 │
 ├────► Product Service
 │
 ├────► Inventory Service
 │
 ├────► Payment Service
 │
 └────► External Payment API
                 │
                 ▼
             Internet

Payment API tersebut mungkin berada di luar Kubernetes cluster. Jika aplikasi harus mengaksesnya melalui service mesh, administrator membutuhkan cara untuk mendefinisikan destination tersebut agar dapat dikenali dan dikelola oleh Istio.

Di sinilah ServiceEntry menjadi penting. Dengan ServiceEntry, external API dapat ditambahkan ke registry Istio sehingga traffic menuju destination tersebut dapat memanfaatkan fitur traffic management dan observability yang tersedia.

Istio secara default dapat melakukan passthrough terhadap destination eksternal yang tidak terdaftar. Namun, destination tersebut tidak dapat memperoleh kontrol traffic Istio secara penuh seperti service yang sudah terdaftar. ServiceEntry memberikan cara untuk mendaftarkan destination secara eksplisit. ([istio.io](https://istio.io/latest/docs/concepts/traffic-management/))


Tujuan Utama Istio ServiceEntry

  • Menambahkan external service ke service registry Istio.
  • Mendaftarkan service yang tidak ditemukan secara otomatis.
  • Mendefinisikan hostname dan port service.
  • Mendefinisikan metode resolusi destination.
  • Menghubungkan workload VM dengan service mesh.
  • Mendukung migrasi workload dari VM menuju Kubernetes.
  • Mengontrol akses menuju external API.
  • Mendukung pengelolaan egress traffic.
  • Mengintegrasikan external service dengan VirtualService.
  • Mengintegrasikan external service dengan DestinationRule.

Konsep Dasar Istio ServiceEntry

Sebelum membuat ServiceEntry, terdapat beberapa konsep penting yang perlu dipahami.

Konsep Penjelasan
Service Registry Daftar service yang dikenal oleh Istio.
Host Hostname yang digunakan untuk mengidentifikasi service.
Port Port tempat service menerima traffic.
Protocol Jenis protokol seperti HTTP, HTTPS, TLS, TCP, atau lainnya.
Location Menentukan apakah service berada di dalam atau di luar mesh.
Resolution Menentukan bagaimana destination ditemukan atau di-resolve.
Endpoint Alamat aktual dari service tujuan.
WorkloadSelector Memilih workload berdasarkan label.
ExportTo Mengatur namespace yang dapat menggunakan service.

Cara Kerja Istio ServiceEntry

ServiceEntry bekerja dengan memasukkan informasi service ke dalam service registry Istio. Setelah konfigurasi diterapkan, informasi tersebut dapat digunakan oleh control plane untuk menghasilkan konfigurasi jaringan yang kemudian digunakan oleh Envoy Proxy.


Administrator
     │
     │ ServiceEntry YAML
     ▼
Istio Control Plane
     │
     │ Configuration
     ▼
Envoy Proxy
     │
     │ Request
     ▼
ServiceEntry Destination
     │
     ├────────► External API
     │
     ├────────► VM
     │
     └────────► Legacy Service

Misalnya sebuah aplikasi melakukan request ke:

https://api.example.com

Administrator dapat membuat ServiceEntry yang mendefinisikan hostname tersebut sebagai external service dengan port 443 dan resolution DNS.

Envoy kemudian mengetahui bahwa hostname tersebut merupakan destination yang telah didaftarkan di dalam service registry Istio.

Setelah service terdaftar, konfigurasi lain seperti VirtualService dan DestinationRule dapat digunakan terhadap destination tersebut sesuai kebutuhan.


Alur Kerja Istio ServiceEntry

  1. Administrator membuat konfigurasi ServiceEntry.
  2. ServiceEntry diterapkan ke cluster menggunakan kubectl.
  3. Istio Control Plane membaca konfigurasi tersebut.
  4. Service ditambahkan ke internal service registry.
  5. Konfigurasi jaringan dikirim kepada proxy yang relevan.
  6. Envoy Proxy mengenali hostname dan port destination.
  7. Request dari aplikasi diarahkan menuju destination.
  8. Traffic dapat dikombinasikan dengan konfigurasi routing atau traffic policy lainnya.

Arsitektur Istio ServiceEntry


+----------------------------------------------------+
|                 Application                         |
+----------------------------------------------------+
                         |
                         ▼
+----------------------------------------------------+
|                 Envoy Proxy                         |
+----------------------------------------------------+
                         |
                         ▼
+----------------------------------------------------+
|             Istio Service Registry                  |
|                                                    |
|  Kubernetes Service                                |
|  ServiceEntry                                     |
+----------------------------------------------------+
                         |
             +-----------+-----------+
             |                       |
             ▼                       ▼
+----------------------+   +-------------------------+
| Internal Service     |   | External Service        |
| Kubernetes / VM      |   | API / Cloud / Legacy   |
+----------------------+   +-------------------------+

Pada arsitektur tersebut, ServiceEntry memperluas service registry sehingga destination yang berada di luar mekanisme discovery bawaan tetap dapat didefinisikan secara deklaratif.


Komponen Istio ServiceEntry

Komponen Fungsi
hosts Menentukan hostname service.
ports Menentukan port dan protocol.
location Menentukan MESH_EXTERNAL atau MESH_INTERNAL.
resolution Menentukan metode resolusi endpoint.
endpoints Menentukan alamat endpoint service.
workloadSelector Memilih workload Kubernetes atau VM berdasarkan label.
exportTo Mengontrol visibility service antar-namespace.
subjectAltNames Menentukan identitas SAN yang harus diverifikasi pada skenario tertentu.

Hosts pada Istio ServiceEntry

Field hosts digunakan untuk menentukan hostname yang berhubungan dengan ServiceEntry.


hosts:
- api.example.com

Hostname tersebut dapat digunakan sebagai destination oleh konfigurasi Istio lainnya.

Untuk HTTP, nilai Host atau Authority pada request dapat digunakan untuk mencocokkan host. Untuk HTTPS atau TLS yang menggunakan SNI, nilai SNI dapat dicocokkan dengan hostname ServiceEntry. ([istio.io](https://istio.io/latest/docs/reference/config/networking/service-entry/))

ServiceEntry juga mendukung hostname wildcard dalam skenario tertentu.


hosts:
- "*.example.com"

Wildcard berguna apabila administrator ingin menangani beberapa subdomain dalam domain yang sama.


Ports pada Istio ServiceEntry

Field ports digunakan untuk menentukan port yang digunakan service.


ports:
- number: 443
  name: https
  protocol: HTTPS

Contoh tersebut mendefinisikan service pada port 443 menggunakan protocol HTTPS.

ServiceEntry juga dapat memiliki beberapa port.


ports:

- number: 80
  name: http
  protocol: HTTP

- number: 443
  name: https
  protocol: HTTPS

Pendefinisian port dan protocol yang tepat penting karena Envoy membutuhkan informasi tersebut untuk memproses traffic sesuai konfigurasi service mesh.


Location pada Istio ServiceEntry

Field location menentukan apakah service dianggap berada di luar atau di dalam service mesh.

MESH_EXTERNAL

MESH_EXTERNAL digunakan untuk service yang berada di luar mesh.

Contohnya:

  • External API.
  • Payment Gateway.
  • Cloud API.
  • Public API.
  • External Database.
  • Third-party service.

location: MESH_EXTERNAL

MESH_INTERNAL

MESH_INTERNAL digunakan untuk service yang dianggap sebagai bagian dari mesh tetapi tidak ditemukan melalui service registry platform secara otomatis.

Salah satu penggunaan pentingnya adalah workload yang berjalan pada virtual machine atau infrastructure unmanaged yang ingin diintegrasikan dengan Istio.


location: MESH_INTERNAL

Location juga memengaruhi perilaku berbagai fitur Istio seperti policy dan autentikasi service-to-service. ([istio.io](https://istio.io/latest/docs/reference/config/networking/service-entry/))


Resolution pada Istio ServiceEntry

Field resolution menentukan bagaimana proxy menemukan alamat IP destination yang terkait dengan service.

Resolution Fungsi
NONE Menganggap koneksi sudah diarahkan ke destination IP tertentu.
STATIC Menggunakan endpoint IP yang didefinisikan secara statis.
DNS Menggunakan resolusi DNS untuk menentukan alamat destination.
DNS_ROUND_ROBIN Menggunakan resolusi DNS dengan pendekatan koneksi yang sesuai untuk service berbasis DNS berskala besar.
DYNAMIC_DNS Mendukung skenario wildcard DNS tertentu pada versi Istio yang mendukung fitur tersebut.

Mode resolution harus dipilih berdasarkan karakteristik destination. Dokumentasi Istio saat ini menjelaskan bahwa mode DNS melakukan resolusi DNS secara asynchronous, sedangkan STATIC menggunakan alamat endpoint yang didefinisikan. ([istio.io](https://istio.io/latest/docs/reference/config/networking/service-entry/))


Resolution DNS

DNS merupakan salah satu konfigurasi yang umum digunakan untuk external service berbasis hostname.


apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: external-api
spec:
  hosts:
  - api.example.com
  location: MESH_EXTERNAL
  ports:
  - number: 443
    name: https
    protocol: HTTPS
  resolution: DNS

Dengan konfigurasi tersebut, Istio menggunakan DNS untuk menemukan alamat IP yang berkaitan dengan api.example.com.

Untuk external service, penggunaan DNS juga dapat membantu mencegah skenario tertentu ketika destination IP tidak sesuai dengan hostname yang diizinkan. Dokumentasi Istio secara khusus menggunakan DNS resolution dalam contoh controlled external access. ([istio.io](https://istio.io/latest/docs/tasks/traffic-management/egress/egress-control/))


Resolution STATIC

Mode STATIC digunakan apabila administrator ingin menentukan endpoint secara eksplisit.


resolution: STATIC

endpoints:

- address: 10.10.10.10

- address: 10.10.10.11

Mode ini berguna untuk destination yang memiliki alamat endpoint yang diketahui dan tidak bergantung pada resolusi DNS dinamis.


Resolution NONE

Mode NONE mengasumsikan koneksi sudah diarahkan ke destination IP tertentu.


resolution: NONE

Mode ini memiliki karakteristik yang berbeda dengan DNS karena proxy tidak melakukan resolusi hostname dengan cara yang sama.

Untuk pengendalian external traffic, administrator perlu berhati-hati menggunakan resolution NONE. Dokumentasi Istio menunjukkan bahwa penggunaan NONE pada controlled external access dapat membuka kemungkinan destination IP yang tidak sesuai dengan hostname yang dimaksud. ([istio.io](https://istio.io/latest/docs/tasks/traffic-management/egress/egress-control/))


Endpoints pada Istio ServiceEntry

Field endpoints digunakan untuk menentukan endpoint service secara manual.


endpoints:

- address: 10.20.10.10

- address: 10.20.10.11

Dengan konfigurasi tersebut, ServiceEntry memiliki endpoint yang telah ditentukan secara eksplisit.

Endpoint dapat digunakan bersama resolution STATIC maupun skenario lain yang sesuai dengan konfigurasi.


WorkloadSelector pada Istio ServiceEntry

workloadSelector digunakan untuk memilih workload berdasarkan label.


workloadSelector:
  labels:
    app: legacy-service

Fitur ini berguna ketika ServiceEntry ingin menghubungkan service dengan workload tertentu yang dapat berupa Kubernetes Pod atau workload VM yang direpresentasikan melalui WorkloadEntry.

Istio mendukung penggunaan ServiceEntry dengan workloadSelector untuk menggabungkan endpoint VM dan Kubernetes di bawah service yang sama. Salah satu manfaatnya adalah memungkinkan migrasi service dari VM ke Kubernetes tanpa harus mengubah DNS name yang digunakan consumer. ([istio.io](https://istio.io/latest/docs/reference/config/networking/service-entry/))


ServiceEntry untuk Migrasi VM ke Kubernetes


                  Service
                     │
                     ▼
              ServiceEntry
                     │
              ┌──────┴──────┐
              │             │
              ▼             ▼
             VM        Kubernetes Pod
              │             │
              └──────┬──────┘
                     │
                     ▼
              Consumer Service

Misalnya sebuah service bernama details sebelumnya berjalan pada beberapa VM. Kemudian organisasi ingin memindahkan service tersebut secara bertahap ke Kubernetes.

ServiceEntry dapat digunakan untuk mempertahankan identitas service yang sama sementara endpoint berasal dari VM dan Kubernetes.

Pendekatan tersebut sangat berguna untuk proses modernisasi aplikasi karena migrasi tidak harus dilakukan sekaligus.


ServiceEntry dan WorkloadEntry

ServiceEntry dapat dikombinasikan dengan WorkloadEntry untuk mendefinisikan workload yang tidak berjalan sebagai Kubernetes Pod.


apiVersion: networking.istio.io/v1
kind: WorkloadEntry
metadata:
  name: legacy-vm
spec:
  serviceAccount: legacy
  address: 10.10.10.20
  labels:
    app: legacy

Kemudian ServiceEntry dapat memilih workload berdasarkan label:


apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: legacy-service
spec:
  hosts:
  - legacy.example.com
  location: MESH_INTERNAL
  ports:
  - number: 80
    name: http
    protocol: HTTP
  resolution: STATIC
  workloadSelector:
    labels:
      app: legacy


ExportTo pada Istio ServiceEntry

Field exportTo digunakan untuk menentukan namespace yang dapat melihat dan menggunakan ServiceEntry.


exportTo:
- "."

Nilai titik digunakan untuk membatasi visibility ke namespace tempat resource tersebut berada.

Sebaliknya, nilai * digunakan untuk mengekspor service ke seluruh namespace.


exportTo:
- "*"

Jika exportTo tidak ditentukan, ServiceEntry secara default diekspor ke seluruh namespace pada model konfigurasi yang dijelaskan dalam dokumentasi Istio. Pengaturan ini dapat digunakan untuk mengontrol visibility antar-namespace. ([istio.io](https://istio.io/latest/docs/reference/config/networking/service-entry/))


SubjectAltNames pada Istio ServiceEntry

Field subjectAltNames digunakan untuk menentukan identitas Subject Alternative Name yang harus diverifikasi oleh proxy pada skenario tertentu.


subjectAltNames:

- "spiffe://cluster.local/ns/example/sa/example-service"

Konfigurasi ini dapat berguna ketika service menggunakan identitas berbasis sertifikat dan administrator membutuhkan verifikasi identitas destination tertentu.

Penggunaan SAN harus disesuaikan dengan desain keamanan dan identitas service yang digunakan.


Istio ServiceEntry untuk External API

Salah satu skenario paling umum adalah menghubungkan microservice dengan external API.


Microservice
     │
     ▼
Envoy Proxy
     │
     ▼
ServiceEntry
     │
     ▼
api.example.com
     │
     ▼
External API

Contohnya adalah aplikasi yang membutuhkan payment API, notification API, shipping API, atau layanan cloud.

Dengan ServiceEntry, destination tersebut dapat didefinisikan secara eksplisit sehingga Istio dapat mengelola traffic menuju external API tersebut.


Contoh ServiceEntry External HTTPS


apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: external-api
spec:
  hosts:
  - api.example.com
  location: MESH_EXTERNAL
  ports:
  - number: 443
    name: https
    protocol: HTTPS
  resolution: DNS

Konfigurasi tersebut mendefinisikan sebuah external service menggunakan HTTPS pada port 443.

Untuk TLS-based traffic, hostname juga dapat berhubungan dengan SNI yang dikirim oleh client.


Implementasi Istio ServiceEntry di Kubernetes

ServiceEntry dapat dibuat menggunakan file YAML.

Buat file:


service-entry.yaml

Isi dengan:


apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: external-api
  namespace: default
spec:
  hosts:
  - api.example.com
  location: MESH_EXTERNAL
  ports:
  - number: 443
    name: https
    protocol: HTTPS
  resolution: DNS

Kemudian terapkan konfigurasi menggunakan:


kubectl apply -f service-entry.yaml

Periksa resource:


kubectl get serviceentry

Untuk melihat detail:


kubectl describe serviceentry external-api


Istio ServiceEntry dan VirtualService

ServiceEntry dapat dikombinasikan dengan VirtualService untuk mengatur routing menuju destination.


ServiceEntry
      │
      ▼
External Service
      │
      ▼
VirtualService
      │
      ▼
Routing Rule

VirtualService dapat digunakan untuk menentukan bagaimana request menuju host tertentu diproses.

Misalnya administrator ingin mengarahkan request menuju external destination melalui jalur tertentu sebelum diteruskan ke endpoint tujuan.

Istio menyediakan kemampuan routing terhadap service yang telah ditambahkan melalui ServiceEntry dengan mekanisme yang serupa dengan service lainnya di mesh. ([istio.io](https://istio.io/latest/docs/concepts/traffic-management/))


Istio ServiceEntry dan DestinationRule

DestinationRule digunakan untuk menerapkan kebijakan traffic setelah destination berhasil dikenali.


ServiceEntry
     │
     ▼
Destination
     │
     ▼
DestinationRule
     │
     ├── TLS
     ├── Connection Policy
     ├── Load Balancing
     └── Outlier Detection

Dengan kombinasi tersebut, external service dapat memperoleh pengaturan traffic yang lebih granular.


Istio ServiceEntry untuk Egress Traffic

Egress traffic merupakan traffic yang keluar dari service mesh menuju destination eksternal.


Application
     │
     ▼
Envoy Proxy
     │
     ▼
ServiceEntry
     │
     ▼
External Service

ServiceEntry merupakan salah satu mekanisme utama yang dapat digunakan untuk mengatur external service secara eksplisit.

Dalam mode REGISTRY_ONLY, destination eksternal yang tidak terdaftar dalam service registry akan diblokir oleh proxy. Karena itu, external service yang memang ingin diakses perlu didefinisikan melalui ServiceEntry. ([istio.io](https://istio.io/latest/docs/tasks/traffic-management/egress/egress-control/))


ALLOW_ANY vs REGISTRY_ONLY

Mode Perilaku
ALLOW_ANY Destination eksternal yang tidak dikenal dapat dilewatkan oleh proxy.
REGISTRY_ONLY Destination eksternal harus terdaftar agar dapat diakses melalui proxy.

ALLOW_ANY memudahkan tahap awal penggunaan Istio karena service tidak harus langsung didaftarkan.

Namun, pendekatan tersebut membuat external traffic lebih sulit dikontrol secara eksplisit.

REGISTRY_ONLY memberikan model yang lebih ketat karena external destination harus terdaftar di service registry, misalnya melalui ServiceEntry.

Istio merekomendasikan pendekatan controlled access dengan ServiceEntry ketika organisasi ingin memperoleh monitoring dan traffic control terhadap external service. ([istio.io](https://istio.io/latest/docs/tasks/traffic-management/egress/egress-control/))


Istio ServiceEntry dan Egress Gateway

Pada kebutuhan keamanan yang lebih tinggi, ServiceEntry dapat digunakan bersama Egress Gateway.


Application
     │
     ▼
Sidecar Proxy
     │
     ▼
ServiceEntry
     │
     ▼
Egress Gateway
     │
     ▼
External Network
     │
     ▼
External Service

Egress Gateway menyediakan titik keluar khusus dari service mesh.

Arsitektur ini dapat digunakan ketika organisasi ingin mengontrol external traffic melalui gateway tertentu sehingga monitoring, routing, dan kontrol keamanan dapat dilakukan secara lebih terpusat.

Dokumentasi Istio menyediakan contoh ServiceEntry yang digunakan bersama Egress Gateway untuk meneruskan traffic external service melalui gateway khusus. ([istio.io](https://istio.io/latest/docs/reference/config/networking/service-entry/))


ServiceEntry untuk Legacy System

Tidak semua organisasi langsung menggunakan Kubernetes untuk seluruh sistem. Banyak perusahaan masih memiliki aplikasi legacy yang berjalan pada VM atau server tradisional.


Kubernetes
    │
    ▼
Istio Service Mesh
    │
    ▼
ServiceEntry
    │
    ▼
Legacy VM
    │
    ▼
Legacy Application

ServiceEntry dapat digunakan untuk membuat workload tersebut dapat dikenali oleh Istio.

Pendekatan ini membantu organisasi mengintegrasikan sistem lama tanpa harus melakukan migrasi besar-besaran dalam satu tahap.


ServiceEntry untuk Hybrid Infrastructure

Dalam lingkungan hybrid, workload dapat tersebar di Kubernetes, VM, cloud, dan external infrastructure.


                 Istio Mesh
                     │
          ┌──────────┼──────────┐
          │          │          │
          ▼          ▼          ▼
     Kubernetes      VM       External API
          │          │          │
          └──────────┼──────────┘
                     │
                ServiceEntry

ServiceEntry membantu memberikan model service discovery yang lebih konsisten terhadap destination yang tidak ditemukan secara otomatis.


Istio ServiceEntry untuk Multiple Endpoint

Sebuah service dapat memiliki lebih dari satu endpoint.


endpoints:

- address: 10.10.10.10

- address: 10.10.10.11

- address: 10.10.10.12

Multiple endpoint memungkinkan traffic diarahkan ke beberapa instance service sesuai konfigurasi resolusi dan routing.

Model ini dapat digunakan pada service yang memiliki beberapa backend atau beberapa instance pada infrastructure berbeda.


Istio ServiceEntry dengan Wildcard Host

ServiceEntry dapat menggunakan wildcard host pada skenario tertentu.


hosts:
- "*.example.com"

Wildcard dapat mengurangi kebutuhan untuk membuat ServiceEntry terpisah untuk setiap subdomain.

Namun, wildcard perlu digunakan secara hati-hati karena cakupan destination menjadi lebih luas.

Pada versi Istio saat ini terdapat dukungan DYNAMIC_DNS untuk skenario wildcard tertentu, terutama ketika destination perlu direpresentasikan secara dinamis berdasarkan hostname. Fitur tersebut memiliki batasan penggunaan tertentu sehingga konfigurasi harus disesuaikan dengan mode proxy dan kebutuhan deployment. ([istio.io](https://istio.io/latest/docs/reference/config/networking/service-entry/))


Fungsi Istio ServiceEntry

  • Menambahkan external service ke service registry.
  • Mendaftarkan service yang tidak ditemukan secara otomatis.
  • Mendefinisikan hostname service.
  • Mendefinisikan port dan protocol.
  • Mengatur metode resolusi destination.
  • Mendefinisikan endpoint secara manual.
  • Mengintegrasikan workload VM dengan mesh.
  • Mendukung migrasi VM menuju Kubernetes.
  • Mendukung pengelolaan external API.
  • Mendukung traffic management terhadap external service.
  • Mendukung pengaturan egress traffic.
  • Mendukung integrasi dengan VirtualService.
  • Mendukung integrasi dengan DestinationRule.

Manfaat Istio ServiceEntry

  • External service menjadi lebih mudah dikelola.
  • Traffic menuju external destination dapat memperoleh visibility dari Istio.
  • Administrator dapat mendefinisikan destination secara deklaratif.
  • Mendukung kontrol egress yang lebih terstruktur.
  • Mendukung integrasi API eksternal.
  • Mendukung infrastructure hybrid.
  • Mendukung migrasi aplikasi legacy.
  • Dapat dikombinasikan dengan traffic policy.
  • Mendukung arsitektur microservices yang memiliki banyak external dependency.
  • Membantu membuat service discovery lebih konsisten.

Kelebihan Istio ServiceEntry

  • Terintegrasi langsung dengan Istio Service Mesh.
  • Mendukung external dan internal service.
  • Mendukung DNS resolution.
  • Mendukung static endpoint.
  • Dapat digunakan bersama VirtualService.
  • Dapat digunakan bersama DestinationRule.
  • Mendukung WorkloadEntry dan VM.
  • Mendukung migrasi VM ke Kubernetes.
  • Mendukung egress management.
  • Menggunakan konfigurasi deklaratif.

Kekurangan Istio ServiceEntry

  • Menambah jumlah konfigurasi yang harus dikelola.
  • Membutuhkan pemahaman mengenai service discovery.
  • Kesalahan hostname dapat menyebabkan request gagal.
  • Kesalahan port atau protocol dapat menyebabkan koneksi bermasalah.
  • Pengelolaan banyak external service dapat menjadi kompleks.
  • Wildcard yang terlalu luas dapat meningkatkan cakupan akses.
  • ServiceEntry sendiri bukan pengganti firewall atau network security.
  • Pengelolaan egress yang sangat ketat membutuhkan komponen tambahan seperti Egress Gateway.

Best Practice Istio ServiceEntry

  • Gunakan hostname yang spesifik.
  • Daftarkan hanya external service yang benar-benar dibutuhkan.
  • Gunakan DNS resolution untuk external hostname jika sesuai dengan kebutuhan.
  • Hindari penggunaan wildcard yang terlalu luas.
  • Gunakan REGISTRY_ONLY jika organisasi membutuhkan outbound control yang ketat.
  • Gunakan Egress Gateway untuk kebutuhan egress yang membutuhkan kontrol terpusat.
  • Atur exportTo sesuai kebutuhan namespace.
  • Dokumentasikan setiap ServiceEntry.
  • Monitor traffic menuju external dependency.
  • Uji konfigurasi sebelum diterapkan ke production.
  • Pastikan hostname pada ServiceEntry konsisten dengan VirtualService dan DestinationRule.
  • Perhatikan keamanan ketika menggunakan resolution NONE.

Troubleshooting Istio ServiceEntry

1. Service Tidak Dapat Diakses

Periksa hostname, port, protocol, dan resolution pada ServiceEntry.


kubectl get serviceentry

kubectl describe serviceentry external-api

2. DNS Tidak Berfungsi

Pastikan resolution menggunakan DNS apabila destination bergantung pada hostname.


resolution: DNS

3. Request Menghasilkan Connection Error

Periksa apakah destination dapat diakses dari jaringan cluster. Periksa firewall, routing, NetworkPolicy, security group, serta konfigurasi external service.

4. ServiceEntry Tidak Terlihat dari Namespace Lain

Periksa konfigurasi exportTo.


exportTo:
- "*"

Jika ServiceEntry hanya diekspor ke namespace tertentu, workload dari namespace lain mungkin tidak dapat menggunakan konfigurasi tersebut.

5. VirtualService Tidak Berfungsi

Pastikan hostname pada VirtualService sesuai dengan host pada ServiceEntry.

6. DestinationRule Tidak Diterapkan

Periksa kembali hostname destination dan pastikan DestinationRule merujuk pada service yang benar.

7. External Service Diblokir

Jika mesh menggunakan REGISTRY_ONLY, pastikan external destination sudah didaftarkan melalui ServiceEntry.

8. Traffic Masih Bisa Keluar ke Destination Lain

ServiceEntry bukan satu-satunya mekanisme keamanan egress. Periksa outboundTrafficPolicy, konfigurasi proxy, NetworkPolicy, firewall, dan apabila diperlukan gunakan Egress Gateway.


Monitoring Istio ServiceEntry

Salah satu manfaat penting ketika external service didaftarkan melalui ServiceEntry adalah traffic tersebut dapat memperoleh visibility dari Istio.


Application
     │
     ▼
Envoy Proxy
     │
     ├── Metrics
     ├── Access Logs
     └── Traffic Information
     │
     ▼
External Service

Tanpa ServiceEntry, external destination yang hanya dilewatkan secara passthrough tidak memperoleh pengelolaan destination yang sama seperti service yang telah terdaftar.

Karena itu, ServiceEntry dapat menjadi bagian penting dari strategi observability terhadap external dependency.


Istio ServiceEntry dan Keamanan

ServiceEntry membantu membuat external dependency lebih eksplisit, tetapi administrator tidak boleh menganggap ServiceEntry sebagai satu-satunya mekanisme keamanan.

Dalam arsitektur production, keamanan egress dapat melibatkan beberapa lapisan.


Application
     │
     ▼
Istio Proxy
     │
     ▼
ServiceEntry
     │
     ▼
Egress Gateway
     │
     ▼
Firewall
     │
     ▼
External Network

Pendekatan berlapis tersebut membantu mengurangi risiko aplikasi melakukan koneksi ke destination yang tidak diinginkan.

Dokumentasi Istio juga memberikan catatan bahwa kontrol egress yang lebih aman membutuhkan perhatian terhadap kemungkinan workload melewati sidecar proxy. Karena itu, desain egress sebaiknya mempertimbangkan gateway dan kontrol jaringan tambahan. ([istio.io](https://istio.io/latest/docs/tasks/traffic-management/egress/egress-control/))


Contoh Arsitektur Production


                    Internet
                       │
                       ▼
                External API
                       ▲
                       │
                Egress Gateway
                       ▲
                       │
                ServiceEntry
                       ▲
                       │
                Envoy Proxy
                       ▲
                       │
                Microservice
                       │
                       ▼
                Kubernetes

Pada model tersebut, ServiceEntry mendefinisikan destination eksternal, sedangkan Egress Gateway menyediakan jalur keluar yang dapat dikontrol secara terpusat.

Arsitektur ini dapat digunakan ketika organisasi membutuhkan visibility dan kontrol lebih besar terhadap external traffic.


Perbedaan ServiceEntry dengan Kubernetes Service

Aspek Kubernetes Service Istio ServiceEntry
Tujuan Expose service Kubernetes. Mendaftarkan service tambahan ke Istio.
External API Tidak menjadi fungsi utamanya. Sangat sesuai untuk external service.
VM Tidak dirancang khusus untuk ini. Dapat digunakan bersama WorkloadEntry.
Service Mesh Menjadi sumber service discovery Kubernetes. Memperluas registry Istio.
Egress Bukan fokus utama. Dapat digunakan untuk external egress.

Perbedaan ServiceEntry dan VirtualService

ServiceEntry VirtualService
Mendaftarkan service. Mengatur routing request.
Mendefinisikan hostname. Mendefinisikan aturan routing.
Mendefinisikan endpoint atau metode resolusi. Mengatur bagaimana traffic diarahkan.
Berhubungan dengan service registry. Berhubungan dengan traffic management.

Keduanya dapat digunakan bersama. ServiceEntry menjelaskan service yang ingin dikenali oleh mesh, sedangkan VirtualService dapat menentukan bagaimana traffic menuju service tersebut diproses.


FAQ Istio ServiceEntry

1. Apa itu Istio ServiceEntry?

Istio ServiceEntry adalah resource Istio yang digunakan untuk menambahkan service tambahan ke internal service registry Istio sehingga service tersebut dapat dikenali oleh proxy dan digunakan dalam konfigurasi service mesh.

2. Apakah ServiceEntry hanya untuk external service?

Tidak. ServiceEntry dapat digunakan untuk external service maupun service internal tertentu yang tidak ditemukan secara otomatis, termasuk workload VM.

3. Apa fungsi MESH_EXTERNAL?

MESH_EXTERNAL menunjukkan bahwa service berada di luar service mesh, misalnya external API atau layanan pihak ketiga.

4. Apa fungsi MESH_INTERNAL?

MESH_INTERNAL digunakan untuk service yang dianggap sebagai bagian dari mesh, termasuk workload yang diintegrasikan secara manual seperti VM.

5. Apa fungsi hosts?

Hosts menentukan hostname yang digunakan untuk mengidentifikasi service.

6. Apa fungsi resolution?

Resolution menentukan bagaimana proxy memperoleh alamat destination service, misalnya melalui DNS, endpoint statis, atau destination IP yang sudah ditentukan.

7. Kapan menggunakan DNS?

DNS cocok digunakan ketika service dapat ditemukan melalui hostname DNS, terutama untuk external API.

8. Apa itu REGISTRY_ONLY?

REGISTRY_ONLY adalah mode outbound traffic policy yang membatasi akses external destination hanya pada service yang dikenal atau terdaftar dalam service registry Istio.

9. Apakah ServiceEntry bisa digunakan bersama VirtualService?

Ya. ServiceEntry dapat mendefinisikan service, sedangkan VirtualService dapat digunakan untuk mengatur routing menuju service tersebut.

10. Apakah ServiceEntry bisa digunakan bersama DestinationRule?

Ya. DestinationRule dapat digunakan untuk menerapkan traffic policy terhadap destination yang didefinisikan melalui ServiceEntry.

11. Apakah ServiceEntry bisa digunakan untuk API pihak ketiga?

Ya. External API merupakan salah satu penggunaan utama ServiceEntry.

12. Apakah ServiceEntry bisa digunakan untuk VM?

Ya. ServiceEntry dapat digunakan bersama WorkloadEntry dan workloadSelector untuk mengintegrasikan workload VM dengan service mesh.

13. Apakah ServiceEntry wajib untuk semua external service?

Tidak selalu. Dalam konfigurasi default tertentu, Istio dapat melakukan passthrough terhadap external destination yang belum terdaftar. Namun, jika administrator ingin memperoleh kontrol dan pengelolaan Istio terhadap destination tersebut, ServiceEntry menjadi pendekatan yang penting. ([istio.io](https://istio.io/latest/docs/concepts/traffic-management/))

14. Apakah ServiceEntry meningkatkan keamanan?

ServiceEntry membantu membuat external dependency lebih eksplisit dan dapat dikelola oleh service mesh. Namun, keamanan egress secara menyeluruh tetap membutuhkan policy, gateway, firewall, dan kontrol jaringan yang sesuai.


Baca Juga


Artikel Selanjutnya

Setelah memahami Istio ServiceEntry, pembahasan berikutnya dapat dilanjutkan ke Istio Egress Gateway.

Istio Egress Gateway akan membahas bagaimana traffic yang keluar dari service mesh dapat diarahkan melalui gateway khusus sebelum diteruskan menuju external network.


Microservice
     │
     ▼
Istio Proxy
     │
     ▼
ServiceEntry
     │
     ▼
Egress Gateway
     │
     ▼
External Network
     │
     ▼
External Service


Kesimpulan

Istio ServiceEntry merupakan salah satu resource penting dalam Istio Service Mesh yang digunakan untuk menambahkan service tambahan ke dalam internal service registry Istio.

Service tersebut dapat berupa external API, layanan cloud, database eksternal, sistem legacy, virtual machine, maupun workload lain yang tidak ditemukan secara otomatis oleh service registry platform.

ServiceEntry memungkinkan administrator menentukan berbagai informasi penting seperti hosts, ports, location, resolution, endpoints, workloadSelector, exportTo, dan subjectAltNames.

Dengan ServiceEntry, external destination dapat dikelola lebih terstruktur dan dikombinasikan dengan fitur Istio seperti VirtualService dan DestinationRule. Hal tersebut memungkinkan administrator menerapkan routing dan traffic policy terhadap service yang berada di luar cluster maupun service mesh.

ServiceEntry juga memiliki peranan penting dalam pengelolaan egress traffic. Dalam mode REGISTRY_ONLY, external service yang ingin diakses harus dikenal oleh service registry, sehingga ServiceEntry dapat menjadi bagian dari strategi pengendalian outbound traffic.

Selain external service, ServiceEntry dapat digunakan bersama WorkloadEntry dan workloadSelector untuk mengintegrasikan workload VM dengan Kubernetes. Kemampuan tersebut memungkinkan organisasi melakukan migrasi aplikasi secara bertahap tanpa harus mengubah identitas service yang digunakan oleh consumer.

Namun, ServiceEntry bukan satu-satunya komponen keamanan. Untuk kebutuhan production dengan kontrol egress yang lebih ketat, administrator dapat mengombinasikannya dengan Egress Gateway, firewall, NetworkPolicy, serta kontrol jaringan lainnya.

Dengan memahami Istio ServiceEntry, kita telah memahami bagaimana Istio dapat mengenali dan mengelola service yang berada di luar mekanisme service discovery otomatis. Konsep ini menjadi dasar penting sebelum mempelajari bagaimana traffic tersebut dapat diarahkan melalui Istio Egress Gateway.

Postingan populer dari blog ini

Istio Egress Gateway: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya | Dewa234

Istio VirtualService: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya | Dewa234

Istio Ingress Gateway: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya | Dewa234