Was ist neu in ADC 0.8, 0.9 und 0.10?

Zeping Bai

Zeping Bai

May 31, 2024

Products

Einführung

ADC (APISIX Declarative CLI) ist ein deklaratives Konfigurationstool, das von API7.ai eingeführt wurde und ein praktisches Toolset für Benutzer bereitstellt, um GitOps zu implementieren. Benutzer können es einfach in ihre CI/CD-Pipelines integrieren, um den gesamten API-Lebenszyklus zu verwalten und API-Upgrades und -Veröffentlichungen abzuschließen. Nach der Veröffentlichung der Version 0.7 hat ADC drei neue Versionen veröffentlicht: 0.8, 0.9 und 0.10, mit Optimierungen und Aktualisierungen in Bezug auf Funktionalität, Leistung und Benutzererfahrung.

Neue Funktionen von ADC

Verbesserungen am Ressourcenänderungsdetektor: Differ

Diese Änderungen wurden in den Versionen 0.8 und 0.9 eingeführt.

Wir haben eine neue Version des Ressourcenänderungsdetektors Differ, v3, eingeführt, die erhebliche Verbesserungen in der Funktionalität und Codequalität aufweist.

  1. Der neue Differ führt einen Standardwert-Zusammenführungsmechanismus für lokale Ressourcen ein, der sicherstellt, dass die Standardwerte der Serverseite die Ressourcenänderungsprüfungen von ADC nicht beeinträchtigen.

    Wenn der Client eine Anfrage zum Erstellen einer Ressource an die API7 oder APISIX Admin API sendet, führt der Server eine Schema-Validierung der übermittelten Anfrage durch. Während dieses Prozesses werden einige Felder, die im Schema mit Standardwerten markiert sind, aber nicht vom Client gesendet werden, automatisch zur übermittelten Ressource hinzugefügt. Infolgedessen wird die Ressource, wenn wir sie erneut von der API lesen, anders sein als die ursprüngliche Übermittlung.

    Frühere ADC-Versionen würden diese Ressourcen als "geändert" auflisten und Update-API-Anfragen an die Admin API senden. Dieses Verhalten führte einige Unsicherheiten für ADC ein, und dieses Problem wurde durch Differ behoben.

  2. Der Standardwert-Zusammenführungsmechanismus wurde im API7-Backend implementiert, wodurch sichergestellt wird, dass Ressourcenunterschiede nur dann als Änderungen betrachtet werden, wenn der Benutzer die lokale YAML-Konfiguration geändert hat.

  3. Verfeinerte Differ-Erkennungsgranularität: ADC führt derzeit Ressourcenänderungsprüfungen separat auf der Ebene des Ressourcenkörpers und der Plugins durch, was dazu beiträgt, Anomalien bei der Prüfung zu reduzieren.

  4. Optimierte Codequalität, vereinfachte redundante Codeabschnitte zur Verbesserung der Lesbarkeit und Behebung einiger Fehler.

Ressourcenfilter

Wir haben zwei Ressourcenfiltermechanismen basierend auf Ressourcenlabels und Ressourcentypen hinzugefügt. Sie können verwendet werden, um unnötige Ressourcen während der Abruf-, Differenzprüfungs- und Synchronisationsvorgänge auszuschließen.

Ressourcenlabel-Filter

Diese Funktion wurde in Version 0.8 eingeführt.

Dieser Filter führt eine Filterung basierend auf dem Labels-Feld der Ressourcen durch. Benutzer können den Filter aktivieren, indem sie den Parameter --label-selector key=value in der Befehlszeile verwenden. Es unterstützt die Konfiguration mehrerer Filterbedingungen, und nur Remote-Ressourcen, die gleichzeitig diese Regeln erfüllen, werden als vorhanden betrachtet, während lokale Ressourcen automatisch mit diesen Labels versehen werden.

Dies stellt sicher, dass wir Ressourcenprüfungen und Synchronisationen in einem kleinen Rahmen durchführen, was dazu beiträgt, die in der CI/CD-Pipeline ausgeführten Aufgaben aufzuteilen und zu verhindern, dass versehentliche Synchronisationen Ressourcen beschädigen, die nicht geändert werden müssen.

Ressourcentyp-Filter

Diese Funktion wurde in Version 0.9 eingeführt.

Wir haben zwei neue Befehlszeilenparameter hinzugefügt: --include-resource-type <type> und --exclude-resource-type <type>, die mehrfach konfiguriert werden können, wobei die Include- und Exclude-Parameter sich gegenseitig ausschließen.

Mit diesen beiden Parametern können wir bestimmte Ressourcentypen aus dem aktuellen Vorgang herausfiltern. Zum Beispiel kann include-resource-type verwendet werden, um eine Whitelist festzulegen und die Ressourcentypen auszuwählen, die in den Vorgang einbezogen werden sollen; während exclude-resource-type die Ressourcentypen bestimmt, die vom Vorgang ausgeschlossen werden sollen.

Dies hilft uns, Ressourcen, die nicht häufig geändert werden müssen, wie Plugin-Metadaten und globale Regeln von Plugins, besser zu handhaben.

Verbesserungen der Befehlszeile

Diese Verbesserungen wurden in Version 0.9 eingeführt.

TLS-Zertifikatskonfiguration

Wir haben eine Reihe von TLS-bezogenen Parametern zur Befehlszeile hinzugefügt, wie z.B.:

  • --ca-cert-file, um die CA-Zertifikatsdatei des Servers anzugeben
  • --tls-skip-verify, um die TLS-Serverzertifikatsüberprüfung zu deaktivieren
  • --tls-client-cert-file und --tls-client-key-file, um die mTLS-Client-Zertifikatsdateien anzugeben

Diese Parameter helfen ADC, eine sichere verschlüsselte Verbindung herzustellen und Man-in-the-Middle-Angriffe zu verhindern.

Timeout-Steuerung

Wir haben den Parameter --timeout <duration> hinzugefügt, um die Timeout-Dauer von API-Aufrufen zu steuern, wobei Syntax wie 1m30s unterstützt wird. Wenn ein Admin-API-Aufruf zu lange dauert oder hängen bleibt, wird der Timeout-Mechanismus wirksam, um ein unendliches Warten zu verhindern.

Debug-Modus

Diese Funktion wurde in Version 0.9 eingeführt.

Wenn ADC intern Ressourcenoperationen durchführt, muss es eine große Anzahl von APIs aufrufen. Manchmal müssen wir diese API-Aufrufe überprüfen, um zu analysieren, ob sie korrekt gesendet werden oder um zu überprüfen, ob die Antworten des Servers den Erwartungen entsprechen. Während dies mit Paketerfassung erreicht werden kann, ist der Vorgang nicht bequem, und es gibt erhebliche Schwierigkeiten, wenn TLS aktiviert ist.

Daher haben wir einen integrierten Debug-Modus in ADC hinzugefügt, der mit dem Parameter --verbose <integer> aktiviert werden kann. Wenn dieser Parameter auf 2 gesetzt wird, wird ADC den Anfrage- und Antwortteil jedes internen API-Aufrufs ausdrucken, um bei der Fehlerbehebung zu helfen.

Dieser Parameter kann auch verwendet werden, um Protokolle auszublenden. Wenn dieser Parameter auf 0 gesetzt wird, werden alle allgemeinen Protokolle außer Fehlern ausgeblendet.

Stärkung der Remote-Ressourcenverarbeitung

Diese Funktion wurde in Version 0.9 eingeführt.

Da ADC nicht der einzige Weg ist, um Dienste, Routen usw. zu konfigurieren, können Benutzer dies auch über das API7 Enterprise Dashboard durch einfache Operationen erreichen. Dies hat zu einem Problem geführt: Die Operationen im Dashboard verwenden zufällig generierte Ressourcen-IDs, während ADC den Ressourcennamen in der YAML-Konfiguration verwendet, um eine feste Ressourcen-ID für die genaue Ressourcenlokalisierung zu generieren.

Das bedeutet, dass wenn der Benutzer eine Ressource im Dashboard erstellt, ADC sie nicht anhand der Ressourcen-ID lokalisieren kann. ADC kann die im Dashboard erstellten Ressourcen nicht ändern oder löschen, aber diese Ressourcen werden dennoch in der Änderungserkennung angezeigt, können jedoch nicht korrekt bearbeitet werden.

Daher haben wir die relevante Logik des API7-Backends ADC optimiert. Wenn sowohl Remote- als auch lokale Ressourcen denselben Namen haben, aber die IDs nicht übereinstimmen, kann ADC die Remote-Ressource korrekt löschen und basierend auf der lokalen Konfiguration eine neue erstellen, wobei die ID von ADC basierend auf dem Ressourcennamen generiert wird und für die nachfolgende Ressourcensuche verwendet werden kann. API7-Dashboard-Benutzer werden nicht beeinträchtigt, und Ressourcen, die von ADC erstellt wurden, können weiterhin im Dashboard angezeigt werden.

Unterstützung von ADC-Erweiterungsfeldern im OpenAPI-Konverter

Diese Funktion wurde in Version 0.10 eingeführt.

Um eine kohärente Pipeline von OpenAPI zu ADC zu API7 zu erstellen, muss der OpenAPI-Konverter die erforderlichen Felder basierend auf unseren Anforderungen in die ADC-YAML-Konfigurationsdatei einfügen.

Zum Beispiel, um das pass_host-Feld im Upstream des Dienstes zu ändern, konnten wir zuvor nur manuell den Konverter verwenden, um die OpenAPI in die ADC-Konfigurationsdatei zu konvertieren, das pass_host-Feld manuell ändern und dann die geänderte Datei in das Git-Repository einreichen, damit die CI/CD-Pipeline die ADC-Synchronisation ausführt. Dieser Prozess ist nicht kohärent und erfordert viel manuellen Eingriff.

Jetzt, durch die eingeführten x-adc-Serien von Erweiterungen, müssen Benutzer nur die Erweiterungsfelder an bestimmten Stellen im OpenAPI-Dokument schreiben, und ADC wird diese Felder korrekt in der generierten Konfigurationsdatei schreiben. Mit diesen Erweiterungen können Benutzer direkt jeden Inhalt in der ADC-Konfiguration auf der OpenAPI ändern, wie z.B. das Hinzufügen von Labels, das Hinzufügen von Plugins und das Überschreiben der Standardkonfiguration von Diensten/Upstreams/Routen.

Dadurch kann durch die Pflege nur einer OpenAPI-Datei die OpenAPI-ADC-API7-Pipeline in einem Schritt implementiert werden, was den GitOps-Workflow für die API-Gateway-Konfiguration erheblich vereinfacht.

Fazit

Das deklarative Konfigurationstool ADC, das von API7.ai eingeführt wurde, kann Unternehmen dabei helfen, GitOps-Management von API-Gateways zu realisieren. In den neuen Versionen 0.8, 0.9 und 0.10 wurde das Tool funktional optimiert und aktualisiert, wobei Funktionen wie Ressourcenänderungsüberwachung und -filterung hinzugefügt wurden. Diese neuen Funktionen verleihen dem vollständigen API-Lebenszyklusmanagement neuen Schwung.

Diese neuen Fähigkeiten ermöglichen es ADC, die Anforderungen von Unternehmen an das GitOps-Management von API-Gateways besser zu erfüllen und die Effizienz und Flexibilität des API-Managements zu verbessern.

Tags: