Enrutamiento de contenido avanzado para Ingress de Kubernetes mediante el CRD HTTPRoute
El Ingress nativo de Kubernetes ofrece enrutamiento básico basado en host y ruta, que es compatible con el NetScaler Ingress Controller. NetScaler también proporciona un enfoque alternativo utilizando CRD de enrutamiento de contenido para admitir capacidades de enrutamiento avanzadas. Los CRD de enrutamiento de contenido incluyen Listener CRD y HTTPRoute CRD. Estos CRD proporcionan características avanzadas de enrutamiento de contenido, como expresiones basadas en regex y conmutación de contenido basada en parámetros de consulta, cookies, encabezados HTTP y otras expresiones personalizadas de NetScaler.
Con la versión de Ingress
networking.k8s.io/v1, Kubernetes introduce soporte para backends de recursos. Un backend de recursos es una ObjectRef a otro recurso de Kubernetes dentro del mismo espacio de nombres que un objeto Ingress.
Ahora, NetScaler admite la configuración del recurso CRD de ruta HTTP como un backend de recursos en Ingress. Por defecto, Ingress solo admite capacidades limitadas de enrutamiento de contenido, como el enrutamiento basado en ruta y host. Con esta característica, puede extender las capacidades avanzadas de enrutamiento de contenido a Ingress y configurar varias opciones de conmutación de contenido. Para un dominio dado, puede usar el recurso personalizado
HTTPRoute para configurar la conmutación de contenido sin perder la compatibilidad con terceros de la API de Ingress de Kubernetes.
Nota:
-
Esta característica es compatible con la versión de Ingress de Kubernetes
networking.k8s.io/v1que está disponible en Kubernetes 1.19 y versiones posteriores. -
Si el enrutamiento de ruta de Ingress y
HTTPRoutese utilizan para el mismo dominio, todas las políticas de enrutamiento de contenido del recursoHTTPRoutetienen menor prioridad que las políticas de enrutamiento de contenido basadas en Ingress. Por lo tanto, se recomienda configurar todas las políticas de conmutación de contenido del recursoHTTPRoutepara un dominio dado si se requiere un enrutamiento de contenido avanzado.
Configurar el enrutamiento de contenido avanzado para Ingress de Kubernetes mediante el CRD HTTPRoute
Este procedimiento muestra cómo implementar un recurso HTTPRoute como un backend de recursos para admitir el enrutamiento de contenido avanzado.
Requisitos previos
-
Asegúrese de que la versión de la API de Ingress
networking.k8s.io/v1esté disponible en el clúster de Kubernetes. -
Asegúrese de que el CRD HTTPRoute esté implementado.
Implementar el recurso Ingress
Defina el recurso Ingress con el backend de recursos apuntando a un recurso personalizado
HTTPRoute 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 Ingress, como parte del recurso Ingress.
A continuación se muestra un recurso 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"
ingress.citrix.com/insecure-termination: "redirect"
spec:
ingressClassName: citrix
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
Después de definir el recurso Ingress en un archivo YAML, implemente el archivo YAML utilizando el siguiente comando. Aquí,
sample-ingress.yaml es la definición del archivo YAML.
kubectl apply -f sample-ingress.yaml
En este ejemplo, las políticas de conmutación 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 del grupo de servicios, se especifican como parte del recurso personalizado HTTPRoute.
Implementar el recurso HTTPRoute
Defina la configuración de la ruta HTTP en un archivo YAML. En el archivo YAML, utilice HTTPRoute en el campo
kind y en la sección spec añada los atributos CRD HTTPRoute según sus requisitos para la configuración de la ruta HTTP.
Para obtener más información sobre la descripción y los ejemplos de la API, consulte la documentación de HTTPRoute.
A continuación se muestra una configuración de recurso
HTTPRoute de ejemplo. Este ejemplo muestra cómo utilizar la conmutación de contenido basada en parámetros de consulta para los diversos 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
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