Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Definir regras de roteamento com Gateway API

Última atualização: Jun 28, 2026

A Gateway API é um projeto Kubernetes open-source mantido pela comunidade SIG-NETWORK. Ela oferece interfaces expressivas, extensíveis e orientadas a funções para redes de serviços. O Service Mesh (ASM) oferece suporte à Gateway API, permitindo definir regras de roteamento para expor aplicações por meio de um gateway de entrada.

Este tópico descreve como configurar regras de roteamento HTTP e HTTPS para expor a aplicação httpbin em um gateway de entrada do ASM.

Pré-requisitos

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

Compatibilidade de versões

Versão do ASM

Versão da Gateway API

Suporte adicional

v1.18

v0.6.0

-

v1.22 e posteriores

v1.1

GRPCRoute

v1.24 e posteriores

v1.2.0

-

Importante

No modo multi-cluster, se dois clusters de plano de dados contiverem recursos Gateway com o mesmo nome no mesmo namespace, o recurso aplicado posteriormente substituirá o anterior.

Etapa 1: Verificar os CRDs da Gateway API no cluster ACK

Clusters ACK da versão 1,24 e posteriores incluem automaticamente as CustomResourceDefinitions (CRDs) da Gateway API. Execute o comando abaixo para verificar se as CRDs existem:

kubectl get crds | grep gateway.networking.k8s.io

Se as CRDs existirem, a saída será semelhante a:

gatewayclasses.gateway.networking.k8s.io                         2023-05-10T02:51:33Z
gateways.gateway.networking.k8s.io                               2023-05-10T02:51:33Z
httproutes.gateway.networking.k8s.io                             2023-05-10T02:51:33Z
referencegrants.gateway.networking.k8s.io                        2023-05-10T02:51:33Z

Para verificar as versões das CRDs:

kubectl get crds -o yaml | grep 'gateway.networking.k8s.io/bundle-version'

Saída esperada:

gateway.networking.k8s.io/bundle-version: v0.6.0
gateway.networking.k8s.io/bundle-version: v0.6.0
gateway.networking.k8s.io/bundle-version: v0.6.0
gateway.networking.k8s.io/bundle-version: v0.6.0

Caso a saída não inclua as CRDs da Gateway API, faça login no console do ACK e instale o componente da Gateway API na página Add-ons. Para mais informações, consulte Gerenciar componentes.

Etapa 2: Habilitar a Gateway API para a instância do ASM

Conecte-se à instância do ASM com kubectl usando o arquivo kubeconfig. Defina enableGatewayAPI como true no recurso ASMMeshConfig chamado default:

apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMMeshConfig
metadata:
  name: default
spec:
  enableGatewayAPI: true

Após ativar essa configuração, o plano de controle gera as CRDs da Gateway API.

Tanto a Gateway API quanto o Istio definem um recurso chamado "gateway". Isso pode causar conflitos ao consultar com kubectl. Use kubectl get gtw para o recurso de gateway da Gateway API e kubectl get gw para o recurso de gateway do Istio.

Etapa 3: Configurar uma regra de roteamento HTTP

Para expor a aplicação httpbin via HTTP, crie um Gateway e uma HTTPRoute no cluster ACK.

Criar o Gateway

  1. Crie um arquivo chamado gateway.yaml com o seguinte conteúdo. Substitua o placeholder abaixo pelo valor real. Este Gateway se vincula ao gateway de entrada especificado e escuta na porta 80 (HTTP) hosts correspondentes a *.aliyun.com. Rotas de todos os namespaces são permitidas.

    Para corresponder a todos os hosts, deixe o campo hostname em branco. Não há suporte para definir esse campo como * .

    Placeholder

    Descrição

    <ingress-gateway-name>

    Nome do gateway de entrada implantado

       apiVersion: gateway.networking.k8s.io/v1beta1
       kind: Gateway
       metadata:
         name: gateway
         namespace: istio-system
       spec:
         addresses:
         - type: Hostname
           value: istio-<ingress-gateway-name>.istio-system.svc.cluster.local
         gatewayClassName: istio
         listeners:
         - allowedRoutes:
             namespaces:
               from: All
           hostname: '*.aliyun.com'
           name: default
           port: 80
           protocol: HTTP
  2. Aplique o Gateway:

       kubectl apply -f gateway.yaml

Criar a HTTPRoute

  1. Crie um arquivo chamado http-route.yaml com o seguinte conteúdo. Esta HTTPRoute se anexa ao gateway no namespace istio-system. Como nenhum nome de listener específico foi definido, ela utiliza todos os listeners do Gateway. Requisições com o prefixo de caminho /get são roteadas para a porta 8000 do serviço httpbin.

    Por padrão, apenas serviços no mesmo namespace da HTTPRoute podem ser referenciados em backendRefs . Para referenciar serviços em outros namespaces, configure um ReferenceGrant .
       apiVersion: gateway.networking.k8s.io/v1beta1
       kind: HTTPRoute
       metadata:
         name: http
         namespace: default
       spec:
         parentRefs:
         - name: gateway
           namespace: istio-system
         hostnames: ["*.aliyun.com"]
         rules:
         - matches:
           - path:
               type: PathPrefix
               value: /get
           backendRefs:
           - name: httpbin
             port: 8000
  2. Aplique a HTTPRoute:

       kubectl apply -f http-route.yaml

Verificar a regra de roteamento HTTP

Execute o comando a seguir para enviar uma requisição pelo gateway de entrada:

curl -I -HHost:httpbin.aliyun.com "http://<ingress-gateway-ip>:80/get"

Substitua <ingress-gateway-ip> pelo endereço IP do seu gateway de entrada.

Se a regra de roteamento estiver funcionando, a saída será semelhante a:

HTTP/1.1 200 OK
server: istio-envoy
date: Fri, 12 May 2023 08:16:30 GMT
content-type: application/json
content-length: 516
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 4

Uma resposta 200 OK confirma que a regra de roteamento HTTP está ativa.

Etapa 4: Configurar uma regra de roteamento HTTPS

Para expor a aplicação httpbin via HTTPS com terminação TLS no gateway de entrada, crie um certificado TLS, um Gateway e uma HTTPRoute.

Preparar um certificado TLS

Use o recurso de gerenciamento de certificados do ASM para criar um certificado para o host a.aliyun.com. Defina o nome do certificado como myexample-credential. Para mais informações, consulte Preparar certificados de servidor e chaves privadas.

Criar o Gateway HTTPS

  1. Crie um arquivo chamado gateway-https.yaml com o seguinte conteúdo. Substitua o placeholder abaixo pelo valor real. Este Gateway escuta na porta 443 (HTTPS) hosts correspondentes a *.aliyun.com e termina o TLS usando o certificado myexample-credential.

    Placeholder

    Descrição

    <ingress-gateway-name>

    Nome do gateway de entrada implantado

       apiVersion: gateway.networking.k8s.io/v1beta1
       kind: Gateway
       metadata:
         name: gateway-https
         namespace: istio-system
       spec:
         addresses:
         - type: Hostname
           value: istio-<ingress-gateway-name>.istio-system.svc.cluster.local
         gatewayClassName: istio
         listeners:
         - name: https
           hostname: "*.aliyun.com"
           port: 443
           protocol: HTTPS
           tls:
             mode: Terminate
             certificateRefs:
             - name: myexample-credential
           allowedRoutes:
             namespaces:
               from: All
  2. Aplique o Gateway:

       kubectl apply -f gateway-https.yaml

Criar a HTTPRoute HTTPS

  1. Crie um arquivo chamado httpbin-https.yaml com o seguinte conteúdo. Esta HTTPRoute roteia requisições com caminhos prefixados por /status ou /delay para a porta 8000 do serviço httpbin.

       apiVersion: gateway.networking.k8s.io/v1beta1
       kind: HTTPRoute
       metadata:
         name: httpbin-https
         namespace: default
       spec:
         parentRefs:
         - name: gateway-https
           namespace: istio-system
         hostnames: ["*.aliyun.com"]
         rules:
         - matches:
           - path:
               type: PathPrefix
               value: /status
           - path:
               type: PathPrefix
               value: /delay
           backendRefs:
           - name: httpbin
             port: 8000
  2. Aplique a HTTPRoute:

       kubectl apply -f httpbin-https.yaml

Verificar a regra de roteamento HTTPS

Execute o comando a seguir para enviar uma requisição pelo gateway de entrada via HTTPS:

curl -k -H Host:a.aliyun.com --resolve a.aliyun.com:443:<ingress-gateway-ip> https://a.aliyun.com/status/418

Substitua <ingress-gateway-ip> pelo endereço IP do gateway de entrada implantado.

Se a regra de roteamento estiver funcionando, a saída será:

-=[ teapot ]=-

       _...._
     .'  _ _ `.
    | ."` ^ `". _,
    \_;`"---"`|//
      |       ;/
      \_     _/
        `"""`

A resposta "teapot" confirma que a regra de roteamento HTTPS com terminação TLS está ativa.