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
Cuenta con added a cluster to an ASM instance y la instancia de ASM es versión 1.18 o posterior.
Cuenta con deployed an ingress gateway service y los puertos 80 y 443 están habilitados en la puerta de enlace.
Ha desplegado la aplicación httpbin. Para obtener más información, consulte Step 1 en Deploy the httpbin application.
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:33ZEjecute 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.
-
Cree un recurso Gateway.
-
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
hostnameen*.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. -
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
-
-
Cree un recurso HTTPRoute.
-
Cree un archivo llamado http-route.yaml con el siguiente contenido.
Esta configuración vincula HTTPRoute al recurso
gatewayen el namespaceistio-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/getse enrutan al puerto 8000 del servicio httpbin en el mismo namespace. -
En el entorno kubeconfig de su clúster de ACK, ejecute el siguiente comando para desplegar HTTPRoute.
kubectl apply -f http-route.yaml
-
-
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: 4Una respuesta
200 OKconfirma 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.
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 nombremyexample-credential. Para obtener más información, consulte Step 1: Prepare server certificates and private keys for multiple hosts.-
Cree un recurso Gateway.
-
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. -
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
-
-
Cree un recurso HTTPRoute.
-
Cree un archivo llamado httpbin-https.yaml con el siguiente contenido.
-
En el entorno kubeconfig de su clúster de ACK, ejecute el siguiente comando para desplegar HTTPRoute.
kubectl apply -f httpbin-https.yaml
-
-
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/418Salida esperada:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`La salida confirma que la regla de enrutamiento HTTPS está activa.