Todos os produtos
Search
Central de documentação

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

Última atualização: Aug 24, 2026

A Gateway API é um projeto open-source mantido pela comunidade SIG-NETWORK. Ela aprimora o networking de services ao oferecer interfaces expressivas, extensíveis e orientadas a funções. Com a Gateway API, você aplica restrições condicionais às regras de roteamento para acessar aplicações em um cluster.

Pré-requisitos

Observações

  • Compatibilidade de versões:

    • O ASM 1.18 oferece suporte à Gateway API v0.6.0.

    • O ASM 1.22 e versões posteriores oferecem suporte à Gateway API v1.1 e adicionam compatibilidade com GRPCRoute.

    • O ASM 1.24 e versões posteriores oferecem suporte à Gateway API v1.2.0.

  • No modo multi-cluster, se você aplicar recursos da Gateway API com o mesmo nome no mesmo namespace em vários clusters do plano de dados, o último recurso aplicado substituirá os anteriores.

Etapa 1: Verificar os CRDs da Gateway API

Os CRDs do componente Gateway API são instalados por padrão em clusters do Container Service for Kubernetes (ACK) v1.24 e posteriores.

Para confirmar se os CRDs existem no seu cluster ACK, execute o comando a seguir.

kubectl get crds | grep gateway.networking.k8s.io
  • Se os CRDs estiverem instalados, a saída será semelhante a esta:

    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

    Execute o seguinte comando para verificar a versão do CRD.

    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 os CRDs esperados, faça login no console do ACK, acesse a página Add-ons e instale o componente Gateway API. Para mais detalhes, consulte Gerenciar add-ons.

Etapa 2: Ativar o suporte à Gateway API

No ambiente kubeconfig da sua instância do ASM, adicione o campo enableGatewayAPI: true ao recurso ASMMeshConfig chamado default.

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

Após ativar a opção enableGatewayAPI, o plano de controle gera os CRDs relevantes da Gateway API. Tanto a Gateway API quanto o Istio definem um recurso chamado Gateway, o que pode causar conflitos ao usar o kubectl. Para resolver isso, utilize o comando kubectl get gtw para recuperar recursos Gateway da Gateway API e o comando kubectl get gw para recuperar recursos Gateway do Istio.

Etapa 3: Configurar uma regra de roteamento HTTP

Utilize a Gateway API para configurar uma regra de roteamento HTTP que exponha a aplicação httpbin por meio do gateway. É necessário criar os recursos Gateway e HTTPRoute no seu cluster ACK.

  1. Crie um recurso Gateway.

    1. Crie um arquivo chamado gateway.yaml com o conteúdo a seguir.

      Esta configuração aplica o recurso Gateway ao gateway ASM especificado. Ela cria um listener na porta 80 usando o protocolo HTTP e define o hostname como *.aliyun.com, permitindo que regras de roteamento de todos os namespaces se anexem a este listener. No arquivo YAML, substitua ${ASM_GATEWAY_NAME} pelo nome do seu gateway ASM.

      gateway.yaml

      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: Gateway
      metadata:
        name: gateway
        namespace: istio-system
      spec:
        addresses:  # Specifies the ASM gateway Service. This can be applied to the services of multiple ASM gateways.
        - type: Hostname
          value: istio-${ASM_GATEWAY_NAME}.istio-system.svc.cluster.local
        gatewayClassName: istio
        listeners:
        - allowedRoutes:
            namespaces:
              from: All
          hostname: '*.aliyun.com'  # Direct matching on "*" is not supported. To match all hosts, do not specify this field.
          name: default
          port: 80
          protocol: HTTP
    2. No ambiente kubeconfig do seu cluster ACK, execute o comando a seguir para implantar o Gateway.

      kubectl apply -f gateway.yaml
  2. Crie um recurso HTTPRoute.

    1. Crie um arquivo chamado http-route.yaml com o conteúdo a seguir.

      Esta configuração anexa o HTTPRoute ao recurso gateway no namespace istio-system. Como nenhum listener específico foi nomeado, a regra se aplica a todos os listeners compatíveis no gateway. Requisições com o prefixo de caminho /get são roteadas para a porta 8000 do service httpbin no mesmo namespace.

      http-route.yaml

      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: HTTPRoute
      metadata:
        name: http
        namespace: default
      spec:
        parentRefs:  # This route can also be attached to different Gateways.
        - name: gateway
          namespace: istio-system
        hostnames: ["*.aliyun.com"]
        rules:
        - matches:
          - path:
              type: PathPrefix
              value: /get
          backendRefs:  # By default, you can reference only services in the same namespace. To use services in different namespaces, configure a ReferenceGrant resource. For more information, see https://gateway-api.sigs.k8s.io/api-types/referencegrant/
          - name: httpbin 
            port: 8000
    2. No ambiente kubeconfig do seu cluster ACK, execute o comando a seguir para implantar o HTTPRoute.

      kubectl apply -f http-route.yaml
  3. Execute o seguinte comando para acessar a aplicação httpbin pelo ingress gateway e verificar se a regra de roteamento HTTP está ativa. Substitua {INGRESS_GATEWAY_IP} pelo endereço IP do seu ingress gateway.

    curl -I -HHost:httpbin.aliyun.com "http://{INGRESS_GATEWAY_IP}:80/get"

    Saída esperada:

    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

Use a Gateway API para configurar uma regra de roteamento HTTPS. Essa regra expõe a aplicação httpbin e realiza a terminação TLS no gateway ASM. Crie os recursos Gateway e HTTPRoute no cluster ACK.

  1. Utilize o recurso de gerenciamento global de certificados do ASM para criar um certificado HTTPS para a.aliyun.com. Nomeie o certificado como myexample-credential. Para mais informações, consulte a Etapa 1: Preparar certificados de servidor e chaves privadas para vários hosts.

  2. Crie um recurso Gateway.

    1. Crie um arquivo chamado gateway-https.yaml com o conteúdo a seguir.

      No arquivo YAML, substitua ${ASM_GATEWAY_NAME} pelo nome do seu gateway ASM.

      gateway-https.yaml

      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: Gateway
      metadata:
        name: gateway-https
        namespace: istio-system
      spec:
        addresses:  # Specifies the ASM gateway Service. This can be applied to the services of multiple ASM gateways.
        - type: Hostname
          value: istio-${ASM_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. No ambiente kubeconfig do seu cluster ACK, execute o comando a seguir para implantar o Gateway.

      kubectl apply -f gateway-https.yaml
  3. Crie um recurso HTTPRoute.

    1. Crie um arquivo chamado httpbin-https.yaml com o conteúdo a seguir.

      httpbin-https.yaml

      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. No ambiente kubeconfig do seu cluster ACK, execute o comando a seguir para implantar o HTTPRoute.

      kubectl apply -f httpbin-https.yaml
  4. Execute o seguinte comando para acessar a aplicação httpbin pelo ingress gateway e verificar se a regra de roteamento HTTPS está ativa. Substitua {INGRESS_GATEWAY_IP} pelo endereço IP do seu ingress gateway.

    curl -k -H Host:a.aliyun.com --resolve a.aliyun.com:443:{INGRESS_GATEWAY_IP} https://a.aliyun.com/status/418

    Saída esperada:

        -=[ teapot ]=-
    
           _...._
         .'  _ _ `.
        | ."` ^ `". _,
        \_;`"---"`|//
          |       ;/
          \_     _/
            `"""`

    A saída confirma que a regra de roteamento HTTPS está ativa.