Setelah mengintegrasikan SDK untuk bahasa pemrograman, Anda dapat mengelola sumber daya Istio dalam kode. Topik ini menjelaskan cara menggunakan Service Mesh (ASM) SDK untuk Java versi fabric8io/istio-client 6.0.0-RC1 untuk mengelola sumber daya Istio di Java 11.
Prasyarat
Sebuah instance ASM telah dibuat. Untuk informasi lebih lanjut, lihat Buat Instance ASM.
Sebuah kluster Container Service for Kubernetes (ACK) telah ditambahkan ke instance ASM Anda. Untuk informasi lebih lanjut, lihat Tambahkan Kluster ke Instance ASM.
Aplikasi Bookinfo telah diterapkan di kluster ACK yang ditambahkan ke instance ASM Anda. Untuk informasi lebih lanjut, lihat Terapkan Aplikasi di Instance ASM.
Sebuah layanan gateway masuk telah diterapkan di kluster ACK yang ditambahkan ke instance ASM Anda. Untuk informasi lebih lanjut, lihat Buat Layanan Gateway Masuk.
Persiapan
Install dependencies
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>Configure a connection
Masuk ke Konsol ASM.
Di panel navigasi sebelah kiri, pilih .
Pada halaman Mesh Management, temukan instance ASM yang ingin dikonfigurasi. Klik nama instance ASM tersebut atau klik Manage di kolom Actions.
Pada halaman detail instance ASM, klik Base Information di panel navigasi sebelah kiri. Pada halaman Informasi Dasar, klik Connection.
Di panel Connection, salin isi file kubeconfig sistem ke direktori $HOME/.kube/config pada mesin Anda.
CatatanSecara default, file kubeconfig sistem digunakan untuk mengonfigurasi koneksi. Untuk informasi lebih lanjut tentang cara menggunakan file kubeconfig tertentu, lihat bagian Buat Gateway Istio dari topik ini.
Generate configuration files
Simpan file virtualService.yaml dan gateway.yaml yang dibuat di Gunakan SDK ASM untuk Mengelola Sumber Daya Istio dalam Kode ke folder sumber daya statis proyek Anda.
Secara default, folder sumber daya statis berada di direktori src/main/resources proyek Maven.
Buat layanan virtual
Jika Anda menggunakan istio-client untuk membuat sumber daya Istio di Java, Anda dapat menggunakan file YAML atau penggabungan metode. Untuk membuat layanan virtual, gunakan salah satu metode berikut:
Method 1: Use a YAML file to create a virtual service
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 Anda ingin membuat sumber daya.
VirtualService virtualService = istioClient.v1beta1().virtualServices().load(
VirtualServiceExample.class.getResourceAsStream("/virtualService.yaml")
).get();
istioClient.v1beta1().virtualServices().inNamespace(NAMESPACE).resource(virtualService).create();
printAllVirtualServices(istioClient);
istioClient.close();
}
// Tampilkan semua layanan virtual di instance ASM.
static void printAllVirtualServices(IstioClient istioClient) {
istioClient.v1beta1().virtualServices().list().getItems().forEach(System.out::println);
}
}Method 2: Use method chaining to create a virtual service
Anda dapat menggunakan kemampuan penggabungan metode dari istio-client untuk membuat layanan virtual dengan menjalankan 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();
}
// Tampilkan semua layanan virtual di instance ASM.
static void printAllVirtualServices(IstioClient istioClient) {
istioClient.v1beta1().virtualServices().list().getItems().forEach(System.out::println);
}
}Buat gateway Istio
Setelah menggunakan file kubeconfig tertentu untuk mengonfigurasi koneksi, Anda dapat membuat gateway Istio di namespace default menggunakan file gateway.yaml. Dalam contoh ini, file YAML digunakan untuk membuat gateway Istio. Untuk informasi lebih lanjut tentang cara menggunakan penggabungan metode, lihat bagian Metode 2: Gunakan Penggabungan Metode untuk Membuat Layanan Virtual dari topik ini.
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 kubeconfig tertentu untuk mengonfigurasi koneksi.
String kubeconfigContents = null;
FileReader reader = new FileReader("{path to kube config file}"); // Ganti isi {} dengan path file kubeconfig yang ingin Anda gunakan.
kubeconfigContents = IOHelpers.readFully(reader);
Config config = Config.fromKubeconfig(null, kubeconfigContents, null);
IstioClient istioClient = new DefaultIstioClient(config);
final String NAMESPACE = "default"; // Namespace tempat Anda ingin membuat sumber daya.
Gateway gateway = istioClient.v1beta1().gateways().load(
GateWayExample.class.getResourceAsStream("/gateway.yaml")
).get();
istioClient.v1beta1().gateways().inNamespace(NAMESPACE).resource(gateway).create();
printAllGateways(istioClient);
istioClient.close();
}
// Tampilkan semua gateway di instance ASM.
static void printAllGateways(IstioClient istioClient) {
istioClient.v1beta1().gateways().list().getItems().forEach(System.out::println);
}
}Apa yang harus dilakukan selanjutnya
Setelah layanan virtual dan gateway Istio dibuat, Anda dapat mengunjungi http://{alamat IP layanan gateway masuk}/productpage di browser untuk mengakses aplikasi Bookinfo.