Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Access a WebSocket service through an ingress gateway

Última atualização: Jun 28, 2026

Este tópico descreve como acessar um serviço WebSocket na malha por meio de um gateway de entrada do ASM.

Pré-requisitos

Etapa 1: Implante o aplicativo de exemplo

  1. Conecte-se ao cluster usando kubectl. Para obter mais informações, consulte Obter o arquivo kubeconfig de um cluster e usar kubectl para se conectar ao cluster.

  2. Crie um arquivo YAML chamado tornado.yaml com o seguinte conteúdo.

    apiVersion: v1
    kind: Service
    metadata:
      name: tornado
      labels:
        app: tornado
        service: tornado
    spec:
      ports:
      - port: 8888
        name: http
      selector:
        app: tornado
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tornado
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: tornado
          version: v1
      template:
        metadata:
          labels:
            app: tornado
            version: v1
        spec:
          containers:
          - name: tornado
            image: registry.cn-beijing.aliyuncs.com/aliacs-app-catalog/tornado:lastest
            imagePullPolicy: Always
            ports:
            - containerPort: 8888
    ---
  3. Execute o comando a seguir para criar o aplicativo tornado.

    kubectl apply -f tornado.yaml

Etapa 2: Configure as regras de roteamento

  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 a instância do ASM que você deseja configurar. Clique em no nome da instância do ASM ou em Manage na coluna Actions.

  4. Crie um Gateway.

    1. Na página de detalhes da instância do ASM, escolha ASM Gateways > Gateway no painel de navegação à esquerda. Na página exibida, clique em Create from YAML.

    2. Defina Namespaces como default, cole o conteúdo a seguir e clique em Create.

      apiVersion: networking.istio.io/v1alpha3
      kind: Gateway
      metadata:
        name: tornado-gateway
      spec:
        selector:
          istio: ingressgateway
        servers:
        - port:
            number: 80
            name: http
            protocol: HTTP
          hosts:
          - "*"

      Definir number como 80 permite que o serviço WebSocket aceite conexões HTTP ou TCP de entrada ou saída na porta 80.

  5. Crie um VirtualService.

    1. Na página de detalhes da instância do ASM, escolha Traffic Management Center > VirtualService no painel de navegação à esquerda. Na página exibida, clique em Create from YAML.

    2. Defina Namespaces como default, cole o conteúdo a seguir e clique em Create.

      apiVersion: networking.istio.io/v1alpha3
      kind: VirtualService
      metadata:
        name: tornado
      spec:
        hosts:
        - "*"
        gateways:
        - tornado-gateway
        http:
        - match:
          - uri:
              prefix: /
          route:
          - destination:
              host: tornado
            weight: 100

      Definir hosts como * permite que qualquer solicitação acesse o serviço WebSocket.

Etapa 3: Obtenha o endereço do gateway de entrada

Console do ASM

  1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  2. Na página Mesh Management, clique em no nome da instância do ASM. No painel de navegação à esquerda, escolha ASM Gateways > Ingress Gateway.

  3. Na página Ingress Gateway, localize o Service address.

Console do ACK

  1. Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique em no nome do seu cluster. No painel de navegação à esquerda, clique em Network > Services.

  3. Na parte superior da página Hosts, selecione Namespaces na lista suspensa Namespace. Na coluna External IP, localize o endereço ip associado à porta 80 do serviço istio-ingressgateway.

Etapa 4: Verifique o acesso ao serviço WebSocket

  1. Insira http://<endereço do gateway de entrada> em quatro navegadores diferentes.

    A página exibe o título tornado WebSocket example. O WebSocket status é open (indicado por um rótulo verde). Abaixo, a página mostra nove entradas de dados em três tabelas com colunas No., id e value. Todos os valores iniciais são 0.

  2. Execute os comandos a seguir para enviar solicitações ao serviço WebSocket.

    curl "http://<ingress gateway address>/api?id=8&value=300"
    curl "http://<ingress gateway address>/api?id=5&value=600"
    curl "http://<ingress gateway address>/api?id=1&value=200"
    curl "http://<ingress gateway address>/api?id=3&value=290"

    Os dados nas páginas do serviço WebSocket em todos os quatro navegadores são atualizados simultaneamente e mostram resultados idênticos.

Etapa 5: Alterne para o protocolo wss

  1. Configure um certificado de servidor e uma chave privada para o gateway. Para obter mais informações, consulte Etapa 1: Preparar certificados de servidor e chaves privadas para vários hosts.

    Certifique-se de ter um Secret chamado myexample-credential que contenha o certificado e a chave privada no namespace istio-system do seu cluster ACK.

  2. Modifique o Gateway criado na Etapa 2: Configurar as regras de roteamento.

    Exemplo de YAML:

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: tornado-gateway
    spec:
      selector:
        istio: ingressgateway
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "*"
      - hosts:
        - "*"
        port:
          name: https
          number: 443
          protocol: HTTPS
        tls:
          credentialName: myexample-credential
          mode: SIMPLE

Etapa 6: Verifique o acesso ao serviço WebSocket via wss

  1. Modifique o arquivo hosts na sua máquina local para resolver a.aliyun.com para o endereço ip do gateway do ASM. Isso permite acessar o gateway do ASM usando o nome de domínio no certificado configurado na Etapa 5.1.

  2. Em quatro navegadores diferentes, abra https://a.aliyun.com.

    A página exibe o título tornado WebSocket example. O WebSocket status é open (indicado por um rótulo verde). Abaixo, a página mostra nove entradas de dados em três tabelas com colunas No., id e value. Todos os valores iniciais são 0.

  3. Execute os comandos a seguir para enviar solicitações ao serviço WebSocket.

    curl -k "https://<ingress gateway address>/api?id=8&value=300"
    curl -k "https://<ingress gateway address>/api?id=5&value=600"
    curl -k "https://<ingress gateway address>/api?id=1&value=200"
    curl -k "https://<ingress gateway address>/api?id=3&value=290"

    Os dados nas páginas do serviço WebSocket em todos os quatro navegadores são atualizados simultaneamente e mostram resultados idênticos.