|
| 1 | +--- |
| 2 | +layout: blog |
| 3 | +title: "Gateway API v0.8.0: Soporte para service mesh" |
| 4 | +date: 2023-08-29T10:00:00-08:00 |
| 5 | +slug: gateway-api-v0-8 |
| 6 | +--- |
| 7 | + |
| 8 | +***Autores:*** Flynn (Buoyant), John Howard (Google), Keith Mattix |
| 9 | +(Microsoft), Michael Beaumont (Kong), Mike Morris (independent), Rob Scott |
| 10 | +(Google). Traducción desde [el inglés][english] (y errores relacionados) por |
| 11 | +Flynn. |
| 12 | + |
| 13 | +_¡Mil gracias a María Teresa Rojas y Dani Baeyens por su inestimable ayuda revisando este post!_ |
| 14 | + |
| 15 | +Es un gran placer anunciar la versión v0.8.0 de Gateway API. Con esta versión, |
| 16 | +el soporte para service mesh en Gateway API ha alcanzado el [estado |
| 17 | +Experimental][status]. ¡Esperamos tus comentarios en la nueva versión! |
| 18 | + |
| 19 | +Además, nos alegra anunciar que Kuma 2.3+, Linkerd 2.14+ e Istio 1.16+ |
| 20 | +cumplen completamente con el soporte de service mesh de Gateway API. |
| 21 | + |
| 22 | +> _Nota: "Gateway API" es un nombre propio de esta API._ |
| 23 | +
|
| 24 | +## Soporte para service mesh en Gateway API |
| 25 | + |
| 26 | +Aunque el foco inicial de Gateway API siempre fue el tráfico de entrada al |
| 27 | +cluster (norte-sur), estaba claro casi desde el principio que los mismos |
| 28 | +conceptos básicos de enrutamiento también deberían aplicarse al tráfico de |
| 29 | +service mesh (este-oeste). En 2022, el subproyecto Gateway API lanzó [la |
| 30 | +iniciativa GAMMA][gamma], un flujo de trabajo independiente a los distintos |
| 31 | +proveedores, para examinar la mejor manera de adaptar el soporte de service |
| 32 | +mesh al marco de los recursos de Gateway API, sin hacer que los usuarios |
| 33 | +de Gateway API tuvieran que aprender de nuevo todo lo aprendido. |
| 34 | + |
| 35 | +Durante el último año, GAMMA ha investigado con cuidado los desafíos y |
| 36 | +posibles soluciones para usar Gateway API para service mesh. El resultado |
| 37 | +final son unas pocas [propuestas de mejora][geps] que reflejan muchas horas |
| 38 | +de reflexión y debate, y proporcionan un camino viable, con cambios mínimos, |
| 39 | +para permitir que Gateway API soporte service mesh. |
| 40 | + |
| 41 | +### ¿Cómo funcionará el enrutamiento de mesh con Gateway API? |
| 42 | + |
| 43 | +Todos los detalles se puede encontrar en [la documentación de la mesh de |
| 44 | +Gateway API][mesh-routing] y en [GEP-1426], pero en resumen: en Gateway API |
| 45 | +v0.8.0, un HTTPRoute puede tener un `parentRef` que sea un Service, no solo un |
| 46 | +Gateway. Anticipamos GEPs futuros en esta área a medida que adquirimos más |
| 47 | +experiencia con los casos de uso de service mesh: la capacidad de asociar un |
| 48 | +HTTPRoute con un Service permite usar Gateway API para una service mesh, pero |
| 49 | +hay múltiples casos de uso interesantes que son difíciles de manejar. |
| 50 | + |
| 51 | +Un ejemplo: podrías usar un HTTPRoute para hacer una prueba A-B con la service mesh así: |
| 52 | + |
| 53 | +```yaml |
| 54 | +apiVersion: gateway.networking.k8s.io/v1beta1 |
| 55 | +kind: HTTPRoute |
| 56 | +metadata: |
| 57 | + name: bar-route |
| 58 | +spec: |
| 59 | + parentRefs: |
| 60 | + - group: "" |
| 61 | + kind: Service |
| 62 | + name: demo-app |
| 63 | + port: 5000 |
| 64 | + rules: |
| 65 | + - matches: |
| 66 | + - headers: |
| 67 | + - type: Exact |
| 68 | + name: env |
| 69 | + value: v1 |
| 70 | + backendRefs: |
| 71 | + - name: demo-app-v1 |
| 72 | + port: 5000 |
| 73 | + - backendRefs: |
| 74 | + - name: demo-app-v2 |
| 75 | + port: 5000 |
| 76 | +``` |
| 77 | +
|
| 78 | +Cualquier solicitud al puerto 5000 del Service `demo-app` que tenga la |
| 79 | +cabecera `env: v1` se dirigirá a `demo-app-v1`, y las que no la tengan se |
| 80 | +dirigirán a `demo-app-v2`. Dado que esta decisión la toma la service mesh en |
| 81 | +vez del controlador de ingress, la prueba A-B se puede realizar en cualquier |
| 82 | +nivel del gráfico de llamadas de la aplicación. |
| 83 | + |
| 84 | +## ¿Cómo se puede confiar que este soporte será verdaderamente portátil? |
| 85 | + |
| 86 | +Gateway API ha invertido mucho esfuerzo en pruebas de conformidad en todas las |
| 87 | +funciones que soporta, y las de la service mesh no son excepciones. Uno de los |
| 88 | +desafíos que enfrentó la iniciativa GAMMA fue que muchas de estas pruebas |
| 89 | +siempre han requerido que la implementación proporcionara un controlador de |
| 90 | +ingress. Muchas service meshes no hacen así, y requerir que una mesh |
| 91 | +implemente un controlador de ingress para cumplir con GAMMA no parece |
| 92 | +práctico, cuando menos. Por lo tanto, hemos reiniciado el trabajo en _perfiles |
| 93 | +de conformidad_ de Gateway API, como se describe en [GEP-1709]. |
| 94 | + |
| 95 | +Con perfiles de conformidad, podemos definir subconjuntos de la funcionalidad |
| 96 | +de Gateway API, y permitir que las implementaciones elijan (y documenten) a |
| 97 | +qué subconjuntos se ajustan. GAMMA agrega un nuevo perfil `Mesh`, descrito en |
| 98 | +[GEP-1686], que sólo verifica la funcionalidad de service mesh definida por |
| 99 | +GAMMA. Ahora mismo, Kuma 2.3+, Linkerd 2.14+ e Istio 1.16+ son completamente |
| 100 | +compatibles con el perfil `Mesh`. |
| 101 | + |
| 102 | +## ¿Qué más hay en Gateway API v0.8.0? |
| 103 | + |
| 104 | +Ésta versión trata principalmente de preparar Gateway API para la versión |
| 105 | +v.1.0, en la que planeamos que HTTPRoute, Gateway y GatewayClass se graduarán |
| 106 | +a GA. Hay dos cambios principales relacionados con esta preparación: |
| 107 | +validación CEL y cambios en la versión de la API. |
| 108 | + |
| 109 | +### Validación CEL |
| 110 | + |
| 111 | +Gateway API v0.8.0 comienza la transición desde validación por webhook hasta |
| 112 | +[validación CEL][cel], usando información incluida en los CRDs. Esta |
| 113 | +transición significa cosas diferentes dependiendo de la versión de Kubernetes |
| 114 | +que se use: |
| 115 | + |
| 116 | +#### Kubernetes 1.25+ |
| 117 | + |
| 118 | +La validación CEL está completamente soportada, y casi toda la validación de |
| 119 | +Gateway API está implementada en CEL. La única excepción es que, en los |
| 120 | +filtros de modificación de cabeceras, CEL solo puede validar los nombres de |
| 121 | +las cabeceras sin distinguir entre mayúsculas y minúsculas. Hay más |
| 122 | +información en [#2277][issue 2277]. |
| 123 | + |
| 124 | +Recomendamos que _no_ uses el webhook de validación en estas versiones de |
| 125 | +Kubernetes. |
| 126 | + |
| 127 | +#### Kubernetes 1.23 y 1.24 |
| 128 | + |
| 129 | +La validación CEL no está soportada, pero aún se puede instalar los CRDs de |
| 130 | +Gateway API v0.8.0. Cuando actualices a Kubernetes 1.25+, la validación CEL |
| 131 | +incluida en los CRDs se activará automáticamente. |
| 132 | + |
| 133 | +Recomendamos que sigas usando el webhook de validación en estas versiones de |
| 134 | +Kubernetes. |
| 135 | + |
| 136 | +#### Kubernetes 1.22 y versiones anteriores |
| 137 | + |
| 138 | +Gateway API solo se compromete a admitir las [cinco versiones más recientes de |
| 139 | +Kubernetes][supported-versions]. Por lo tanto, estas versiones ya no están |
| 140 | +soportados por Gateway API, y la versión v0.8.0 no se puede instalar en ellas |
| 141 | +(porque los CRDs que contengan validación CEL serán rechazados). |
| 142 | + |
| 143 | +### Cambios en la versión de la API |
| 144 | + |
| 145 | +En la versión de Gateway API v1.0, se graduarán los recursos Gateway, |
| 146 | +GatewayClass y HTTPRoute a la versión de API v1 desde v1beta1. Como |
| 147 | +preparación, seguimos actualizando las versiones de los recursos que se han |
| 148 | +graduado desde la versión v1alpha1 a v1beta1. Para más información, consulta |
| 149 | +[las notas de lanzamiento de la versión v0.8.0][v0.8.0 release notes]. |
| 150 | + |
| 151 | +## Cómo empezar con Gateway API |
| 152 | + |
| 153 | +Gateway API representa el futuro de las APIs de load balancing, enrutamiento |
| 154 | +y service mesh en Kubernetes. Ya hay mas que 20 [implementaciones][impl] |
| 155 | +disponibles (incluidos controlodores de ingress y service meshes) y este |
| 156 | +número siempre está creciendo. |
| 157 | + |
| 158 | +Si tienes interés en Gateway API, te recomendamos empezar con [la |
| 159 | +documentación oficial sobre conceptos de la API][concepts]. Además, las |
| 160 | +[Guías][guides] cubren la instalación y configuración de Gateway API, y |
| 161 | +demuestran cómo usar Gateway API para lograr varios casos de uso comunes. Dado |
| 162 | +que esta API se basa en CRDs, puedes instalar la última versión en cualquier |
| 163 | +cluster de Kubernetes 1.23+. |
| 164 | + |
| 165 | +Si tienes ganas de contribuir a Gateway API, ¡nos alegra saberlo! Por favor no |
| 166 | +tengas dudas en crear un nuevo issue en nuestro repositorio de GitHub o |
| 167 | +unirte a las discusiones. Además puedes consultar la página de la comunidad, |
| 168 | +que tiene enlaces a Slack e información sobre nuestras reuniones comunitarias |
| 169 | +cada dos semanas. |
| 170 | + |
| 171 | +Gracias por tu continuo apoyo y comentarios sobre Gateway API. Estamos |
| 172 | +emocionados de ver cómo usas esta API en producción y esperamos escuchar |
| 173 | +sobre tus experiencias. |
| 174 | + |
| 175 | +## Leer más |
| 176 | + |
| 177 | +- [GEP-1324] proporciona una descripción general de los objetivos de GAMMA y |
| 178 | + algunas definiciones importantes. Leer este GEP vale la pena por su |
| 179 | + tratamiento del espacio del problema. |
| 180 | +- [GEP-1426] define cómo usar Gateway API recursos de enrutamiento (p.e. |
| 181 | + HTTPRoute) para manejar tráfico en una service mesh. |
| 182 | +- [GEP-1686] se basa en el trabajo del [GEP-1709] y define un perfil de |
| 183 | + conformidad para que una service mesh se declare conforme con Gateway API. |
| 184 | + |
| 185 | +Aunque estos patrones están en [Experimental][status], están disponibles en el |
| 186 | +[canal `standard`][ch], porque la iniciativa GAMMA no ha necesito agregar |
| 187 | +nuevos recursos o campos hasta ahora. |
| 188 | + |
| 189 | +[gamma]:https://gateway-api.sigs.k8s.io/concepts/gamma/ |
| 190 | +[status]:https://gateway-api.sigs.k8s.io/geps/overview/#status |
| 191 | +[ch]:https://gateway-api.sigs.k8s.io/concepts/versioning/#release-channels-eg-experimental-standard |
| 192 | +[cel]:/docs/reference/using-api/cel/ |
| 193 | +[crd]:/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/ |
| 194 | +[concepts]:https://gateway-api.sigs.k8s.io/concepts/api-overview/ |
| 195 | +[geps]:https://gateway-api.sigs.k8s.io/contributing/enhancement-requests/ |
| 196 | +[guides]:https://gateway-api.sigs.k8s.io/guides/getting-started/ |
| 197 | +[impl]:https://gateway-api.sigs.k8s.io/implementations/ |
| 198 | +[install-crds]:https://gateway-api.sigs.k8s.io/guides/getting-started/#install-the-crds |
| 199 | +[issue]:https://github.com/kubernetes-sigs/gateway-api/issues/new/choose |
| 200 | +[disc]:https://github.com/kubernetes-sigs/gateway-api/discussions |
| 201 | +[community]:https://gateway-api.sigs.k8s.io/contributing/community/ |
| 202 | +[mesh-routing]:https://gateway-api.sigs.k8s.io/concepts/gamma/#how-the-gateway-api-works-for-service-mesh |
| 203 | +[GEP-1426]:https://gateway-api.sigs.k8s.io/geps/gep-1426/ |
| 204 | +[GEP-1324]:https://gateway-api.sigs.k8s.io/geps/gep-1324/ |
| 205 | +[GEP-1686]:https://gateway-api.sigs.k8s.io/geps/gep-1686/ |
| 206 | +[GEP-1709]:https://gateway-api.sigs.k8s.io/geps/gep-1709/ |
| 207 | +[issue 2277]:https://github.com/kubernetes-sigs/gateway-api/issues/2277 |
| 208 | +[supported-versions]:https://gateway-api.sigs.k8s.io/concepts/versioning/#supported-versions |
| 209 | +[v0.8.0 release notes]:https://github.com/kubernetes-sigs/gateway-api/releases/tag/v0.8.0 |
| 210 | +[versioning docs]:https://gateway-api.sigs.k8s.io/concepts/versioning/ |
| 211 | +[english]:/blog/2023/08/29/gateway-api-v0-8/ |
0 commit comments