Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Gerencie recursos do Istio com o SDK para Java

Última atualização: Jun 28, 2026

Ao gerenciar recursos do Istio, como VirtualServices e Gateways, em vários clusters, a aplicação manual de arquivos YAML via kubectl torna-se repetitiva e propensa a erros. O SDK fabric8io/istio-client permite criar, consultar, atualizar e excluir recursos do Istio diretamente no código Java, possibilitando a automação dessas operações em seus pipelines de implantação.

Este guia aborda a criação de um VirtualService e um Gateway no Alibaba Cloud Service Mesh (ASM) usando istio-client 6.0.0-RC1 com Java 11.

Início rápido

O exemplo a seguir cria um VirtualService no namespace default carregando um arquivo YAML. A conexão com o plano de controle do ASM ocorre por meio do kubeconfig padrão localizado em $HOME/.kube/config.

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

public class QuickStartExample {
    public static void main(String[] args) {
        try {
            IstioClient istioClient = new DefaultIstioClient();
            VirtualService vs = istioClient.v1beta1().virtualServices()
                .load(QuickStartExample.class.getResourceAsStream("/virtualService.yaml"))
                .get();
            istioClient.v1beta1().virtualServices()
                .inNamespace("default")
                .resource(vs)
                .create();
            System.out.println("VirtualService created successfully.");
            istioClient.close();
        } catch (Exception e) {
            System.err.println("Failed to create VirtualService: " + e.getMessage());
            System.exit(1);
        }
    }
}

Para obter os arquivos YAML utilizados nestes exemplos, consulte Usar o SDK do ASM para gerenciar recursos do Istio em código.

Pré-requisitos

Antes de começar, verifique se você possui:

Configure seu projeto

Adicione a dependência do SDK

Adicione a dependência istio-client ao seu arquivo Maven pom.xml:

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

Conecte-se à instância do ASM

O SDK istio-client lê seu kubeconfig para estabelecer conexão com o plano de controle do ASM. Copie o kubeconfig do console do ASM para sua máquina local:

  1. Faça login no console do ASM.

  2. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  3. Na página Mesh Management, localize sua instância do ASM e clique no nome dela ou clique em Manage na coluna Actions.

  4. No painel de navegação à esquerda, clique em Base Information. Na página Basic Information, clique em Connection.

  5. No painel Connection, copie o conteúdo do kubeconfig do sistema para $HOME/.kube/config na sua máquina.

Por padrão, o SDK lê automaticamente o arquivo $HOME/.kube/config. Para utilizar um arquivo kubeconfig diferente, consulte Conectar com um kubeconfig personalizado.

Prepare os arquivos de configuração YAML

Salve os arquivos virtualService.yaml e gateway.yaml, disponíveis em Usar o SDK do ASM para gerenciar recursos do Istio em código, na pasta de recursos estáticos do Maven (src/main/resources) do seu projeto.

Crie um VirtualService

É possível criar recursos do Istio carregando um arquivo YAML ou construindo o recurso programaticamente com encadeamento de métodos.

Carregue a partir de um arquivo YAML

O exemplo abaixo carrega o arquivo virtualService.yaml da pasta de recursos do projeto e cria o VirtualService no namespace default:

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) {
        try {
            IstioClient istioClient = new DefaultIstioClient();
            final String NAMESPACE = "default"; // Target namespace for the resource
            VirtualService virtualService = istioClient.v1beta1().virtualServices().load(
                VirtualServiceExample.class.getResourceAsStream("/virtualService.yaml")
                ).get();
            istioClient.v1beta1().virtualServices().inNamespace(NAMESPACE).resource(virtualService).create();
            printAllVirtualServices(istioClient);
            istioClient.close();
        } catch (Exception e) {
            System.err.println("Failed to create VirtualService: " + e.getMessage());
            System.exit(1);
        }
    }

    // List all virtual services in the ASM instance
    static void printAllVirtualServices(IstioClient istioClient) {
        istioClient.v1beta1().virtualServices().list().getItems().forEach(System.out::println);
    }
}

Construa com encadeamento de métodos

Utilize o VirtualServiceBuilder para construir o recurso via código em vez de carregar um YAML. O exemplo a seguir cria um VirtualService para o Bookinfo que roteia o tráfego do bookinfo-gateway para o serviço productpage na porta 9080.

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) {
        try {
            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();
        } catch (Exception e) {
            System.err.println("Failed to create VirtualService: " + e.getMessage());
            System.exit(1);
        }
    }

    // List all virtual services in the ASM instance
    static void printAllVirtualServices(IstioClient istioClient) {
        istioClient.v1beta1().virtualServices().list().getItems().forEach(System.out::println);
    }
}

Mapeamento entre Builder e YAML

Os métodos do builder correspondem diretamente aos campos YAML do VirtualService. A tabela a seguir apresenta o mapeamento para os campos mais comuns:

Método do Builder

Equivalente YAML

Descrição

.withName("bookinfo")

metadata.name: bookinfo

Nome do recurso

.addToHosts("*")

spec.hosts: ["*"]

Hosts de destino para o tráfego

.addToGateways("bookinfo-gateway")

spec.gateways: ["bookinfo-gateway"]

Gateway a ser vinculado

.withNewStringMatchExactType("/productpage")

match.uri.exact: "/productpage"

Correspondência exata de URI

.withNewStringMatchPrefixType("/static")

match.uri.prefix: "/static"

Correspondência de prefixo de URI

.withHost("productpage").withNewPort().withNumber(9080)

destination.host: productpage, destination.port.number: 9080

Destino da rota

Para a especificação completa do VirtualService, consulte a referência da API VirtualService do Istio.

Crie um Gateway

O exemplo a seguir cria um Gateway no namespace default a partir do arquivo gateway.yaml. Ele também demonstra como se conectar usando um arquivo kubeconfig personalizado em vez do padrão $HOME/.kube/config:

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) {
        try {
            // Read a custom kubeconfig file
            String kubeconfigContents = null;
            FileReader reader = new FileReader("<path-to-kubeconfig>"); // Replace with the actual path
            kubeconfigContents = IOHelpers.readFully(reader);
            Config config = Config.fromKubeconfig(null, kubeconfigContents, null);

            IstioClient istioClient = new DefaultIstioClient(config);
            final String NAMESPACE = "default"; // Target namespace for the resource
            Gateway gateway = istioClient.v1beta1().gateways().load(
                GateWayExample.class.getResourceAsStream("/gateway.yaml")
            ).get();
            istioClient.v1beta1().gateways().inNamespace(NAMESPACE).resource(gateway).create();
            printAllGateways(istioClient);
            istioClient.close();
        } catch (Exception e) {
            System.err.println("Failed to create Gateway: " + e.getMessage());
            System.exit(1);
        }
    }

    // List all gateways in the ASM instance
    static void printAllGateways(IstioClient istioClient) {
        istioClient.v1beta1().gateways().list().getItems().forEach(System.out::println);
    }
}

Substitua o placeholder a seguir pelo seu valor real:

Placeholder

Descrição

Exemplo

<path-to-kubeconfig>

Caminho absoluto para o seu arquivo kubeconfig

/home/user/.kube/asm-config

Operações comuns do SDK

Além da criação de recursos, o SDK istio-client suporta uma ampla gama de operações. A tabela a seguir lista as operações mais comuns para VirtualService. O mesmo padrão se aplica a Gateway e outros tipos de recursos do Istio.

Operação

Código

Criar

istioClient.v1beta1().virtualServices().inNamespace(ns).resource(vs).create()

Obter por nome

istioClient.v1beta1().virtualServices().inNamespace(ns).withName("bookinfo").get()

Listar todos

istioClient.v1beta1().virtualServices().inNamespace(ns).list()

Atualizar

istioClient.v1beta1().virtualServices().inNamespace(ns).resource(vs).update()

Excluir

istioClient.v1beta1().virtualServices().inNamespace(ns).withName("bookinfo").delete()

Verifique o resultado

Após criar o VirtualService e o Gateway, abra um navegador e acesse http://<ingress-gateway-ip>/productpage para acessar a aplicação Bookinfo. Substitua <ingress-gateway-ip> pelo endereço IP do seu serviço de gateway de entrada.

Referências