Citrix ADC Ingress Controller

API Gateway mit GitOps bereitstellen

Benutzerdefinierte Ressourcendefinitionen (CRDs) sind die primäre Methode zur Konfiguration von API-Gateway-Richtlinien in Cloud-nativen Bereitstellungen. Die Betriebsteams erstellen die Konfigurationsrichtlinien (Routing, Authentifizierung, Rewrite, Web Application Firewall (WAF) usw.) und wenden sie in Form von CRDs an. In einem API-Gateway-Kontext werden diese Richtlinien auf die spezifischen APIs und Upstream angewendet, die diese APIs hosten.

API-Entwickler dokumentieren die API-Details in einem offenen API-Spezifikationsformat für die Entwickler von Clientsoftware und Peer-Service-Implementierungsteams zur Verwendung der API-Details API-Dokumente enthalten Informationen wie Basispfad, Pfad, Methode, Authentifizierung und Autorisierung.

Betriebsteams können die Informationen in einem API-Spezifikationsdokument verwenden, um das API-Gateway zu konfigurieren. Git, eine Quellcodeverwaltungslösung, wird häufig von Entwicklern und Betriebsteams verwendet. Die GitOps-Lösung erleichtert die Zusammenarbeit und Kommunikation zwischen Entwicklungs- und Betriebsteams. GitOps hilft dabei, Kubernetes schneller, optimierter und kontinuierlicher bereitzustellen, ohne an Stabilität zu verlieren.

Die API Gateway-Bereitstellung mit der GitOps-Lösung ermöglicht es Betriebsteams, das von Softwareentwicklern in der API-Gateway-Konfiguration erstellte API-Spezifikationsdokument zu verwenden. Diese Lösung automatisiert den Aufgaben- und Informationsaustausch zwischen API-Entwicklungs- und Betriebsteams.

Über die GitOps-Lösung für API Gateway

Die GitOps-Lösung besteht hauptsächlich aus drei Einheiten:

  • API-Spezifikationsdokument öffnen
  • CRDs für Richtlinienvorlagen
  • API-Gateway-Bereitstellung CRD

Öffnen Sie das API-Spezifikations

Das von API-Entwicklern oder API-Designern erstellte Dokument enthält API-Informationen. Die GitOps-Lösung verwendet die folgenden Details aus einem Open-API-Spezifikationsdokument:

  • Basis-Pfad
  • Pfad
  • Methode
  • Tags
  • Authentifizierung
  • Autorisierung

Im Folgenden finden Sie ein Beispiel für eine Open API-Spezifikationsdatei mit den Details (in Rot), die zum automatischen Erstellen von Richtlinien verwendet werden.

API-Spezifikation öffnen

CRDs für Richtlinienvorlagen

CRDs sind die primäre Methode zur Konfiguration einer API-Gateway-Instanz. Das Betriebsteam erstellt und verwaltet die CRD-Implementierungen. Im herkömmlichen Workflow füllt das Betriebsteam im Rahmen der Erstellung der Richtlinien die Zieldetails wie Upstream und API-Pfad in den CRD-Instanzen manuell aus. In der GitOps-Lösung werden der API-Pfad und die Details der Originalautoren automatisch abgeleitet. Das Betriebsteam erstellt die CRDs ohne Zieldetails, und die Lösung bezeichnet solche CRD-Instanzen als Richtlinienvorlagen.

Die GitOps-Lösung unterstützt die folgenden Richtlinienvorlagen:

  • Rewrite-Richtlinie
  • Rate Limit Richtlinie
  • Authentifizierungsrichtlinie
  • WAF

Im Folgenden finden Sie ein Beispiel für eine Rewrite-Richtlinienvorlage:

Hinweis: Informationen zum Erstellen einer CRD-Instanz finden Sie in den einzelnen CRDs.

Richtlinienvorlage

API-Gateway-Bereitstellung CRD

Die CRD für die API-Gateway-Bereitstellung bindet das API-Spezifikationsdokument mit Richtlinienvorlagen. Diese CRD ermöglicht die Zuordnung von API-Ressourcen mit Upstream-Diensten und API-Gateway-Richtlinien in Bezug auf Routing und Sicherheit. Die CRD für die API-Gateway-Bereitstellung wird vom Betriebsteam mit den vom Entwicklungsteam erhaltenen Daten verwaltet.

Die API Gateway-Bereitstellungs-CRD konfiguriert Folgendes:

  • Einzelheiten zum Git-Repository
  • Endpoint-Listener
  • API zur Upstream-Zuordnung
  • API zur Richtlinienzuordnung
  • Offene API-Authentifizierungsrichtlinienverweise auf die Zuordnung von Authentifizierungsvorlagen

Alternativ unterstützt API Gateway CRD Nicht-GIT-Quellen zum Abrufen von OpenAPI Specification (OAS) -Dokumenten. Derzeit werden sowohl HTTP- als auch HTTPS-URL-Quellen unterstützt. Diese URLs können kennwortgeschützt sein und die grundlegende HTTP-Authentifizierung wird unterstützt. Anmeldeinformationen können mit denselben Feldern wie bei Git-basierten OAS-Dateiquellen konfiguriert werden.

Die folgende Abbildung zeigt die CRD für die API Gateway-Bereitstellung, die die API-Spezifikation mithilfe der API-Selektoren und Richtlinienzuordnungen mit Richtlinienvorlagen bindet.

API-Spezifikation öffnen

APIs, die mit dem regulären Ausdruck /pet beginnen, werden mit dem Pfad regexp-Muster ausgewählt und APIs mit /play werden mit dem play-Tag ausgewählt. Sicherheitsdefinitionen im API-Spezifikationsdokument werden den verfügbaren Authentifizierungs-, Autorisierungs- und Überwachungskonfigurationen in der CRD-Vorlage für die Authentifizierung zugeordnet.

API-Gateway-CRD konfigurieren

Das API Gateway CRD bindet die in der Swagger-Spezifikation definierten API-Ressourcen an die in den anderen CRDs definierten Richtlinien.

Voraussetzungen

Wenden Sie CRD-Definitionen für die folgenden CRD-Objekte an:

API-Definition

Es enthält Informationen über das Git-Repository, in dem der Git-Watcher die Open-API-Spezifikationsdateien überwacht.

API-Definition: Zugriffsdetails für Git-Repository

Feld Beschreibung
Repository Gibt die Git-Repository-URL
Branch Gibt den Git-Zweignamen an (Standardmäßig Master).
oas_secret_ref Gibt die geheime Git-Zugriffsreferenz als geheimen Kubernetes-Objektnamen an. Hinweis: Wenn Sie ein Geheimnis erstellen, behalten Sie die username und password als geheime Feldnamen für Git-Zugangsdaten bei.
Files Auf die Anmeldeinformationen für diese OAS-URLs kann über die oas_secret_ref Feldkombinationen von Feld oder Benutzername und Kennwort zugegriffen werden.

API-Proxy

Es liefert Informationen über die Endpunktkonfiguration (VIP), die verwendet wird, um die APIs auf dem API-Gateway-Frontend verfügbar zu machen.

api_proxy: VIP-Einzelheiten

Feld Beschreibung
ip_address Gibt die IP-Adresse des Endpunkts (VIP) an.
port Gibt den Endpunkt-Anschluss an.
protocol Spezifiziert das Protokoll (Http/Https).
secret Gibt das SSL-Zertifikatsgeheimnis für die Endpunktkonfiguration an.

Richtlinien-Zuordnungen

Es ordnet die API-Ressourcen den Upstream-Diensten und Richtlinienvorlagen zu. Einige Informationen in diesem Abschnitt werden von den Entwicklern gesammelt, wenn das Betriebsteam das CRD erstellt.

Abschnitt Sub Abschnitt Feld Sub-Feld Beschreibung
Richtlinien       Gibt die Richtlinie und die Upstream-Zuordnung an.
    Name   Gibt den Namen der Richtlinie an. Es ist in einer CRD-Instanz eindeutig.
  Selektor     Eine Liste von Filtern zur Auswahl der API-Ressourcen.
    API   Gibt das Regexp-Muster für die API-Auswahl an. Alle APIs, die mit diesem Muster übereinstimmen, werden für die Anwendung von Richtlinien aus diesem Block ausgewählt.
    method   Eine Liste von HTTP-Verben, wenn das API-Ressourcenverb mit ANY in der Liste übereinstimmt, wird es ausgewählt.
    Tags   Eine Liste von Tags, die mit einer API übereinstimmen. Diese Tags werden mit den Tags im Dokument zur API-Spezifikation abgeglichen. Sie können entweder ragexp-basierte Pfadmuster oder -Tags verwenden, um eine Richtlinie abzugleichen.
  Stromaufwärts.     Gibt die Originalautoren für die ausgewählte Richtlinie an.
    Service   Gibt den Namen des Back-End-Dienstes an.
    Port   Gibt den Back-End-Dienstport an.
  Policy-bindend     Gibt die Richtlinienliste an, die auf die ausgewählte API angewendet werden soll.
      Typ der Richtlinienvorlage Gibt den genauen Richtlinientyp an. Unterstützte Typen sind WAF, Rewrite-Richtlinie und Ratenlimit.
      Name Gibt den Namen der Richtlinienvorlage an.

AAA-Zuordnungen

Es ordnet die Authentifizierungsreferenzen im API-Spezifikationsdokument den verfügbaren Abschnitten zur Richtliniendefinition in der CRD-Vorlage für die Authentifizierung zu.

Abschnitt Sub Abschnitt Feld Sub-Feld Beschreibung
aaa       Zuordnungen von Richtlinienabschnitten für Authentifizierung, Autorisierung und Überwachung.
    crd_name   Gibt den Namen der CRD-Vorlage für die Authentifizierung an.
  Zuordnungen     Zuordnung von Verweisen auf Sicherheitsrichtlinien für API-Spezifikationen zu den entsprechenden Abschnitten in der CRD-Vorlage für die Authentifizierung. Hinweis: Wenn sich die API-Spezifikation auf Zeichenfolgenübereinstimmungen mit dem Namen des Richtlinienabschnitts in der CRD-Vorlage bezieht, ist eine explizite Zuordnung nicht erforderlich.

Führen Sie die folgenden Schritte aus, um die API Gateway CRD bereitzustellen:

  1. Laden Sie die API Gateway CRDherunter.

  2. Stellen Sie die API Gateway-CRD mit dem folgenden Befehl bereit:

        kubectl create -f apigateway-crd.yaml`
    

    Im Folgenden finden Sie ein Beispiel für eine API Gateway CRD-Konfiguration:

    apiVersion: citrix.com/v1beta1
    kind: apigatewaypolicy
    metadata:
      name: apigatewaypolicyinstance
    spec:
        api_definition:
            repository: "https://code.citrite.net/scm/cnn/cic-gitops.git"
            branch: "modify-test-branch"
            oas_secret_ref: "mysecret"
            files:
                - "test_gitwatcher/petstore.yaml"
                - "test_gitwatcher/playstore.yaml"
        api_proxy:
            ipaddress: "10.106.172.83"
            port:  80
            protocol: "http"
            secret: "listner-secret"
        policies:
          - name: "p1"
            selector:
                - api: "/pet.\*"
                  method: ["GET", "POST"]
            upstream:
                service: "pet-service"
                port: 80
            policy_bindings:
                ratelimit:
                    name: "ratelimit-gitops-slow"
          - name: "p2"
            selector:
                - api: "/user.\*"
                  method: ["GET", "POST"]
            upstream:
                service: "user-service"
                port: 80
            policy_bindings:
                ratelimit:
                    name: "ratelimit-gitops-slow"
          - name: "p3"
            selector:
                - tags: ["play"]
            upstream:
                service: "play-service"
                port: 80
            policy_bindings:
                ratelimit:
                    name: "ratelimit-gitops"
                rewritepolicy:
                    name: "prefixurl"
                waf:
                    name: "buffoverflow"
        aaa:
          - crd_name: authgitops
            mappings:
              - petstore_auth: jwt-auth-provider
              - api_key: introspect-auth-provider
    <!--NeedCopy-->
    

Unterstützung für Web Insight basierte Analysen

Web Insight-basierte Analysen werden jetzt mit der API-Gateway-CRD unterstützt. Wenn Sie GitOps verwenden, sind die folgenden Web Insight-Parameter standardmäßig aktiviert:

  • httpurl
  • httpuseragent
  • httphost
  • httpmethod
  • httpcontenttype
API Gateway mit GitOps bereitstellen