Todos los productos
Search
Centro de documentos

Alibaba Cloud Service Mesh:Definición de reglas de enrutamiento con la Gateway API

Última actualización: Sep 05, 2026

La Gateway API es un proyecto de código abierto administrado por la comunidad SIG-NETWORK. Mejora la red de servicios al proporcionar interfaces expresivas, extensibles y orientadas a roles. Puede utilizar la Gateway API para aplicar restricciones condicionales a las reglas de enrutamiento destinadas al acceso de aplicaciones dentro de un clúster.

Requisitos previos

Notas

  • Compatibilidad de versiones:

    • ASM 1.18 es compatible con Gateway API v0.6.0.

    • ASM 1.22 y versiones posteriores son compatibles con Gateway API v1.1 y agregan soporte para GRPCRoute.

    • ASM 1.24 y versiones posteriores son compatibles con Gateway API v1.2.0.

  • En modo multiclúster, si aplica recursos de Gateway API con el mismo nombre al mismo namespace en varios clústeres del plano de datos, el último recurso aplicado sobrescribe los anteriores.

Paso 1: Comprobar los CRD de Gateway API

Los CRD del componente Gateway API se instalan de forma predeterminada en clústeres de Container Service for Kubernetes (ACK) v1.24 y posteriores.

Para comprobar que los CRD existen en su clúster de ACK, ejecute el siguiente comando.

kubectl get crds | grep gateway.networking.k8s.io
  • Si los CRD están instalados, la salida será similar a la siguiente:

    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

    Ejecute el siguiente comando para verificar la versión del CRD.

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

    Salida 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
  • Si la salida no incluye los CRD esperados, inicie sesión en la consola de ACK, vaya a la página de Add-ons e instale el componente Gateway API. Para obtener más información, consulte Manage add-ons.

Paso 2: Habilitar el soporte de Gateway API

En el entorno kubeconfig de su instancia de ASM, agregue el campo enableGatewayAPI: true al recurso ASMMeshConfig denominado default.

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

Después de habilitar el modificador enableGatewayAPI, el plano de control genera los CRD relevantes de Gateway API. Tanto Gateway API como Istio definen un recurso llamado Gateway, lo cual puede causar conflictos al usar kubectl. Para resolver esto, utilice el comando kubectl get gtw para recuperar recursos Gateway de Gateway API y el comando kubectl get gw para recuperar recursos Gateway de Istio.

Paso 3: Configurar una regla de enrutamiento HTTP

Utilice Gateway API para configurar una regla de enrutamiento HTTP que exponga la aplicación httpbin a través de la puerta de enlace. Debe crear recursos Gateway y HTTPRoute en su clúster de ACK.

  1. Cree un recurso Gateway.

    1. Cree un archivo llamado gateway.yaml con el siguiente contenido.

      Esta configuración aplica el recurso Gateway a la puerta de enlace de ASM especificada. Crea un listener en el puerto 80 que utiliza el protocolo HTTP y establece el hostname en *.aliyun.com, lo que permite que las reglas de enrutamiento de todos los namespaces se vinculen a este listener. En el archivo YAML, reemplace ${ASM_GATEWAY_NAME} con el nombre de su puerta de enlace de 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. En el entorno kubeconfig de su clúster de ACK, ejecute el siguiente comando para desplegar la puerta de enlace.

      kubectl apply -f gateway.yaml
  2. Cree un recurso HTTPRoute.

    1. Cree un archivo llamado http-route.yaml con el siguiente contenido.

      Esta configuración vincula HTTPRoute al recurso gateway en el namespace istio-system. Dado que no se especifica ningún listener concreto, la regla se aplica a todos los listeners compatibles en la puerta de enlace. Las solicitudes con el prefijo de ruta /get se enrutan al puerto 8000 del servicio httpbin en el mismo 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. En el entorno kubeconfig de su clúster de ACK, ejecute el siguiente comando para desplegar HTTPRoute.

      kubectl apply -f http-route.yaml
  3. Ejecute el siguiente comando para acceder a la aplicación httpbin a través de la puerta de enlace de ingreso y comprobar que la regla de enrutamiento HTTP está activa. Reemplace {INGRESS_GATEWAY_IP} con la dirección IP de su puerta de enlace de ingreso.

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

    Salida 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

    Una respuesta 200 OK confirma que la regla de enrutamiento HTTP está activa.

Paso 4: Configurar una regla de enrutamiento HTTPS

Utilice Gateway API para configurar una regla de enrutamiento HTTPS. Esta regla expone la aplicación httpbin y realiza la terminación TLS en la puerta de enlace de ASM. Debe crear recursos Gateway y HTTPRoute en el clúster de ACK.

  1. Utilice la función de gestión global de certificados de ASM para crear un certificado HTTPS para a.aliyun.com. Asigne al certificado el nombre myexample-credential. Para obtener más información, consulte Step 1: Prepare server certificates and private keys for multiple hosts.

  2. Cree un recurso Gateway.

    1. Cree un archivo llamado gateway-https.yaml con el siguiente contenido.

      En el archivo YAML, reemplace ${ASM_GATEWAY_NAME} con el nombre de su puerta de enlace de 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. En el entorno kubeconfig de su clúster de ACK, ejecute el siguiente comando para desplegar la puerta de enlace.

      kubectl apply -f gateway-https.yaml
  3. Cree un recurso HTTPRoute.

    1. Cree un archivo llamado httpbin-https.yaml con el siguiente contenido.

      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. En el entorno kubeconfig de su clúster de ACK, ejecute el siguiente comando para desplegar HTTPRoute.

      kubectl apply -f httpbin-https.yaml
  4. Ejecute el siguiente comando para acceder a la aplicación httpbin a través de la puerta de enlace de ingreso y comprobar que la regla de enrutamiento HTTPS está activa. Reemplace {INGRESS_GATEWAY_IP} con la dirección IP de su puerta de enlace de ingreso.

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

    Salida esperada:

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

    La salida confirma que la regla de enrutamiento HTTPS está activa.