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

Alibaba Cloud Service Mesh:Java 用 SDK を使用して Istio リソースを管理する

最終更新日:Jan 13, 2025

プログラミング言語用 SDK を統合した後、コード内で Istio リソースを管理できます。このトピックでは、バージョン fabric8io/istio-client 6.0.0-RC1 の Java 用 Service Mesh (ASM) SDK を使用して、Java 11 で 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. ASM インスタンスの詳細ページで、左側のナビゲーションペインの [基本情報] をクリックします。[基本情報] ページで、[接続] をクリックします。

  5. [接続] パネルで、システム kubeconfig ファイルの内容をマシンの $HOME/.kube/config ディレクトリにコピーします。

    説明

    デフォルトでは、システム kubeconfig ファイルを使用して接続が設定されます。特定の kubeconfig ファイルを使用する方法の詳細については、このトピックの「Istio ゲートウェイの作成」セクションをご参照ください。

構成ファイルの生成

ASM SDK を使用してコード内で Istio リソースを管理する で作成された virtualService.yaml ファイルと gateway.yaml ファイルをプロジェクトの静的リソースフォルダに保存します。

説明

デフォルトでは、静的リソースフォルダは Maven プロジェクトの src/main/resources ディレクトリにあります。

仮想サービスの作成

istio-client を使用して Java で Istio リソースを作成する場合、YAML ファイルまたはメソッドチェーンを使用できます。仮想サービスを作成するには、次のいずれかの方法を使用できます。

方法 1: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();
    }


    // ASM インスタンス内のすべての仮想サービスを表示します。
    static void printAllVirtualServices(IstioClient istioClient) {
        istioClient.v1beta1().virtualServices().list().getItems().forEach(System.out::println);
    }
}

方法 2:メソッドチェーンを使用して仮想サービスを作成する

istio-client のメソッドチェーン機能を使用して、コードを実行することで仮想サービスを作成できます。

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

    // ASM インスタンス内のすべての仮想サービスを表示します。
    static void printAllVirtualServices(IstioClient istioClient) {
        istioClient.v1beta1().virtualServices().list().getItems().forEach(System.out::println);
    }
}

Istio ゲートウェイの作成

特定の kubeconfig ファイルを使用して接続を設定した後、gateway.yaml ファイルを使用して、デフォルトの名前空間に Istio ゲートウェイを作成できます。この例では、YAML ファイルを使用して Istio ゲートウェイを作成します。メソッドチェーンの使用方法の詳細については、このトピックの「方法 2:メソッドチェーンを使用して仮想サービスを作成する」セクションをご参照ください。

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("{kube 構成ファイルへのパス}"); // {} の内容を使用する 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();
    }

    // ASM インスタンス内のすべてのゲートウェイを表示します。
    static void printAllGateways(IstioClient istioClient) {
        istioClient.v1beta1().gateways().list().getItems().forEach(System.out::println);
    }
}

次のステップ

仮想サービスと Istio ゲートウェイを作成した後、ブラウザで http://{イングレスゲートウェイサービスの IP アドレス}/productpage にアクセスして、Bookinfo アプリケーションにアクセスできます。