<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Kubernetes Blog</title>
    <link>https://deploy-preview-55907--kubernetes-io-main-staging.netlify.app/es/</link>
    <description>The Kubernetes blog is used by the project to communicate new features, community reports, and any news that might be relevant to the Kubernetes community.</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>es</language>
    <image>
      <url>https://raw.githubusercontent.com/kubernetes/kubernetes/master/logo/logo.png</url>
      <title>The Kubernetes project logo</title>
      <link>https://deploy-preview-55907--kubernetes-io-main-staging.netlify.app/es/</link>
    </image>
    
    <atom:link href="https://deploy-preview-55907--kubernetes-io-main-staging.netlify.app/es/feed.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Presentamos Node Readiness Controller</title>
      <link>https://deploy-preview-55907--kubernetes-io-main-staging.netlify.app/es/blog/2026/02/03/introducing-node-readiness-controller/</link>
      <pubDate>Tue, 03 Feb 2026 10:00:00 +0800</pubDate>
      
      <guid>https://deploy-preview-55907--kubernetes-io-main-staging.netlify.app/es/blog/2026/02/03/introducing-node-readiness-controller/</guid>
      <description>
        
        
        &lt;img style=&#34;float: right; display: inline-block; margin-left: 2em; max-width: 15em;&#34; src=&#34;./node-readiness-controller-logo.svg&#34; alt=&#34;Logotipo de Node Readiness Controller&#34; /&gt;
&lt;p&gt;En el modelo estándar de Kubernetes, que un nodo sea adecuado para ejecutar cargas de trabajo (&lt;em&gt;workloads&lt;/em&gt;) depende de una única condición binaria: &amp;quot;Ready&amp;quot;. Sin embargo, en los entornos modernos de Kubernetes, los nodos requieren dependencias de infraestructura complejas —tales como agentes de red, &lt;em&gt;drivers&lt;/em&gt; de almacenamiento, &lt;em&gt;firmware&lt;/em&gt; de GPU o verificaciones de estado (&lt;em&gt;health checks&lt;/em&gt;) personalizadas— para estar completamente operativos antes de poder albergar Pods de manera confiable.&lt;/p&gt;
&lt;p&gt;Hoy, en nombre del proyecto Kubernetes, me complace anunciar el &lt;a href=&#34;https://node-readiness-controller.sigs.k8s.io/&#34;&gt;Node Readiness Controller&lt;/a&gt;.
Este proyecto introduce un sistema declarativo para gestionar los &lt;em&gt;taints&lt;/em&gt; de los nodos, extendiendo las medidas de seguridad de disponibilidad durante el arranque del nodo, más allá de las condiciones estándar.
Al gestionar dinámicamente los &lt;em&gt;taints&lt;/em&gt; en función de señales de estado personalizadas, el &lt;em&gt;controller&lt;/em&gt; garantiza que las cargas de trabajo solo se programen en nodos que cumplan con todos los requisitos específicos de la infraestructura.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-el-node-readiness-controller&#34;&gt;¿Por qué el Node Readiness Controller?&lt;/h2&gt;
&lt;p&gt;El estado principal &amp;quot;Ready&amp;quot; del nodo en Kubernetes a menudo resulta insuficiente para clústeres con requisitos de arranque sofisticados. Los operadores suelen tener dificultades para asegurar que ciertos DaemonSets o servicios locales estén saludables antes de que un nodo entre al grupo de programación.&lt;/p&gt;
&lt;p&gt;El Node Readiness Controller resuelve esta brecha al permitir a los operadores definir &lt;em&gt;scheduling gates&lt;/em&gt; personalizados y adaptados a grupos de &lt;em&gt;nodes&lt;/em&gt; específicos. Esto permite aplicar requisitos de preparación diferenciados a lo largo de &lt;em&gt;clusters&lt;/em&gt; heterogéneos; asegurando, por ejemplo, que los &lt;em&gt;nodes&lt;/em&gt; equipados con GPU solo acepten &lt;em&gt;pods&lt;/em&gt; una vez que se hayan verificado sus &lt;em&gt;drivers&lt;/em&gt; especializados, mientras que los &lt;em&gt;nodes&lt;/em&gt; de propósito general siguen una ruta estándar.&lt;/p&gt;
&lt;p&gt;Ofrece tres ventajas principales:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Definiciones de Readiness personalizadas&lt;/strong&gt;: Define qué significa que un nodo esté &lt;em&gt;listo&lt;/em&gt; (ready) para tu plataforma específica.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gestión automatizada de Taints&lt;/strong&gt;: El &lt;em&gt;controller&lt;/em&gt; aplica o elimina automáticamente los &lt;em&gt;taints&lt;/em&gt; de los nodos según el estado de sus condiciones, evitando que los Pods caigan en una infraestructura que no está lista.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arranque declarativo de Nodos&lt;/strong&gt;: Gestiona la inicialización de los nodos en múltiples pasos de forma confiable, aportando una clara observabilidad al proceso de arranque.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;conceptos-clave-y-características&#34;&gt;Conceptos clave y características&lt;/h2&gt;
&lt;p&gt;El &lt;em&gt;controller&lt;/em&gt; se basa en la API &lt;code&gt;NodeReadinessRule&lt;/code&gt; (NRR), la cual permite definir &lt;em&gt;Gates&lt;/em&gt; declarativos para tus nodos.&lt;/p&gt;
&lt;h3 id=&#34;modos-de-aplicación-flexibles&#34;&gt;Modos de aplicación flexibles&lt;/h3&gt;
&lt;p&gt;El &lt;em&gt;controller&lt;/em&gt; admite dos modos operativos distintos:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Continuous enforcement (Aplicación continua)&lt;/dt&gt;
&lt;dd&gt;Mantiene activamente la garantía de preparación (&lt;em&gt;readiness&lt;/em&gt;) a lo largo de todo el ciclo de vida del &lt;em&gt;node&lt;/em&gt;. Si una dependencia crítica (como el &lt;em&gt;driver&lt;/em&gt; de un dispositivo) falla más adelante, el &lt;em&gt;node&lt;/em&gt; se marca inmediatamente con un &lt;em&gt;taint&lt;/em&gt; para evitar un nuevo &lt;em&gt;scheduling&lt;/em&gt;.&lt;/dd&gt;
&lt;dt&gt;Bootstrap-only enforcement (Aplicación solo en bootstrap)&lt;/dt&gt;
&lt;dd&gt;Específico para los pasos de inicialización que ocurren una sola vez, como la descarga previa (&lt;em&gt;pre-pulling&lt;/em&gt;) de imágenes pesadas o el aprovisionamiento de hardware. Una vez que se cumplen las condiciones, el &lt;em&gt;controller&lt;/em&gt; marca el &lt;em&gt;bootstrap&lt;/em&gt; como completado y deja de monitorear esa regla específica para dicho &lt;em&gt;node&lt;/em&gt;.&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&#34;reporte-de-condiciones&#34;&gt;Reporte de condiciones&lt;/h3&gt;
&lt;p&gt;El &lt;em&gt;controller&lt;/em&gt; reacciona a las condiciones del nodo (Node Conditions) en lugar de realizar las verificaciones de estado por sí mismo. Este diseño desacoplado le permite integrarse sin problemas con otras herramientas del ecosistema, así como con soluciones personalizadas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/kubernetes/node-problem-detector&#34;&gt;Node Problem Detector&lt;/a&gt; (NPD)&lt;/strong&gt;: Utiliza tus configuraciones existentes de NPD y &lt;em&gt;scripts&lt;/em&gt; personalizados para reportar el estado del nodo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Readiness Condition Reporter&lt;/strong&gt;: Un agente ligero provisto por el proyecto que puede desplegarse para realizar comprobaciones periódicas en endpoints HTTP locales y actualizar las condiciones del nodo según corresponda.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;seguridad-operativa-con-dry-run&#34;&gt;Seguridad operativa con Dry Run&lt;/h3&gt;
&lt;p&gt;Desplegar nuevas reglas de preparación a lo largo de una flota de nodos conlleva un riesgo inherente. Para mitigarlo, el modo &lt;em&gt;dry run&lt;/em&gt; permite a los operadores simular primero el impacto en el cluster.
En este modo, el &lt;em&gt;controller&lt;/em&gt; registra las acciones previstas y actualiza el estado (&lt;em&gt;status&lt;/em&gt;) de la regla para mostrar los &lt;em&gt;nodes&lt;/em&gt; afectados sin aplicar los &lt;em&gt;taints&lt;/em&gt; reales, lo que permite una validación segura antes de su aplicación definitiva.&lt;/p&gt;
&lt;h2 id=&#34;ejemplo-bootstrapping-de-cni&#34;&gt;Ejemplo: Bootstrapping de CNI&lt;/h2&gt;
&lt;p&gt;El siguiente NodeReadinessRule garantiza que un nodo permanezca no programable (&lt;em&gt;unschedulable&lt;/em&gt;) hasta que su agente CNI sea funcional. El &lt;em&gt;controller&lt;/em&gt; monitorea una condición personalizada &lt;code&gt;cniplugin.example.net/NetworkReady&lt;/code&gt; y solo remueve el &lt;em&gt;taint&lt;/em&gt; &lt;code&gt;readiness.k8s.io/acme.com/network-unavailable&lt;/code&gt; una vez que el estado es True.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;readiness.node.x-k8s.io/v1alpha1&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;kind&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;NodeReadinessRule&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;metadata&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;name&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;network-readiness-rule&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;spec&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;conditions&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;type&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;cniplugin.example.net/NetworkReady&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;requiredStatus&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;True&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;taint&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;key&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;readiness.k8s.io/acme.com/network-unavailable&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;effect&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;NoSchedule&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;value&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;pending&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;enforcementMode&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;bootstrap-only&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;nodeSelector&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;matchLabels&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;node-role.kubernetes.io/worker&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Demostración&lt;/strong&gt;:&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; allowfullscreen=&#34;allowfullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/hohIIEXlNpo?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;Node Readiness Controller Demo&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;h2 id=&#34;participa-en-la-comunidad&#34;&gt;Participa en la comunidad&lt;/h2&gt;
&lt;p&gt;El Node Readiness Controller apenas está comenzando, con nuestros &lt;a href=&#34;https://github.com/kubernetes-sigs/node-readiness-controller/releases/tag/v0.1.1&#34;&gt;lanzamientos iniciales&lt;/a&gt; ya disponibles, y estamos buscando comentarios de la comunidad para perfeccionar nuestro mapa de ruta (roadmap). Tras nuestras productivas discusiones en el Unconference de KubeCon NA 2025, estamos entusiasmados por continuar la conversación en persona.&lt;/p&gt;
&lt;p&gt;Acompáñanos en KubeCon + CloudNativeCon Europe 2026 en nuestra sesión del maintainer track: &lt;em&gt;&lt;a href=&#34;https://sched.co/2EF6E&#34;&gt;Addressing Non-Deterministic Scheduling: Introducing the Node Readiness Controller&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Mientras tanto, puedes contribuir o seguir nuestro progreso aquí:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href=&#34;https://sigs.k8s.io/node-readiness-controller&#34;&gt;https://sigs.k8s.io/node-readiness-controller&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Slack: Únete a la conversación en &lt;a href=&#34;https://kubernetes.slack.com/messages/sig-node-readiness-controller&#34;&gt;#sig-node-readiness-controller&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentación: &lt;a href=&#34;https://node-readiness-controller.sigs.k8s.io/&#34;&gt;Guía de inicio&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Gateway API v0.8.0: Soporte para service mesh</title>
      <link>https://deploy-preview-55907--kubernetes-io-main-staging.netlify.app/es/blog/2023/08/29/gateway-api-v0-8/</link>
      <pubDate>Tue, 29 Aug 2023 10:00:00 -0800</pubDate>
      
      <guid>https://deploy-preview-55907--kubernetes-io-main-staging.netlify.app/es/blog/2023/08/29/gateway-api-v0-8/</guid>
      <description>
        
        
        &lt;p&gt;&lt;em&gt;&lt;strong&gt;Autores:&lt;/strong&gt;&lt;/em&gt; Flynn (Buoyant), John Howard (Google), Keith Mattix
(Microsoft), Michael Beaumont (Kong), Mike Morris (independent), Rob Scott
(Google). Traducción desde &lt;a href=&#34;https://deploy-preview-55907--kubernetes-io-main-staging.netlify.app/blog/2023/08/29/gateway-api-v0-8/&#34;&gt;el inglés&lt;/a&gt; (y errores relacionados) por
Flynn.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;¡Mil gracias a María Teresa Rojas y Dani Baeyens por su inestimable ayuda revisando este post!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Es un gran placer anunciar la versión v0.8.0 de Gateway API. Con esta versión,
el soporte para service mesh en Gateway API ha alcanzado el &lt;a href=&#34;https://gateway-api.sigs.k8s.io/geps/overview/#status&#34;&gt;estado
Experimental&lt;/a&gt;. ¡Esperamos tus comentarios en la nueva versión!&lt;/p&gt;
&lt;p&gt;Además, nos alegra anunciar que Kuma 2.3+, Linkerd 2.14+ e Istio 1.16+
cumplen completamente con el soporte de service mesh de Gateway API.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Nota: &amp;quot;Gateway API&amp;quot; es un nombre propio de esta API.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;soporte-para-service-mesh-en-gateway-api&#34;&gt;Soporte para service mesh en Gateway API&lt;/h2&gt;
&lt;p&gt;Aunque el foco inicial de Gateway API siempre fue el tráfico de entrada al
cluster (norte-sur), estaba claro casi desde el principio que los mismos
conceptos básicos de enrutamiento también deberían aplicarse al tráfico de
service mesh (este-oeste). En 2022, el subproyecto Gateway API lanzó &lt;a href=&#34;https://gateway-api.sigs.k8s.io/concepts/gamma/&#34;&gt;la
iniciativa GAMMA&lt;/a&gt;, un flujo de trabajo independiente a los distintos
proveedores, para examinar la mejor manera de adaptar el soporte de service
mesh al marco de los recursos de Gateway API, sin hacer que los usuarios
de Gateway API tuvieran que aprender de nuevo todo lo aprendido.&lt;/p&gt;
&lt;p&gt;Durante el último año, GAMMA ha investigado con cuidado los desafíos y
posibles soluciones para usar Gateway API para service mesh. El resultado
final son unas pocas &lt;a href=&#34;https://gateway-api.sigs.k8s.io/contributing/enhancement-requests/&#34;&gt;propuestas de mejora&lt;/a&gt; que reflejan muchas horas
de reflexión y debate, y proporcionan un camino viable, con cambios mínimos,
para permitir que Gateway API soporte service mesh.&lt;/p&gt;
&lt;h3 id=&#34;cómo-funcionará-el-enrutamiento-de-mesh-con-gateway-api&#34;&gt;¿Cómo funcionará el enrutamiento de mesh con Gateway API?&lt;/h3&gt;
&lt;p&gt;Todos los detalles se puede encontrar en &lt;a href=&#34;https://gateway-api.sigs.k8s.io/concepts/gamma/#how-the-gateway-api-works-for-service-mesh&#34;&gt;la documentación de la mesh de
Gateway API&lt;/a&gt; y en &lt;a href=&#34;https://gateway-api.sigs.k8s.io/geps/gep-1426/&#34;&gt;GEP-1426&lt;/a&gt;, pero en resumen: en Gateway API
v0.8.0, un HTTPRoute puede tener un &lt;code&gt;parentRef&lt;/code&gt; que sea un Service, no solo un
Gateway. Anticipamos GEPs futuros en esta área a medida que adquirimos más
experiencia con los casos de uso de service mesh: la capacidad de asociar un
HTTPRoute con un Service permite usar Gateway API para una service mesh, pero
hay múltiples casos de uso interesantes que son difíciles de manejar.&lt;/p&gt;
&lt;p&gt;Un ejemplo: podrías usar un HTTPRoute para hacer una prueba A-B con la service mesh así:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;gateway.networking.k8s.io/v1beta1&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;kind&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;HTTPRoute&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;metadata&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;name&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;bar-route&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;spec&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;parentRefs&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;group&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;kind&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Service&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;name&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;demo-app&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;port&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;5000&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rules&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;matches&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;headers&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;type&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Exact&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;name&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;env&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;value&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;v1&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;backendRefs&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;name&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;demo-app-v1&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;port&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;5000&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;backendRefs&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;name&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;demo-app-v2&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;port&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;5000&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Cualquier solicitud al puerto 5000 del Service &lt;code&gt;demo-app&lt;/code&gt; que tenga la
cabecera &lt;code&gt;env: v1&lt;/code&gt; se dirigirá a &lt;code&gt;demo-app-v1&lt;/code&gt;, y las que no la tengan se
dirigirán a &lt;code&gt;demo-app-v2&lt;/code&gt;. Dado que esta decisión la toma la service mesh en
vez del controlador de ingress, la prueba A-B se puede realizar en cualquier
nivel del gráfico de llamadas de la aplicación.&lt;/p&gt;
&lt;h2 id=&#34;cómo-se-puede-confiar-que-este-soporte-será-verdaderamente-portátil&#34;&gt;¿Cómo se puede confiar que este soporte será verdaderamente portátil?&lt;/h2&gt;
&lt;p&gt;Gateway API ha invertido mucho esfuerzo en pruebas de conformidad en todas las
funciones que soporta, y las de la service mesh no son excepciones. Uno de los
desafíos que enfrentó la iniciativa GAMMA fue que muchas de estas pruebas
siempre han requerido que la implementación proporcionara un controlador de
ingress. Muchas service meshes no hacen así, y requerir que una mesh
implemente un controlador de ingress para cumplir con GAMMA no parece
práctico, cuando menos. Por lo tanto, hemos reiniciado el trabajo en &lt;em&gt;perfiles
de conformidad&lt;/em&gt; de Gateway API, como se describe en &lt;a href=&#34;https://gateway-api.sigs.k8s.io/geps/gep-1709/&#34;&gt;GEP-1709&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Con perfiles de conformidad, podemos definir subconjuntos de la funcionalidad
de Gateway API, y permitir que las implementaciones elijan (y documenten) a
qué subconjuntos se ajustan. GAMMA agrega un nuevo perfil &lt;code&gt;Mesh&lt;/code&gt;, descrito en
&lt;a href=&#34;https://gateway-api.sigs.k8s.io/geps/gep-1686/&#34;&gt;GEP-1686&lt;/a&gt;, que sólo verifica la funcionalidad de service mesh definida por
GAMMA. Ahora mismo, Kuma 2.3+, Linkerd 2.14+ e Istio 1.16+ son completamente
compatibles con el perfil &lt;code&gt;Mesh&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;qué-más-hay-en-gateway-api-v0-8-0&#34;&gt;¿Qué más hay en Gateway API v0.8.0?&lt;/h2&gt;
&lt;p&gt;Ésta versión trata principalmente de preparar Gateway API para la versión
v.1.0, en la que planeamos que HTTPRoute, Gateway y GatewayClass se graduarán
a GA. Hay dos cambios principales relacionados con esta preparación:
validación CEL y cambios en la versión de la API.&lt;/p&gt;
&lt;h3 id=&#34;validación-cel&#34;&gt;Validación CEL&lt;/h3&gt;
&lt;p&gt;Gateway API v0.8.0 comienza la transición desde validación por webhook hasta
&lt;a href=&#34;https://deploy-preview-55907--kubernetes-io-main-staging.netlify.app/docs/reference/using-api/cel/&#34;&gt;validación CEL&lt;/a&gt;, usando información incluida en los CRDs. Esta
transición significa cosas diferentes dependiendo de la versión de Kubernetes
que se use:&lt;/p&gt;
&lt;h4 id=&#34;kubernetes-1-25&#34;&gt;Kubernetes 1.25+&lt;/h4&gt;
&lt;p&gt;La validación CEL está completamente soportada, y casi toda la validación de
Gateway API está implementada en CEL. La única excepción es que, en los
filtros de modificación de cabeceras, CEL solo puede validar los nombres de
las cabeceras sin distinguir entre mayúsculas y minúsculas. Hay más
información en &lt;a href=&#34;https://github.com/kubernetes-sigs/gateway-api/issues/2277&#34;&gt;#2277&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Recomendamos que &lt;em&gt;no&lt;/em&gt; uses el webhook de validación en estas versiones de
Kubernetes.&lt;/p&gt;
&lt;h4 id=&#34;kubernetes-1-23-y-1-24&#34;&gt;Kubernetes 1.23 y 1.24&lt;/h4&gt;
&lt;p&gt;La validación CEL no está soportada, pero aún se puede instalar los CRDs de
Gateway API v0.8.0. Cuando actualices a Kubernetes 1.25+, la validación CEL
incluida en los CRDs se activará automáticamente.&lt;/p&gt;
&lt;p&gt;Recomendamos que sigas usando el webhook de validación en estas versiones de
Kubernetes.&lt;/p&gt;
&lt;h4 id=&#34;kubernetes-1-22-y-versiones-anteriores&#34;&gt;Kubernetes 1.22 y versiones anteriores&lt;/h4&gt;
&lt;p&gt;Gateway API solo se compromete a admitir las &lt;a href=&#34;https://gateway-api.sigs.k8s.io/concepts/versioning/#supported-versions&#34;&gt;cinco versiones más recientes de
Kubernetes&lt;/a&gt;. Por lo tanto, estas versiones ya no están
soportados por Gateway API, y la versión v0.8.0 no se puede instalar en ellas
(porque los CRDs que contengan validación CEL serán rechazados).&lt;/p&gt;
&lt;h3 id=&#34;cambios-en-la-versión-de-la-api&#34;&gt;Cambios en la versión de la API&lt;/h3&gt;
&lt;p&gt;En la versión de Gateway API v1.0, se graduarán los recursos Gateway,
GatewayClass y HTTPRoute a la versión de API v1 desde v1beta1. Como
preparación, seguimos actualizando las versiones de los recursos que se han
graduado desde la versión v1alpha1 a v1beta1. Para más información, consulta
&lt;a href=&#34;https://github.com/kubernetes-sigs/gateway-api/releases/tag/v0.8.0&#34;&gt;las notas de lanzamiento de la versión v0.8.0&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;cómo-empezar-con-gateway-api&#34;&gt;Cómo empezar con Gateway API&lt;/h2&gt;
&lt;p&gt;Gateway API representa el futuro de las APIs de load balancing, enrutamiento
y service mesh en Kubernetes. Ya hay mas que 20 &lt;a href=&#34;https://gateway-api.sigs.k8s.io/implementations/&#34;&gt;implementaciones&lt;/a&gt;
disponibles (incluidos controlodores de ingress y service meshes) y este
número siempre está creciendo.&lt;/p&gt;
&lt;p&gt;Si tienes interés en Gateway API, te recomendamos empezar con &lt;a href=&#34;https://gateway-api.sigs.k8s.io/concepts/api-overview/&#34;&gt;la
documentación oficial sobre conceptos de la API&lt;/a&gt;. Además, las
&lt;a href=&#34;https://gateway-api.sigs.k8s.io/guides/getting-started/&#34;&gt;Guías&lt;/a&gt; cubren la instalación y configuración de Gateway API, y
demuestran cómo usar Gateway API para lograr varios casos de uso comunes. Dado
que esta API se basa en CRDs, puedes instalar la última versión en cualquier
cluster de Kubernetes 1.23+.&lt;/p&gt;
&lt;p&gt;Si tienes ganas de contribuir a Gateway API, ¡nos alegra saberlo! Por favor no
tengas dudas en crear un nuevo issue en nuestro repositorio de GitHub o
unirte a las discusiones. Además puedes consultar la página de la comunidad,
que tiene enlaces a Slack e información sobre nuestras reuniones comunitarias
cada dos semanas.&lt;/p&gt;
&lt;p&gt;Gracias por tu continuo apoyo y comentarios sobre Gateway API. Estamos
emocionados de ver cómo usas esta API en producción y esperamos escuchar
sobre tus experiencias.&lt;/p&gt;
&lt;h2 id=&#34;leer-más&#34;&gt;Leer más&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gateway-api.sigs.k8s.io/geps/gep-1324/&#34;&gt;GEP-1324&lt;/a&gt; proporciona una descripción general de los objetivos de GAMMA y
algunas definiciones importantes. Leer este GEP vale la pena por su
tratamiento del espacio del problema.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gateway-api.sigs.k8s.io/geps/gep-1426/&#34;&gt;GEP-1426&lt;/a&gt; define cómo usar Gateway API recursos de enrutamiento (p.e.
HTTPRoute) para manejar tráfico en una service mesh.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gateway-api.sigs.k8s.io/geps/gep-1686/&#34;&gt;GEP-1686&lt;/a&gt; se basa en el trabajo del &lt;a href=&#34;https://gateway-api.sigs.k8s.io/geps/gep-1709/&#34;&gt;GEP-1709&lt;/a&gt; y define un perfil de
conformidad para que una service mesh se declare conforme con Gateway API.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aunque estos patrones están en &lt;a href=&#34;https://gateway-api.sigs.k8s.io/geps/overview/#status&#34;&gt;Experimental&lt;/a&gt;, están disponibles en el
&lt;a href=&#34;https://gateway-api.sigs.k8s.io/concepts/versioning/#release-channels-eg-experimental-standard&#34;&gt;canal &lt;code&gt;standard&lt;/code&gt;&lt;/a&gt;, porque la iniciativa GAMMA no ha necesito agregar
nuevos recursos o campos hasta ahora.&lt;/p&gt;

      </description>
    </item>
    
  </channel>
</rss>
