Citrix ADC Ingress Controller

Erweitertes Content-Routing für Kubernetes Ingress mithilfe der HttpRoute-CRD

Kubernetes natives Ingress bietet grundlegendes host- und pfadbasiertes Routing, das vom Citrix Ingress Controller unterstützt wird. Citrix bietet auch einen alternativen Ansatz mit CRDs für das Inhaltsrouting zur Unterstützung erweiterter Routing-Funktionen. Inhaltsrouting-CRDs umfassen Listener-CRD und HttpRoute-CRD. Diese CRDs bieten erweiterte Funktionen für das Content-Routing wie Regex-basierte Ausdrucks- und Content Switching basierend auf Abfrageparametern, Cookies, HTTP-Headern und anderen benutzerdefinierten Citrix ADC-Ausdrücken.

Mit der Ingress-Version networking.k8s.io/v1führt Kubernetes Unterstützung für Ressourcen-Backendsein. Ein Ressourcen-Backend ist eine ObjectRef Ressource für eine andere Kubernetes-Ressource innerhalb desselben Namespace wie ein Ingress-Objekt.

Citrix unterstützt jetzt die Konfiguration der CRD-Ressource für die HTTP-Route als Ressourcen-Backend in Ingress. Standardmäßig unterstützt Ingress nur begrenzte Funktionen für das Content-Routing wie Pfad- und hostbasiertes Routing. Mit dieser Funktion können Sie erweiterte Funktionen für das Content-Routing auf Ingress erweitern und verschiedene Optionen zum Content Switching konfigurieren. Für eine bestimmte Domäne können Sie die HTTPRoute benutzerdefinierte Ressource verwenden, um die Content Switching zu konfigurieren, ohne die Kompatibilitätsunterstützung der Kubernetes Ingress-API durch Dritte zu verlieren.

Architektur

Hinweis:

  • Diese Funktion unterstützt die Kubernetes Ingress-Version networking.k8s.io/v1, die in Kubernetes 1.19 und späteren Versionen verfügbar ist.

  • Wenn das Ingress-Pfad-Routing und für dieselbe Domäne verwendet HTTPRoute werden, erhalten alle Richtlinien für das Weiterleiten von Inhalten aus der HTTPRoute Ressource eine niedrigere Priorität als die Ingress-basierten Inhaltsroutingrichtlinien. Daher wird empfohlen, alle Content Switching-Richtlinien der HTTPRoute Ressource für eine bestimmte Domäne zu konfigurieren, wenn erweitertes Content-Routing erforderlich ist.

Konfigurieren Sie erweitertes Inhaltsrouting für Kubernetes Ingress mithilfe der HttpRoute-CRD

Dieses Verfahren zeigt, wie eine Httroute-Ressource als Ressourcen-Backend bereitgestellt wird, um erweitertes Inhaltsrouting zu unterstützen.

Voraussetzungen

  • Stellen Sie sicher, dass die Ingress-API-Version im Kubernetes-Cluster verfügbar networking.k8s.io/v1 ist.
  • Stellen Sie sicher, dass die Httproute-CRD bereitgestellt ist.

Bereitstellen der Ingress-Ressource

Definieren Sie die Ingress-Ressource mit dem Ressourcen-Backend, das auf eine HTTPRoute benutzerdefinierte Ressource in einer YAML-Datei verweist. Geben Sie alle Front-End-Konfigurationen wie Zertifikate, Front-End-Profile, Front-End-IP-Adresse und Eingangsklasse als Teil der Ingress-Ressource an.

Es folgt ein Beispiel für eine Ingress-Ressource mit dem Namen 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-->

Nachdem Sie die Ingress-Ressource in einer YAML-Datei definiert haben, stellen Sie die YAML-Datei mit dem folgenden Befehl bereit. Hier ist sample-ingress.yaml die YAML-Dateidefinition.

kubectl apply -f sample-ingress.yaml

In diesem Beispiel werden Content Switching-Richtlinien für die Domäne kuard.example.com als Teil der benutzerdefinierten HTTPRoute-Ressource namens kuard-example-route definiert. Certificates, frontend-ip und ingress class werden als Teil der Ingress-Ressource angegeben. Back-End-Anmerkungen wie die Lastausgleichsmethode und Dienstgruppenkonfigurationen werden als Teil der benutzerdefinierten HTTPRouteRessource angegeben.

Bereitstellen der HttpRoute-Ressource

Definieren Sie die HTTP-Routenkonfiguration in einer YAML-Datei. Verwenden Sie in der YAML-Datei HttpRoute im kind Feld und fügen Sie im spec Abschnitt die HTTPRoute CRD-Attribute hinzu, die auf Ihren Anforderungen für die HTTP-Routenkonfiguration basieren.

Weitere Informationen zur API-Beschreibung und zu Beispielen finden Sie in der HttpRoute-Dokumentation.

Es folgt ein Beispiel für eine HTTPRoute Ressourcenkonfiguration. Dieses Beispiel zeigt, wie auf Abfrageparametern basiertes Content Switching für die verschiedenen Back-End-Microservices von Kubernetes verwendet wird.

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-->

Nachdem Sie die HTTP-Routen in der YAML-Datei definiert haben, stellen Sie die YAML-Datei bereit. In diesem Beispiel ist httproute die YAML-Definition.

kubectl apply -f httproute.yaml
Erweitertes Content-Routing für Kubernetes Ingress mithilfe der HttpRoute-CRD