Puerta de enlace


En esta página, se describe la implementación de Google Kubernetes Engine (GKE) de la API de Gateway de Kubernetes mediante el controlador de la Gateway de GKE.

La API de puerta de enlace es un estándar de código abierto para redes de servicios. La API de Gateway evoluciona el recurso Ingress y lo mejora de las siguientes maneras:

  • Orientado a roles: Gateway se compone de recursos de API que corresponden a las funciones organizativas del operador de clúster, el desarrollador y el proveedor de infraestructura. Esto permite a los operadores de clúster definir cómo numerosos equipos de desarrolladores diferentes y que no coordinan pueden usar la infraestructura compartida.

  • Portátil: La API de Gateway es un estándar de código abierto con muchas implementaciones. Se diseñó con el concepto de conformidad flexible, que promueve una API central muy portátil (como Ingress) que aún tiene la flexibilidad y extensibilidad para admitir las capacidades nativas del entorno y la implementación. Esto permite que los conceptos y los recursos principales sean coherentes en todas las implementaciones y todos los entornos, lo que reduce la complejidad y aumenta la familiaridad del usuario.

  • Expresivo: Los recursos de la API de la puerta de enlace proporcionan una funcionalidad integrada para la coincidencia basada en encabezados, la ponderación del tráfico y otras capacidades que solo son posibles en Ingress a través de anotaciones personalizadas.

Recursos de la API de Gateway

La API de Gateway es un modelo de recursos orientado a las funciones, diseñado para quienes interactúan con las herramientas de redes de Kubernetes. Como se muestra en el siguiente diagrama, este modelo permite que diferentes propietarios de servicios no coordinados compartan la misma infraestructura de red subyacente de forma segura, de manera que se centralizan las políticas y el control para el administrador de la plataforma.

GKE proporciona clases de Gateway. Los operadores de clústeres crean recursos de puertas de enlace basados en estas clases. Los desarrolladores de aplicaciones crean recursos HTTPRoute que se vinculan a recursos de Gateway.
Figura: Descripción general de la API de Gateway

La API de Gateway contiene los siguientes tipos de recursos:

  • GatewayClass: Define un recurso con alcance de clúster que es una plantilla para crear balanceadores de cargas en un clúster. GKE proporciona GatewayClasses que se pueden usar en clústeres de GKE.
  • Gateway: Define dónde y cómo los balanceadores de cargas escuchan el tráfico. Los operadores de clústeres crean Gateways en sus clústeres en función de una GatewayClass. GKE crea balanceadores de cargas que implementan la configuración definida en el recurso de Gateway.
  • HTTPRoute: Define reglas específicas del protocolo para enrutar solicitudes desde una Gateway hacia servicios de Kubernetes. GKE admite HTTPRouters para el enrutamiento de tráfico basado en HTTP(S). Los desarrolladores de aplicaciones crean HTTPRoutes para exponer sus aplicaciones HTTP mediante puertas de enlace.
  • Política: Define un conjunto de características específicas de la implementación de un recurso Gateway. Puedes adjuntar una política a una puerta de enlace, una ruta o un Service de Kubernetes.

GatewayClass

Una GatewayClass es un recurso que define una plantilla para balanceadores de cargas HTTP(S) (nivel 7) en un clúster de Kubernetes. GKE proporciona GatewayClasses como recursos con alcance de clúster. Los operadores de clúster especifican una GatewayClass cuando crean puertas de enlace en sus clústeres.

Los diferentes GatewayClasses corresponden a diferentes balanceadores de cargas de Google Cloud. Cuando creas una Gateway basada en una GatewayClass, se crea el balanceador de cargas correspondiente para implementar la configuración especificada.

En la siguiente tabla, se enumeran las GatewayClasses disponibles en los clústeres de GKE y su tipo de balanceador de cargas subyacente. Para obtener detalles completos sobre las GatewayClasses, consulta las capacidades y especificaciones de GatewayClass.

Nombre de GatewayClass Descripción
gke-l7-global-external-managed Balanceadores de cargas de aplicaciones externos globales compilados en el balanceador de cargas de aplicaciones externo global
gke-l7-regional-external-managed Balanceadores de cargas de aplicaciones externos regionales compilados en el balanceador de cargas de aplicaciones externo regional
gke-l7-rilb Balanceadores de cargas de aplicaciones internos compilados en el balanceador de cargas de aplicaciones interno
gke-l7-gxlb Balanceadores de cargas de aplicaciones externos globales compilados en el balanceador de cargas de aplicaciones clásico
gke-l7-global-external-managed-mc Balanceadores de cargas de aplicaciones externos globales de varios clústeres compilados en el balanceador de cargas de aplicaciones externo global
gke-l7-regional-external-managed-mc Balanceadores de cargas de aplicaciones externos regionales de varios clústeres compilados en el balanceador de cargas de aplicaciones externo global
gke-l7-rilb-mc Balanceadores de cargas internos de aplicaciones de varios clústeres compilados en el balanceador de cargas de aplicaciones interno
gke-l7-gxlb-mc Balanceadores de cargas de aplicaciones externos globales de varios clústeres compilados en el balanceador de cargas de aplicaciones clásico
gke-td Malla de servicios de Traffic Director de varios clústeres
asm-l7-gxlb Balanceadores de cargas de aplicaciones externos globales compilados en Anthos Service Mesh

Cada GatewayClass está sujeta a las limitaciones del balanceador de cargas subyacente.

Puerta de enlace

Los operadores de clústeres crean Gateways para definir dónde y cómo los balanceadores de cargas escuchan el tráfico. Las Gateways toman su comportamiento (es decir, cómo se implementan) desde su GatewayClass asociada.

La especificación de Gateway incluye la GatewayClass para la Gateway, qué puertos y protocolos se escucharán, y qué rutas pueden vincularse a la Gateway. Una Gateway selecciona rutas en función de los metadatos de la Route; específicamente, el tipo, el espacio de nombres y las etiquetas de los recursos de Route.

Para ver un ejemplo de la implementación de una Gateway, consulta Implementa Gateways.

HTTPRoute

Una HTTPRoute define cómo las solicitudes HTTP y HTTPS que recibe una Gateway se dirigen a los servicios. Los desarrolladores de aplicaciones crean HTTPRoutes para exponer sus aplicaciones a través de Gateways.

Una HTTPRoute define desde qué puertas de enlace se puede enrutar el tráfico, hacia qué servicios se debe enrutar y las reglas que definen con qué tráfico coincide la HTTPRoute. La vinculación de una Gateway y una ruta es bidireccional, lo que significa que ambos recursos deben seleccionarse para que se vinculen. HTTPRoutes puede hacer coincidir solicitudes en función de los detalles del encabezado de la solicitud.

Política

Una política define las características de un recurso de puerta de enlace, generalmente específicas de la implementación, que los operadores de clústeres pueden adjuntar a una puerta de enlace, una ruta o un servicio de Kubernetes. Una política define cómo debe funcionar la infraestructura subyacente de Google Cloud.

Por lo general, una política se adjunta a un espacio de nombres y puede hacer referencia a un recurso en el mismo espacio de nombres, y se otorga el acceso mediante RBAC. La naturaleza jerárquica de la API de la puerta de enlace te permite adjuntar una política a un recurso superior (puerta de enlace) en un espacio de nombres y hacer que todos los recursos subyacentes en diferentes espacios de nombres reciban las características de esa política.

El controlador de la puerta de enlace de GKE admite las siguientes políticas:

  • HealthCheckPolicy: define los parámetros y el comportamiento de la verificación de estado que se usa para verificar el estado de los Pods del backend.
  • GCPGatewayPolicy: Define los parámetros específicos del frontend del balanceador de cargas de Google Cloud. Esto es similar a un FrontendConfig para un recurso de Ingress.
  • GCPBackendPolicy: Define cómo los servicios de backend del balanceador de cargas deben distribuir el tráfico a los extremos. Esto es similar a un BackendConfig para un recurso de Ingress.

Propiedad de la Gateway y patrones de uso

Los recursos de Gateway y de Ruta proporcionan flexibilidad en cuanto a su propiedad y cómo se implementan dentro de una organización. Esto significa que un equipo de infraestructura puede implementar y administrar un solo balanceador de cargas, pero el enrutamiento en un dominio o una ruta en particular puede delegarse a otro equipo en otro espacio de nombres de Kubernetes. El controlador de Gateway de GKE admite el uso de un balanceador de cargas por parte de varios usuarios, compartido entre espacios de nombres, clústeres y regiones. Tampoco es necesario compartir las Gateways si se requiere una propiedad más distribuida. A continuación, se muestran algunos de los patrones de uso más comunes de Gateway en GKE.

Gateway autoadministrada

Un único propietario puede implementar una Gateway y una Ruta solo para sus aplicaciones y usarlas exclusivamente. Las Gateways y las Rutas implementadas de esta manera son similares a Ingress. En el siguiente diagrama, se muestran dos propietarios diferentes del servicio que implementan y administran sus propias Gateways. Al igual que Ingress, cada Gateway corresponde a su propia dirección IP y balanceador de cargas únicos. El propietario del servicio controla por completo las políticas de TLS, enrutamiento y otras políticas.

Un solo propietario puede tener control total sobre la Gateway y la ruta.

Este patrón de uso es común en Ingress, pero es difícil de escalar en muchos equipos debido a la falta de recursos compartidos. El modelo de recursos de la API de Gateway habilita los siguientes patrones de uso que proporcionan una variedad de opciones para el control y la propiedad distribuidos.

Gateway administrada por plataforma por espacio de nombres

La separación entre los recursos de Gateway y Ruta permite que los administradores de la plataforma controlen Gateways en nombre de los propietarios del servicio. Los administradores de la plataforma pueden implementar una Gateway por espacio de nombres o equipo, lo que le brinda a ese espacio de nombres acceso exclusivo para usarla. Esto le da al propietario del servicio control total sobre las reglas de enrutamiento sin ningún riesgo de conflicto para otros equipos. Esto permite que el administrador de la plataforma controle aspectos como la asignación de IP, la exposición de puertos, los protocolos, los dominios y TLS. Los administradores de la plataforma también pueden decidir qué tipos de puertas de enlace están disponibles para los equipos, como Gateways internas o externas/públicas. Este patrón de uso crea una separación clara de responsabilidades entre diferentes roles.

El enrutamiento entre espacios de nombres es lo que permite que las Rutas se conecten a las Gateways a través de los límites de los espacios de nombres. Las Gateways pueden restringir desde qué espacios de nombres se pueden conectar las Rutas. De manera similar, las Rutas especifican las Gateways a las que se conectan, pero solo pueden conectarse a una Gateway que haya permitido el espacio de nombres de la Ruta. Este adjunto bidireccional proporciona a cada lado controles flexibles que permiten esta diversidad de patrones de uso.

En el siguiente diagrama, el administrador de la plataforma implementó una Gateway para un acceso exclusivo en cada espacio de nombres. Por ejemplo, la Gateway store se configura para que solo las rutas del espacio de nombres store puedan adjuntarse a ella. Cada Gateway representa una dirección IP única y de balanceo de cargas, por lo que permite que cada equipo implemente cualquier cantidad de rutas en la Gateway para cualquier dominio o ruta que elija.

Una Gateway por espacio de nombres proporciona acceso exclusivo a una Gateway a ese espacio de nombres.

Gateway compartida por clúster

Compartir Gateways entre espacios de nombres ofrece una forma aún más centralizada de propiedad a los administradores de la plataforma. Esto permite que diferentes propietarios de servicios, que se ejecutan en diferentes espacios de nombres, compartan el mismo dominio DNS, dirección IP, certificados o rutas para un enrutamiento detallado entre los servicios. Las Gateways proporcionan control a los administradores de la plataforma sobre qué espacios de nombres se pueden enrutar para un dominio específico. Esto es similar al ejemplo anterior, excepto que las Gateways permiten la conexión de las Rutas desde más de un espacio de nombres.

En el siguiente diagrama, el administrador de la plataforma implementó dos Gateways en el espacio de nombres infra. La Gateway external permite que las Rutas de los espacios de nombres web y mobile se conecten a la Gateway. Las Rutas del espacio de nombres accounts no pueden usar la Gateway external porque el espacio de nombres accounts solo es para servicios internos. La Gateway internal permite que los clientes internos se comuniquen de forma privada dentro de la VPC mediante direcciones IP privadas.

Una Gateway por clúster permite que diferentes espacios de nombres dentro de un clúster compartan una sola Gateway

El dominio m.example.com se delega al espacio de nombres mobile, que permite a los propietarios del servicio móvil configurar cualquier regla de enrutamiento que necesiten en el dominio m.example.com. Esto les brinda a los propietarios del servicio un mayor control para ingresar nuevos extremos de API y controlar el tráfico sin solicitar un cambio a los administradores.

Controlador de Gateway de GKE

El controlador de puerta de enlace de un solo clúster de GKE observa una API de Kubernetes para recursos de la API de puerta de enlace y concilia los recursos de Cloud Load Balancing para implementar el comportamiento de red especificado por los recursos de puerta de enlace.

El controlador de Gateway de un solo clúster no es un plano de datos de herramientas de redes y no procesa ningún tráfico.

En el siguiente diagrama, se muestra la arquitectura del controlador de Gateway de GKE de un solo clúster. El controlador subyacente que se usa depende de la GatewayClass de la Gateway implementada.

El controlador de Gateway de un solo clúster implementa y administra balanceadores de cargas para GKE, pero no procesa el tráfico de red.

Controlador Controlador de Gateway de un solo clúster Controlador de Gateway de varios clústeres
Administrado por Google Cloud Google Cloud
Permiso del clúster Gateways de un solo clúster Gateways de varios clústeres
La ubicación de la implementación Se implementa de forma regional en la misma región que su clúster de GKE. Se implementa de forma global en varias regiones de Google Cloud.
Cómo habilitar Se habilita de forma predeterminada en GKE. Se habilita a través de la API de Ingress de varios clústeres y se registra en una flota. Consulta Habilitar puertas de enlace de varios clústeres.
GatewayClasses compatibles
  • gke-l7-regional-external-managed GA
  • gke-l7-rilb GA
  • gke-l7-global-external-managed-mc DG
  • gke-l7-regional-external-managed-mc DG
  • gke-l7-rilb-mc DG
  • gke-l7-gxlb-mc DG
  • gke-td Vista previa

Ingress y puerta de enlace

Comparación entre Ingress y Gateway

Ingress y Gateway son estándares de código abierto para enrutar tráfico. La comunidad de Kubernetes diseñó Gateway, sobre la base de las lecciones aprendidas a partir de los ecosistemas de Ingress y de la malla de servicios. Gateway es una evolución de Ingress que proporciona la misma función, entregada como un superconjunto de las capacidades de Ingress. Ambos se pueden usar de forma simultánea sin conflictos, aunque con el tiempo, los recursos de Gateway y Route entregarán más funciones que no están disponibles en Ingress, lo que obligará a los usuarios a comenzar a usar la puerta de enlace, donde podrían haber usado Ingress antes.

En GKE, todos los recursos de Ingress se pueden convertir directamente en recursos de Gateway y HTTPRoute. Un solo Ingress corresponde a un recurso de Gateway (para la configuración de frontend) y de HTTPRoute (para la configuración de enrutamiento). En el siguiente ejemplo, se muestra cómo se ve la configuración de puerta de enlace y HTTPRoute correspondiente. Ten en cuenta que los recursos de puerta de enlace y HTTPRoute se pueden crear por separado y por diferentes usuarios. Las Gateways pueden tener muchas Rutas y una Ruta también puede adjuntarse a más de una puerta de enlace. Las relaciones entre las puertas de enlace y las rutas se analizan en Patrones de uso de puertas de enlace.

Entrada

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.class: "gce-internal"
spec:
  rules:
  - host: "example.com"
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: site
            port:
              number: 80
      - pathType: Prefix
        path: /shop
        backend:
          service:
            name: store
            port:
              number: 80

Puerta de enlace

apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
  name: my-gateway
spec:
  gatewayClassName: gke-l7-rilb
  listeners:
  - name: http
    protocol: HTTP
    port: 80
    allowedRoutes:
      kinds:
      - kind: HTTPRoute

Route

apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
  name: my-route
spec:
  parentRefs:
  - name: my-gateway
  hostnames:
  - "example.com"
  rules:
  - matches:
    - path:
        value: /
    backendRefs:
    - name: site
      port: 80
  - matches:
    - path:
        value: /shop
    backendRefs:
    - name: store
      port: 80

Integra la API de Gateway en mallas de servicios

Puedes configurar una malla de servicios de Traffic Director mediante la API de Gateway. Esto permite comunicaciones de servicio a servicio, administración del tráfico, balanceo de cargas global y aplicación de la política de seguridad para casos de uso de la malla de servicios. Para obtener información completa sobre el uso de Traffic Director con la API de Gateway, incluidas las guías de configuración de implementaciones, consulta la descripción general de la malla de servicios de GKE de Traffic Director.

Precios

Todos los recursos de Compute Engine implementados a través del controlador de la puerta de enlace se cobran en el proyecto en el que residen tus clústeres de GKE. El controlador de Gateway de un solo clúster se ofrece sin cargo adicional como parte de los precios de GKE Standard y Autopilot. Los precios de las puertas de enlace de varios clústeres se describen en la página de precios de Ingress y puerta de enlace de varios clústeres.

¿Qué sigue?