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
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.
-
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 --- -
Execute o comando a seguir para criar o aplicativo tornado.
kubectl apply -f tornado.yaml
Etapa 2: Configure as regras de roteamento
Faça login no console do ASM.
No painel de navegação à esquerda, escolha .
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.
-
Crie um Gateway.
Na página de detalhes da instância do ASM, escolha no painel de navegação à esquerda. Na página exibida, clique em Create from YAML.
-
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
numbercomo80permite que o serviço WebSocket aceite conexões HTTP ou TCP de entrada ou saída na porta 80.
-
Crie um VirtualService.
Na página de detalhes da instância do ASM, escolha no painel de navegação à esquerda. Na página exibida, clique em Create from YAML.
-
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: 100Definir
hostscomo*permite que qualquer solicitação acesse o serviço WebSocket.
Etapa 3: Obtenha o endereço do gateway de entrada
Console do ASM
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em no nome da instância do ASM. No painel de navegação à esquerda, escolha .
Na página Ingress Gateway, localize o Service address.
Console do ACK
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em no nome do seu cluster. No painel de navegação à esquerda, clique em .
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
-
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.
-
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
-
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.
-
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
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.
-
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.
-
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.