All Products
Search
Document Center

Alibaba Cloud Service Mesh:Manage Istio resources with the Java SDK

Last Updated:Aug 28, 2026

Dengan mengintegrasikan client SDK khusus bahasa pemrograman ke dalam aplikasi Anda, Anda dapat mengelola resource Istio langsung dari kode. Topik ini menggunakan Java 11 dan SDK fabric8io/istio-client versi 6.0.0-RC1 untuk menunjukkan cara membuat dan mengelola resource Istio secara terprogram.

Prasyarat

Persiapan

Install dependensi

Tambahkan dependensi berikut ke file konfigurasi Maven pom.xml.

<dependencies>
  <dependency>
    <groupId>io.fabric8</groupId>
    <artifactId>istio-client</artifactId>
    <version>6.0.0-RC1</version>
  </dependency>
</dependencies>

Konfigurasikan koneksi

  1. Masuk ke ASM console.

  2. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.

  3. Pada halaman Mesh Management, temukan instans ASM yang ingin Anda konfigurasi. Klik nama instans tersebut atau klik Manage di kolom Actions.

  4. Di panel navigasi sebelah kiri pada halaman detail instans, klik Base Information, lalu klik Connection di sisi kanan halaman.

  5. Di panel Connection, salin isi file ke path $HOME/.kube/config.

Catatan

Secara default, koneksi menggunakan file kubeconfig sistem, yang sesuai dengan new DefaultIstioClient() pada contoh kode. Untuk menggunakan file kubeconfig tertentu, inisialisasi client dengan Config.fromKubeconfig, seperti yang ditunjukkan di Create a gateway rule.

Buat file konfigurasi

Simpan file virtualService.yaml dan gateway.yaml yang Anda buat di halaman Manage Istio resources programmatically ke folder resource statis proyek Anda.

Catatan

Untuk proyek Maven, folder default-nya adalah src/main/resources.

Create a virtual service

Saat menggunakan Java istio-client untuk membuat resource Istio, Anda dapat memilih antara dua pendekatan. Kedua pendekatan ini berlaku untuk semua jenis resource Istio.

  • File YAML — Muat definisi resource dari file .yaml. Gunakan pendekatan ini untuk memisahkan definisi resource dari kode atau untuk menggunakan kembali manifes yang sudah ada.

  • Method chaining — Bangun resource sepenuhnya dalam kode. Gunakan pendekatan ini jika Anda ingin menyusun resource secara terprogram.

    Contoh berikut membuat layanan virtual dengan masing-masing pendekatan.

Metode 1: Buat layanan virtual menggunakan file YAML

Contoh berikut memuat definisi resource dari virtualService.yaml dan membuat layanan virtual:

import java.io.FileReader;
import java.io.IOException;

import io.fabric8.istio.api.networking.v1beta1.VirtualService;
import io.fabric8.istio.client.DefaultIstioClient;
import io.fabric8.istio.client.IstioClient;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.utils.IOHelpers;

public class VirtualServiceExample {
    public static void main( String[] args ) {
        IstioClient istioClient = new DefaultIstioClient();
        final String NAMESPACE = "default"; // Namespace tempat resource dibuat.
        VirtualService virtualService = istioClient.v1beta1().virtualServices().load(
            VirtualServiceExample.class.getResourceAsStream("/virtualService.yaml")
            ).get();
        istioClient.v1beta1().virtualServices().inNamespace(NAMESPACE).resource(virtualService).create();
        printAllVirtualServices(istioClient);
        istioClient.close();
    }

    // Cetak semua VirtualService dalam mesh.
    static void printAllVirtualServices(IstioClient istioClient) {
        istioClient.v1beta1().virtualServices().list().getItems().forEach(System.out::println);
    }
}

Metode printAllVirtualServices mencetak semua layanan virtual dalam mesh. Pastikan layanan virtual yang Anda buat muncul dalam output.

Metode 2: Buat layanan virtual menggunakan method chaining

istio-client mendukung method chaining, yang memungkinkan Anda membuat layanan virtual sepenuhnya dalam kode.

import io.fabric8.istio.api.networking.v1beta1.VirtualServiceBuilder;
import io.fabric8.istio.client.DefaultIstioClient;
import io.fabric8.istio.client.IstioClient;

public class VirtualServiceChainingExample {
    public static void main(String[] args) {
        IstioClient istioClient = new DefaultIstioClient();
        final String NAMESPACE = "default";
        istioClient.v1beta1().virtualServices().inNamespace(NAMESPACE).resource(
            new VirtualServiceBuilder()
            .withNewMetadata()
            .withName("bookinfo")
            .endMetadata()
            .withNewSpec()
                .addToHosts("*")
                .addToGateways("bookinfo-gateway")
                .addNewHttp()
                    .addNewMatch().withNewUri().withNewStringMatchExactType("/productpage").endUri().endMatch()
                    .addNewMatch().withNewUri().withNewStringMatchPrefixType("/static").endUri().endMatch()
                    .addNewMatch().withNewUri().withNewStringMatchExactType("/login").endUri().endMatch()
                    .addNewMatch().withNewUri().withNewStringMatchExactType("/logout").endUri().endMatch()
                    .addNewMatch().withNewUri().withNewStringMatchPrefixType("/api/v1/products").endUri().endMatch()
                    .addNewRoute()
                        .withNewDestination()
                            .withHost("productpage")
                            .withNewPort()
                                .withNumber(9080)
                            .endPort()
                        .endDestination()
                    .endRoute()
                .endHttp()
            .endSpec()
            .build()
            ).create();
        printAllVirtualServices(istioClient);
        istioClient.close();
    }

    // Cetak semua VirtualService dalam mesh.
    static void printAllVirtualServices(IstioClient istioClient) {
        istioClient.v1beta1().virtualServices().list().getItems().forEach(System.out::println);
    }
}

Metode printAllVirtualServices mencetak semua layanan virtual dalam mesh. Pastikan layanan virtual bookinfo muncul dalam output.

Create a gateway rule

Contoh ini terhubung dengan file kubeconfig tertentu, seperti yang dijelaskan di bagian Konfigurasikan koneksi, dan membuat aturan gerbang yang didefinisikan dalam gateway.yaml di namespace default. Contoh ini membuat aturan gerbang dari file YAML, sedangkan Metode 2: Buat layanan virtual menggunakan method chaining menunjukkan pendekatan method chaining yang setara.

import java.io.FileReader;
import java.io.IOException;

import io.fabric8.istio.api.networking.v1beta1.Gateway;
import io.fabric8.istio.client.DefaultIstioClient;
import io.fabric8.istio.client.IstioClient;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.utils.IOHelpers;

public class GateWayExample {
    public static void main(String[] args) throws IOException {
        // Baca file konfigurasi koneksi kubeconfig.
        String kubeconfigContents = null;
        FileReader reader = new FileReader("{path to kube config file}"); // Ganti isi dalam {} dengan path aktual ke file kubeconfig.
        kubeconfigContents = IOHelpers.readFully(reader);
        Config config = Config.fromKubeconfig(null, kubeconfigContents, null);

        IstioClient istioClient = new DefaultIstioClient(config);
        final String NAMESPACE = "default"; // Namespace tempat resource dibuat.
        Gateway gateway = istioClient.v1beta1().gateways().load(
            GateWayExample.class.getResourceAsStream("/gateway.yaml")
        ).get();
        istioClient.v1beta1().gateways().inNamespace(NAMESPACE).resource(gateway).create();
        printAllGateways(istioClient);
        istioClient.close();
    }

    // Cetak semua Gateway dalam mesh.
    static void printAllGateways(IstioClient istioClient) {
        istioClient.v1beta1().gateways().list().getItems().forEach(System.out::println);
    }
}

Metode printAllGateways mencetak semua gerbang dalam mesh. Pastikan aturan gerbang yang Anda buat muncul dalam output.

Akses aplikasi Bookinfo

Setelah Anda membuat layanan virtual dan aturan gerbang, buka http://{alamat IP layanan ingress gateway}/productpage di browser Anda untuk melihat aplikasi Bookinfo.