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
-
Instans ASM telah dibuat. Untuk informasi selengkapnya, lihat Create an ASM instance.
-
Kluster ACK telah ditambahkan ke instans ASM. Untuk informasi selengkapnya, lihat Add a cluster to an ASM instance.
-
Aplikasi contoh Bookinfo telah dideploy ke kluster ACK dari instans ASM. Untuk informasi selengkapnya, lihat Deploy an application in a cluster associated with an ASM instance.
-
Gerbang masuk (ingress gateway) telah dideploy di kluster ACK dari instans ASM. Untuk informasi selengkapnya, lihat Create an ingress gateway.
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
-
Masuk ke ASM console.
-
Di panel navigasi sebelah kiri, pilih .
-
Pada halaman Mesh Management, temukan instans ASM yang ingin Anda konfigurasi. Klik nama instans tersebut atau klik Manage di kolom Actions.
-
Di panel navigasi sebelah kiri pada halaman detail instans, klik Base Information, lalu klik Connection di sisi kanan halaman.
-
Di panel Connection, salin isi file ke path $HOME/.kube/config.
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.
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.