Ingress Controller de Citrix ADC

Redirección de contenido avanzado para Kubernetes Ingress mediante la CRD de HTTPRoute

Ingress nativo de Kubernetes ofrece redirección básica basado en host y rutas que es compatible con el Citrix Ingress Controller. Citrix también proporciona un enfoque alternativo mediante el uso de CRD de redirección de contenido para admitir capacidades de redirección avanzadas. Los CRD de redirección de contenido incluyen CRD de escucha y CRD de HTTPRoute. Estos CRD proporcionan funciones avanzadas de redirección de contenido, como expresiones basadas en expresiones regulares y cambio de contenido en función de parámetros de consulta, cookies, encabezados HTTP y otras expresiones personalizadas de Citrix ADC.

Con la versión Ingress networking.k8s.io/v1, Kubernetes introduce soporte para backends de recursos. Un backend de recursos es un recurso ObjectRef de Kubernetes en el mismo espacio de nombres que un objeto Ingress.

Ahora, Citrix admite la configuración del recurso CRD de ruta HTTP como un backend de recursos en Ingress. De forma predeterminada, Ingress solo admite capacidades limitadas de redirección de contenido, como la redirección basada en hosts y rutas. Con esta función, puede ampliar las capacidades avanzadas de redirección de contenido a Ingress y configurar varias opciones de cambio de contenido. Para un dominio determinado, puede usar el recurso personalizado HTTPRoute para configurar el cambio de contenido sin perder el soporte de compatibilidad de terceros de la API de Kubernetes Ingress.

Arquitectura

Nota:

  • Esta función es compatible con la versión de Kubernetes Ingress networking.k8s.io/v1 que está disponible en Kubernetes 1.19 y versiones posteriores.

  • Si la redirección de rutas de entrada y HTTPRoute se utilizan para el mismo dominio, todas las directivas de redirección de contenido del recurso HTTPRoute tienen una prioridad más baja que las directivas de redirección de contenido basadas en entrada. Por lo tanto, se recomienda configurar todas las directivas de conmutación de contenido del recurso HTTPRoute para un dominio determinado si se requiere la redirección de contenido avanzado.

Configurar la redirección de contenido avanzado para Kubernetes Ingress mediante la CRD de HTTPRoute

Este procedimiento muestra cómo implementar un recurso HTTPRoute como backend de recursos para admitir la redirección de contenido avanzado.

Requisitos previos

  • Asegúrese de que la versión de la API de entrada networking.k8s.io/v1 esté disponible en el clúster de Kubernetes.
  • Asegúrese de que la CRD de HTTPRoute esté implementada.

Implementar el recurso Ingress

Defina el recurso Ingress con el back-end del recurso apuntando a un recurso HTTPRoute personalizado en un archivo YAML. Especifique todas las configuraciones de front-end, como certificados, perfiles de front-end, dirección IP de front-end y clase de entrada, como parte del recurso Ingress.

A continuación se presenta un recurso de Ingress de ejemplo denominado sample-ingress.yaml.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kuard-ingress
  annotations:
    ingress.citrix.com/frontend-ip: "x.x.x.x"
    kubernetes.io/ingress.class: citrix
    ingress.citrix.com/insecure-termination: "redirect"
spec:
  tls:
  - secretName: web-ingress-secret
  rules:
  - host: kuard.example.com
    http:
      paths:
      - pathType: ImplementationSpecific
        backend:
          resource:
            apiGroup: citrix.com
            kind: HTTPRoute
            name: kuard-example-route
<!--NeedCopy-->

Después de definir el recurso Ingress en un archivo YAML, implemente el archivo YAML con el siguiente comando. Aquí sample-ingress.yaml es la definición del archivo YAML.

kubectl apply -f sample-ingress.yaml

En este ejemplo, las directivas de cambio de contenido para el dominio kuard.example.com se definen como parte del recurso personalizado HTTPRoute llamado kuard-example-route. Certificates, frontend-ip y ingress class se especifican como parte del recurso Ingress. Las anotaciones de back-end, como el método de equilibrio de carga y las configuraciones de grupos de servicios, se especifican como parte del recurso HTTPRoute personalizado.

Implementar el recurso HTTPRoute

Defina la configuración de la ruta HTTP en un archivo YAML. En el archivo YAML, use HTTPRoute en el campo kind y, en la sección spec, agregue los atributos HTTPRoute CRD según sus requisitos para la configuración de ruta HTTP.

Para obtener más información sobre la descripción y los ejemplos de la API, consulta la documentación de HTTPRoute.

A continuación se presenta un ejemplo de configuración de recursos HTTPRoute. En este ejemplo se muestra cómo usar la conmutación de contenido basada en parámetros de consulta para los distintos microservicios de back-end de Kubernetes.

apiVersion: citrix.com/v1
kind: HTTPRoute
metadata:
   name: kuard-example-route
spec:
  hostname:
  - kuard.example.com
  rules:
  - name: kuard-blue
    match:
    - queryParams:
      - name: version
        contains: v2
    action:
      backend:
        kube:
          service: kuard-blue
          port: 80
  - name: kuard-green
    match:
    - queryParams:
      - name: version
        contains: v3
    action:
      backend:
        kube:
          service: kuard-green
          port: 80
  - name: kuard-default
    match:
    - path:
       prefix: /
    action:
      backend:
        kube:
          service: kuard-purple
          port: 80
<!--NeedCopy-->

Una vez que haya definido las rutas HTTP en el archivo YAML, implemente el archivo YAML. En este ejemplo, httproute es la definición de YAML.

kubectl apply -f httproute.yaml
Redirección de contenido avanzado para Kubernetes Ingress mediante la CRD de HTTPRoute