すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:Java SDK を使用した Istio リソースの管理

最終更新日:Aug 28, 2026

言語固有の SDK クライアントをアプリケーションに統合することで、コード内で直接 Istio リソースを管理できます。このトピックでは、Java 11 と fabric8io/istio-client 6.0.0-RC1 SDK を使用して、プログラムで Istio リソースを作成および管理する方法を説明します。

前提条件

事前準備

依存関係のインストール

Maven 設定ファイル pom.xml に次の依存関係を追加します。

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

接続の構成

  1. ASM コンソール にログオンします。

  2. 左側のナビゲーションウィンドウで、[サービスメッシュ] > [メッシュ管理] を選択します。

  3. [メッシュ管理] ページで、構成する ASM インスタンスを見つけます。[管理] 列で ASM インスタンスの名前をクリックするか、[アクション] をクリックします。

  4. インスタンス詳細ページの左側メニューで 基本情報 をクリックし、ページの右側にある 接続設定 をクリックします。

  5. 接続設定 パネルで、ファイルの内容を $HOME/.kube/config にコピーします。

説明

デフォルトでは、接続にシステム kubeconfig ファイルが使用されます。これは、コード例の new DefaultIstioClient() に対応します。特定の kubeconfig ファイルを使用するには、ゲートウェイルールの作成で示されているように、Config.fromKubeconfig でクライアントを初期化します。

設定ファイルの生成

プログラムによる Istio リソースの管理のページで作成した virtualService.yaml と gateway.yaml ファイルをプロジェクトの静的リソースフォルダーに保存します。

説明

Maven プロジェクトの場合、デフォルトのフォルダーは src/main/resources です。

VirtualService の作成

Java istio-client を使用して Istio リソースを作成する場合、2 つのアプローチから選択できます。どちらのアプローチも、あらゆる Istio リソースタイプに適用できます。

  • YAML ファイル — .yaml ファイルからリソース定義を読み込みます。 この方法は、リソース定義をコードから分離して保持したり、既存のマニフェストを再利用したりする場合に使用します。

  • メソッドチェーン: コード内でリソースを完全にビルドします。このアプローチは、プログラムでリソースを構築する場合に使用します。以下の例では、それぞれのアプローチで VirtualService を作成します。

方法1:YAML ファイルを使用した VirtualService の作成

次の例では、virtualService.yaml からリソース定義を読み込み、仮想サービスを作成します:

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"; // リソースが作成される名前空間。
        VirtualService virtualService = istioClient.v1beta1().virtualServices().load(
            VirtualServiceExample.class.getResourceAsStream("/virtualService.yaml")
            ).get();
        istioClient.v1beta1().virtualServices().inNamespace(NAMESPACE).resource(virtualService).create();
        printAllVirtualServices(istioClient);
        istioClient.close();
    }

    // メッシュ内のすべての VirtualService を出力します。
    static void printAllVirtualServices(IstioClient istioClient) {
        istioClient.v1beta1().virtualServices().list().getItems().forEach(System.out::println);
    }
}

printAllVirtualServices メソッドは、メッシュ内のすべての仮想サービスを出力します。作成した仮想サービスが出力に表示されることを確認してください。

方法2:メソッドチェーンを使用した VirtualService の作成

istio-client はメソッドチェーンをサポートしており、コード内で完全に VirtualService を作成できます。

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();
    }

    // メッシュ内のすべての VirtualService を出力します。
    static void printAllVirtualServices(IstioClient istioClient) {
        istioClient.v1beta1().virtualServices().list().getItems().forEach(System.out::println);
    }
}

printAllVirtualServices メソッドは、メッシュ内のすべての仮想サービスを出力します。bookinfo 仮想サービスが出力に表示されることを確認してください。

Gateway の作成

この例では、「接続の構成」で説明されているように、特定の kubeconfig ファイルを使用して接続し、デフォルトの名前空間に gateway.yaml で定義されている Gateway を作成します。この例では YAML ファイルから Gateway を作成しますが、「方法2:メソッドチェーンを使用した VirtualService の作成」に、同等のメソッドチェーンによるアプローチが示されています。

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 {
        // kubeconfig 接続設定ファイルを読み取ります。
        String kubeconfigContents = null;
        FileReader reader = new FileReader("{path to kube config file}"); // {} 内のコンテンツを kubeconfig ファイルへの実際のパスに置き換えます。
        kubeconfigContents = IOHelpers.readFully(reader);
        Config config = Config.fromKubeconfig(null, kubeconfigContents, null);

        IstioClient istioClient = new DefaultIstioClient(config);
        final String NAMESPACE = "default"; // リソースが作成される名前空間。
        Gateway gateway = istioClient.v1beta1().gateways().load(
            GateWayExample.class.getResourceAsStream("/gateway.yaml")
        ).get();
        istioClient.v1beta1().gateways().inNamespace(NAMESPACE).resource(gateway).create();
        printAllGateways(istioClient);
        istioClient.close();
    }

    // メッシュ内のすべての Gateway を出力します。
    static void printAllGateways(IstioClient istioClient) {
        istioClient.v1beta1().gateways().list().getItems().forEach(System.out::println);
    }
}

printAllGateways メソッドは、メッシュ内のすべてのゲートウェイを出力します。作成したゲートウェイルールが出力に表示されることを確認してください。

Bookinfo アプリケーションへのアクセス

VirtualService と Gateway を作成した後、ブラウザで http://{イングレスゲートウェイサービスの IP アドレス}/productpage を開き、Bookinfo アプリケーションを表示します。