Konfigurieren der Streaming-API

Überblick

In diesem Kapitel wird beschrieben, wie die Streaming-API so konfiguriert wird, dass das Abonnieren von Metriknachrichten über Kafka möglich ist.

PR

Im Folgenden gehen wir durch:

  • So aktivieren Sie die Streaming-API
  • Konfigurieren von Kafka zum Abhören externer Clients
  • Konfigurieren von Kafka für die Verwendung von ACLs und Einrichten der SSL-Verschlüsselung für diese Clients

Was ist Kafka?

Kafka ist eine Event-Streaming-Plattform, die die Echtzeiterfassung von Daten, die von verschiedenen Ereignisquellen (Sensoren, Datenbanken, mobile Geräte) in Form von Ereignisströmen gesendet werden, sowie die dauerhafte Speicherung dieser Ereignisströme für einen späteren Abruf und eine spätere Bearbeitung ermöglicht.

Mit Kafka ist es möglich, das Ereignis-Streaming durchgängig verteilt, hoch skalierbar, elastisch, fehlertolerant und sicher zu verwalten.

Hinweis:

Kafka ist vielseitig konfigurierbar und wurde für Skalierbarkeit und redundante Systeme konzipiert. Dieses Dokument konzentriert sich nur darauf, wie es konfiguriert wird, um die Streaming-API-Funktion im Paragon Active Assurance Control Center zu nutzen. Für fortgeschrittenere Setups verweisen wir auf die offizielle Kafka-Dokumentation: kafka.apache.org/26/documentation.html.

Terminologie

  • Kafka: Event-Streaming-Plattform.
  • Kafka Thema: Sammlung von Ereignissen.
  • Kafka-Anwender/-Verbraucher: Komponente, die für den Abruf von Ereignissen verantwortlich ist, die in einem Kafka-Thema gespeichert sind.
  • Kafka-Broker: Speicherschichtserver eines Kafka-Clusters.
  • SSL/TLS: SSL ist ein sicheres Protokoll, das für das sichere Senden von Informationen über das Internet entwickelt wurde. TLS ist der Nachfolger von SSL, das 1999 eingeführt wurde.
  • SASL: Framework, das Mechanismen für die Benutzer Authentifizierung, die Überprüfung der Datenintegrität und die Verschlüsselung bereitstellt.
  • Streaming-API-Anwender: Komponente, die für den Abruf von Ereignissen verantwortlich ist, die in in Paragon Active Assurance definierten Themen gespeichert sind und für den externen Zugriff bestimmt sind.
  • Zertifizierungsstelle: Eine vertrauenswürdige Entität, die Zertifikate mit öffentlichem Schlüssel ausstellt und widerruft.
  • Stammzertifikat der Zertifizierungsstelle: Zertifikat mit öffentlichem Schlüssel, das eine Zertifizierungsstelle identifiziert.

Funktionsweise der Streaming-API

Wie bereits erwähnt, ermöglicht die Streaming-API externen Clients, Informationen zu Metriken aus Kafka abzurufen.

Alle Metriken, die von den Test-Agents während einer Test- oder Überwachungsaufgabe erfasst werden, werden an den Stream-Dienst gesendet. Nach einer Verarbeitungsphase veröffentlicht der Stream-Dienst diese Metriken zusammen mit zusätzlichen Metadaten auf Kafka.

Diagram showing system architecture with Token Assistance and Stream Service. Token Assistance involves token request and verification. Stream Service includes Stream A and Stream B. Token Agent icons manage tokens.

Kafka-Themen

Kafka hat das Konzept der Themen , zu denen alle Daten veröffentlicht werden. In Paragon Active Assurance stehen viele solcher Kafka-Themen zur Verfügung; Allerdings ist nur eine Teilmenge davon für den Zugriff von außen vorgesehen.

Jedes Paragon Active Assurance-Konto im Control Center hat zwei spezielle Themen. Nachfolgend ACCOUNT finden Sie den Kurznamen des Kontos:

  • paa.public.accounts.{ACCOUNT}.metrics
    • Alle Metrikmeldungen für das angegebene Konto werden in diesem Thema veröffentlicht
    • Große Datenmengen
    • Hohe Aktualisierungsfrequenz
  • paa.public.accounts.{ACCOUNT}.metadata
    • Enthält Metadaten zu den Metrikdaten, z. B. zum Test, Monitor oder Testagenten, der den Metriken zugeordnet ist
    • Kleine Datenmengen
    • Geringe Aktualisierungshäufigkeit

Aktivieren der Streaming-API

Hinweis:

Diese Anweisungen sind auf dem Control Center-Server mit sudoauszuführen.

Da die Streaming-API dem Kontrollzentrum einen gewissen Aufwand hinzufügt, ist sie standardmäßig nicht aktiviert. Um die API zu aktivieren, müssen wir zuerst die Veröffentlichung von Metriken in Kafka in der Hauptkonfigurationsdatei aktivieren:

  • /etc/netrounds/netrounds.conf
Warnung:

Die Aktivierung dieser Funktion kann sich auf die Leistung von Control Center auswirken. Stellen Sie sicher, dass Sie Ihre Instanz entsprechend dimensioniert haben.

Um als Nächstes die Weiterleitung dieser Metriken an die richtigen Kafka-Themen zu ermöglichen:

  • /etc/netrounds/metrics.yaml

Führen Sie Folgendes aus, um die Streaming-API-Dienste zu aktivieren und zu starten:

Starten Sie schließlich die Dienste neu:

Überprüfen, ob die Streaming-API im Kontrollzentrum funktioniert

Hinweis:

Diese Anweisungen sind auf dem Control Center-Server auszuführen.

Sie können jetzt überprüfen, ob Sie Metriken zu den richtigen Kafka-Themen erhalten. Installieren Sie dazu das kafkacat Dienstprogramm:

Wenn Sie einen Test oder Monitor im Control Center ausführen, sollten Sie in der Lage kafkacat sein, Metriken und Metadaten zu diesen Themen zu erhalten.

Ersetzen Sie myaccount durch den Kurznamen Ihres Kontos (dies sehen Sie in Ihrer Control Center-URL):

Sie sollten jetzt Metriken sehen, indem Sie diesen Befehl ausführen:

Um Metadaten anzuzeigen, führen Sie den folgenden Befehl aus (beachten Sie, dass dies nicht so häufig aktualisiert wird):

Hinweis: Dies ist nur eine Plausibilitätsprüfung, um sicherzustellen, dass die Dinge korrekt veröffentlicht werden. Die Daten, die veröffentlicht werden, liegen in binärer Form vor, die kafkacat standardmäßig nicht decodiert wird. Informationen zum ordnungsgemäßen Abonnieren dieser Themen finden Sie im Abschnitt Kundenbeispiele.

Dadurch wird überprüft, ob wir über eine funktionierende Streaming-API im Control Center verfügen. Höchstwahrscheinlich sind Sie jedoch daran interessiert, stattdessen von einem externen Client auf die Daten zuzugreifen. Im nächsten Abschnitt wird beschrieben, wie Sie Kafka für den externen Zugriff öffnen.

Öffnung von Kafka für externe Hosts

Hinweis:

Diese Anweisungen sind auf dem Control Center-Server auszuführen.

Standardmäßig ist Kafka, das im Control Center ausgeführt wird, so konfiguriert, dass es nur auf localhost für den internen Gebrauch lauscht. Es ist möglich, Kafka für externe Clients zu öffnen, indem Sie die Kafka-Einstellungen ändern.

Verbindung zu Kafka: Vorbehalte

VORSICHT:

Bitte lesen Sie dies sorgfältig durch, da es leicht zu Verbindungsproblemen mit Kafka kommen kann, wenn Sie diese Konzepte nicht verstanden haben.

In der in diesem Dokument beschriebenen Control Center-Einrichtung gibt es nur einen einzigen Kafka-Broker.

Beachten Sie jedoch, dass ein Kafka-Broker als Teil eines Kafka-Clusters ausgeführt werden soll, der aus vielen Kafka-Brokern bestehen kann.

Bei der Verbindung mit einem Kafka-Broker wird eine erste Verbindung vom Kafka-Client aufgebaut. Über diese Verbindung gibt der Kafka-Broker wiederum eine Liste von "angekündigten Listenern" zurück, bei der es sich um eine Liste eines oder mehrerer Kafka-Broker handelt.

Beim Empfang dieser Liste trennt der Kafka-Client die Verbindung zu einem dieser angekündigten Listener und stellt dann die Verbindung zu einem dieser angekündigten Listener wieder her. Die angekündigten Listener müssen Hostnamen oder IP-Adressen enthalten, auf die der Kafka-Client zugreifen kann, da der Client sonst keine Verbindung herstellen kann.

Wenn eine SSL-Verschlüsselung verwendet wird, bei der ein SSL-Zertifikat verwendet wird, das an einen bestimmten Hostnamen gebunden ist, ist es noch wichtiger, dass der Kafka-Client die richtige Adresse erhält, mit der er sich verbinden kann, da sonst die Verbindung abgelehnt werden kann.

Lesen Sie hier mehr über Kafka-Hörer: www.confluent.io/blog/kafka-listeners-explained

SSL/TLS-Verschlüsselung

Um sicherzustellen, dass nur vertrauenswürdige Clients auf Kafka und die Streaming-API zugreifen können, müssen wir Folgendes konfigurieren:

  • Authentifizierung: Clients müssen Benutzername und Passwort über eine sichere SSL/TLS-Verbindung zwischen dem Client und Kafka angeben.
  • Autorisierung: Authentifizierte Clients können Aufgaben ausführen, die durch ACLs geregelt werden.

Hier ein Überblick:

Diagram showing a desktop computer setup with a monitor, keyboard, mouse, and computer tower.

Um die Funktionsweise der SSL/TLS-Verschlüsselung für Kafka vollständig zu verstehen, lesen Sie bitte die offizielle Dokumentation: docs.confluent.io/platform/current/kafka/encryption.html

SSL/TLS-Zertifikate im Überblick

Hinweis:

In diesem Unterabschnitt werden wir die folgende Terminologie verwenden:

Zertifikat: Ein SSL-Zertifikat, das von einer Zertifizierungsstelle (Certificate Authority, CA) signiert wurde. Jeder Kafka-Broker hat einen.

Keystore: Die Keystore-Datei, in der das Zertifikat gespeichert ist. Die Keystore-Datei enthält den privaten Schlüssel des Zertifikats. daher muss es sicher aufbewahrt werden.

Truststore: Eine Datei mit den Zertifikaten der vertrauenswürdigen CA.

Um die Authentifizierung zwischen einem externen Client und Kafka einzurichten, das im Control Center ausgeführt wird, müssen beide Seiten über einen Schlüsselspeicher mit einem zugehörigen Zertifikat verfügen, das von einer Zertifizierungsstelle (CA) zusammen mit dem CA-Root-Zertifikat signiert wurde.

Darüber hinaus muss der Client über einen Truststore mit dem CA-Root-Zertifikat verfügen.

Das CA-Stammzertifikat ist für den Kafka-Broker und den Kafka-Client gleich.

Erstellen der erforderlichen Zertifikate

Dies wird im Anhang behandelt.

Kafka Broker SSL/TLS-Konfiguration im Control Center

Hinweis:

Diese Anweisungen sind auf dem Control Center-Server auszuführen.

Hinweis:

Bevor Sie fortfahren, müssen Sie den Keystore erstellen, der das SSL-Zertifikat enthält, indem Sie den Anweisungen im Anhang folgen. Die unten genannten Pfade stammen aus diesen Anweisungen.

Der SSL-Keystore ist eine auf der Festplatte gespeicherte Datei mit der Dateierweiterung .jks.

Sobald Sie die erforderlichen Zertifikate sowohl für den Kafka-Broker als auch für den Kafka-Client erstellt haben, können Sie fortfahren, indem Sie den Kafka-Broker konfigurieren, der im Kontrollzentrum ausgeführt wird. Sie müssen Folgendes wissen:

  • <public_hostname>: Der öffentliche Hostname von Control Center; dies muss auflösbar und für Kafka-Clients zugänglich sein.
  • <keystore_pwd>: Das Keystore-Passwort, das beim Erstellen des SSL-Zertifikats angegeben wurde.
  • <admin_pwd> und <client_pwd>: Dies sind die Kennwörter, die Sie für den Administrator bzw. den Client-Benutzer festlegen möchten. Beachten Sie, dass Sie weitere Benutzer hinzufügen können, wie im Beispiel gezeigt.

Bearbeiten oder hängen sudo Sie die folgenden Eigenschaften in /etc/kafka/server.propertiesan und fügen Sie die obigen Variablen wie gezeigt ein:

Warnung:

Nicht entfernen PLAINTEXT://localhost:9092; Dies unterbricht die Funktionalität des Control Center, da interne Dienste nicht kommunizieren können.

Einrichten von Zugriffssteuerungslisten (ACLs)

ACLs auf localhost aktivieren

Warnung:

Wir müssen zuerst ACLs für localhost einrichten, damit Control Center selbst weiterhin auf Kafka zugreifen kann. Wenn dies nicht getan wird, werden die Dinge kaputt gehen.

Dann müssen wir ACLs für den externen schreibgeschützten Zugriff aktivieren, damit externe Benutzer die paa.public.* Themen lesen können.

Hinweis:

Eine genauere Steuerung finden Sie in der offiziellen Kafka-Dokumentation.

Sobald Sie damit fertig sind, müssen Sie die Dienste neu starten:

Um zu überprüfen, ob ein Client eine sichere Verbindung herstellen kann, führen Sie den folgenden Befehl auf einem externen Clientcomputer (nicht auf dem Control Center-Server) aus. Unten PUBLIC_HOSTNAME ist der Hostname des Control Centers:

In der Befehlsausgabe sollten Sie das Serverzertifikat sowie Folgendes sehen:

Um sicherzustellen, dass interne Dienste Zugriff auf den Kafka-Server erhalten haben, überprüfen Sie bitte die folgenden Logfiles:

  • /var/log/kafka/server.log
  • /var/log/kafka/kafka-authorizer.log

Prüfen der externen Clientkonnektivität

KafkaCat

Hinweis:

Diese Anweisungen müssen auf einem Client-Computer (nicht auf dem Control-Center-Server) ausgeführt werden.

Hinweis:

Um Metrikinformationen anzuzeigen, stellen Sie sicher, dass mindestens ein Monitor im Control Center ausgeführt wird.

Um die Konnektivität als externer Client zu überprüfen und zu validieren, können Sie das kafkacat Dienstprogramm verwenden, das im Abschnitt Überprüfen der Funktionsweise der Streaming-API im Kontrollzentrum installiert wurdeÜberprüfen der Funktionsweise der Streaming-API im Kontrollzentrum.

Führen Sie die folgenden Schritte aus:

Hinweis:

Unten sehen Sie den Benutzer, CLIENT_USER der zuvor in der Datei /etc/kafka/server.properties im Kontrollzentrum angegeben wurde: user_client nämlich und das dort festgelegte Passwort.

Das CA-Root-Zertifikat, das zum Signieren des serverseitigen SSL-Zertifikats verwendet wird, muss auf dem Client vorhanden sein.

  • Erstellen Sie eine Datei client.properties mit folgendem Inhalt:

    Dabei ist

    • {PATH_TO_CA_CERT} ist der Speicherort des CA-Stammzertifikats, das vom Kafka-Broker verwendet wird.
    • {CLIENT_USER} und {CLIENT_PASSWORD} sind die Benutzeranmeldeinformationen für den Client.
  • Führen Sie den folgenden Befehl aus, um die Nachricht anzuzeigen, die von verwendet wird kafkacat:

    Dabei {METRICS_TOPIC} ist der Name des Kafka-Themas mit Präfix "paa.public.".

Hinweis:

Ältere Versionen von kafkacat bieten keine -F Möglichkeit, die Client-Einstellungen aus einer Datei zu lesen. Wenn Sie eine solche Version verwenden, müssen Sie die gleichen Einstellungen über die Befehlszeile wie unten gezeigt angeben.

Um die Konnektivität zu debuggen, können Sie die -d folgende Option verwenden:

Lesen Sie unbedingt die Dokumentation für die verwendete Kafka-Clientbibliothek, da sich die Eigenschaften von denen in client.propertiesunterscheiden können.

Format der Nachricht

Die Nachrichten, die für die Metrik- und Metadatenthemen verwendet werden, werden im Format Protokollpuffer (protobuf) serialisiert (siehe developers.google.com/protocol-buffers). Die Schemas für diese Nachrichten entsprechen dem folgenden Format:

Metriken Protobuf-Schema

Metadaten-Protobuf-Schema

Beispiele für Kunden

Hinweis:

Diese Befehle sollen auf einem externen Client, z. B. Ihrem Laptop oder ähnlichem, und nicht im Control Center ausgeführt werden.

Hinweis:

Damit Metrikinformationen angezeigt werden, stellen Sie sicher, dass mindestens ein Monitor im Control Center ausgeführt wird.

Der Control Center-Tarball enthält das Archiv paa-streaming-api-client-examples.tar.gz (client-examples), das ein Python-Beispielskript enthält, das die Verwendung der Streaming-API zeigt.

Clientbeispiele für die Installation und Konfiguration

Sie finden client-examples im Ordner "Paragon Active Assurance Control Center":

Für die Installation client-examples auf Ihrem externen Client-Computer gehen Sie wie folgt vor:

client-examples erfordert die Ausführung von Docker. Downloads und Installationsanleitungen für Docker finden Sie unter https://docs.docker.com/engine/install.

anhand von Clientbeispielen

Die client-examples Tools können entweder im einfachen oder im erweiterten Modus ausgeführt werden, um Beispiele unterschiedlicher Komplexität zu erstellen. In beiden Fällen ist es auch möglich, die Beispiele mit einer Konfigurationsdatei auszuführen, die zusätzliche Eigenschaften zur weiteren Anpassung der Client-Seite enthält.

Basis-Modus

Im einfachen Modus werden die Metriken und ihre Metadaten separat gestreamt. Dazu hört sich der Client jedes Kafka-Thema an, das für den externen Zugriff verfügbar ist, und druckt die empfangenen Nachrichten einfach in die Konsole.

Um die Ausführung der grundlegenden Beispiele zu starten, führen Sie Folgendes aus:

Dabei ACCOUNT_SHORTNAME ist der Kurzname des Kontos, von dem Sie die Metriken abrufen möchten.

Um die Ausführung des Beispiels zu beenden, drücken Sie STRG+C. (Es kann zu einer leichten Verzögerung kommen, bevor die Ausführung beendet wird, da der Client auf ein Timeoutereignis wartet.)

Erweiterter Modus

Hinweis:

Metriken werden nur für HTTP-Monitore angezeigt, die im Control Center ausgeführt werden.

Die Ausführung im erweiterten Modus zeigt die Korrelation zwischen Metriken und Metadatenmeldungen. Dies ist möglich, weil in jeder Metrikmeldung ein stream id Feld vorhanden ist, das sich auf die entsprechende Metadatenmeldung bezieht.

Führen Sie zum Ausführen der erweiterten Beispiele Folgendes aus:

Dabei ACCOUNT_SHORTNAME ist der Kurzname des Kontos, von dem Sie die Metriken abrufen möchten.

Um die Ausführung des Beispiels zu beenden, drücken Sie STRG+C. (Es kann zu einer leichten Verzögerung kommen, bevor die Ausführung beendet wird, da der Client auf ein Timeoutereignis wartet.)

Zusätzliche Einstellungen

Es ist möglich, die Beispiele mit zusätzlicher Konfiguration des Clients auszuführen, indem Sie die --config-file Option gefolgt von einem Dateinamen mit Eigenschaften im Format key=value.

Hinweis:

Alle Dateien, auf die im obigen Befehl verwiesen wird, müssen sich im aktuellen Verzeichnis befinden und nur über relative Pfade referenziert werden. Dies gilt sowohl für das --config-file Argument als auch für alle Einträge in der Konfigurationsdatei, die Dateispeicherorte beschreiben.

Validieren der externen Clientauthentifizierung

Um die Client-Authentifizierung von außerhalb des Kontrollzentrums mit client-exampleszu validieren, führen Sie die folgenden Schritte aus:

  • Wechseln Sie im Ordner "Paragon Active Assurance Control Center" zum paa-streaming-api-client-examples Ordner:

  • Kopieren Sie das CA-Stammzertifikat ca-cert in das aktuelle Verzeichnis.
  • Erstellen Sie eine client.properties Datei mit folgendem Inhalt:

    wobei {CLIENT_USER} und {CLIENT_PASSWORD} die Benutzeranmeldeinformationen für den Client sind.

  • Führen Sie grundlegende Beispiele durch:

    Dabei ACCOUNT_SHORTNAME ist der Kurzname des Kontos, von dem Sie die Metriken abrufen möchten.

  • Führen Sie erweiterte Beispiele aus:

Anhang

In diesem Anhang wird beschrieben, wie Sie Folgendes erstellen:

  • eine Keystore-Datei zum Speichern des SSL-Zertifikats des Kafka-Brokers
  • eine Truststore-Datei zum Speichern des Stammzertifikats der Zertifizierungsstelle (CA), das zum Signieren des Kafka-Brokerzertifikats verwendet wird.

Erstellen eines Kafka-Brokerzertifikats

Erstellen eines Zertifikats mit einer echten Zertifizierungsstelle (empfohlen)

Es wird empfohlen, ein echtes SSL-Zertifikat von einer vertrauenswürdigen CA zu erhalten.

Nachdem Sie sich für eine CA entschieden haben, kopieren Sie deren CA-Stammzertifikatdatei ca-cert in Ihren eigenen Pfad, wie unten gezeigt:

Erstellen Sie Ihre eigene Zertifizierungsstelle

Hinweis:

Normalerweise sollten Sie Ihr Zertifikat von einer echten Zertifizierungsstelle signieren lassen; siehe den vorherigen Unterabschnitt. Das Folgende ist nur ein Beispiel.

Hier erstellen wir unsere eigene Stammzertifikatsdatei der Zertifizierungsstelle (CA), die 999 Tage gültig ist (in der Produktion nicht empfohlen):

Erstellen des Kunden-Truststores

Jetzt können Sie eine Truststore-Datei erstellen, die die ca-cert oben generierten enthält. Diese Datei wird vom Kafka-Client benötigt, der auf die Streaming-API zugreift:

Da sich das CA-Zertifikat nun im Truststore befindet, vertraut der Client jedem damit signierten Zertifikat.

Sie sollten die Datei kafka.client.truststore.jks an einen bekannten Speicherort auf Ihrem Clientcomputer kopieren und in den Einstellungen darauf zeigen.

Erstellen des Keystores für den Kafka-Broker

Um das Kafka-Broker-SSL-Zertifikat und dann den Keystore kafka.server.keystore.jkszu generieren, gehen Sie wie folgt vor:

Generieren des SSL-Zertifikats

Unten ist 999 die Anzahl der Tage Gültigkeit des Keystores und FQDN der vollqualifizierte Domänenname des Clients (öffentlicher Hostname des Knotens).

Hinweis:

Es ist wichtig, dass der FQDN genaue Hostname übereinstimmt, den der Kafka-Client für die Verbindung mit dem Control Center verwendet.

Erstellen Sie eine Zertifikatsignieranforderung und speichern Sie sie in der Datei mit dem Namen cert-server-request:

Sie sollten die Datei cert-server-request nun an Ihre Zertifizierungsstelle (CA) senden, wenn Sie eine echte Zertifizierungsstelle verwenden. Sie senden dann das signierte Zertifikat zurück. Wir werden uns wie cert-server-signed folgt darauf beziehen.

Signieren des SSL-Zertifikats mit einem selbst erstellten CA-Zertifikat

Hinweis:

Auch hier wird die Verwendung einer eigenen CA in einem Produktivsystem nicht empfohlen.

Signieren Sie das Zertifikat mit der CA mithilfe der Datei cert-server-request, die das signierte Zertifikat cert-server-signederzeugt. Siehe unten; ca-password ist das Kennwort, das beim Erstellen des CA-Zertifikats festgelegt wird.

Importieren des signierten Zertifikats in den Keystore

Importieren Sie das ca-cert Stammzertifikat in den Keystore:

Importieren Sie das signierte Zertifikat mit der Bezeichnung :cert-server-signed

Die Datei kafka.server.keystore.jks sollte an einen bekannten Speicherort auf dem Control Center-Server kopiert und dann in /etc/kafka/server.propertiesreferenziert werden.