Mit Flow-Logs können Sie Metadaten zum Netzwerkverkehr, einschließlich 5-Tupeln, in Google Distributed Cloud (GDC) Air-Gap im Observability-Stack in Form von abfragbaren Logs speichern. Mit diesen Logs können Sie:
- Trafficflüsse für einen bestimmten Dienst in einer Organisation verstehen.
- Probleme mit dem Netzwerkzustand einer Kubernetes-Arbeitslast verstehen und identifizieren.
- Kubernetes-Netzwerkrichtlinien prüfen
Flow Log ist eine GDC-Funktion, die auf dem Open-Source-Projekt Hubble basiert: https://github.com/cilium/hubble. Konfigurieren Sie Flusslogs mit der Ressource FlowLog aus der Networking API.
Hinweise
Sie müssen die Autorisierung zum Verwalten oder Aufrufen von Flow-Logs über die GDC-Konsole einholen. Wenn Sie Flow-Logs verwalten möchten, bitten Sie Ihren IAM-Administrator der Organisation, Ihnen die Rolle „Flow Log Admin“ (
flowlog-admin) zuzuweisen. Wenn Sie nur vorhandene Flow-Logs ansehen möchten, bitten Sie Ihren IAM-Administrator der Organisation, Ihnen die Rolle „Flow Log Viewer“ (flowlog-viewer) zuzuweisen.Informationen zum Festlegen von Rollenbindungen über die GDC-Konsole finden Sie unter Zugriff auf Ressourcen gewähren.
Bevor Sie Flow-Logs abfragen und in Dashboards ansehen können, müssen Sie Zugriff auf die Monitoring-Instanz erhalten. Weitere Informationen finden Sie unter Messwerte abfragen und ansehen.
Flow-Log erstellen
Erstellen Sie ein Flow-Log, um Metadaten zum Netzwerk-Traffic zu speichern, die nach einer bestimmten Reihe von Spezifikationen gefiltert werden.
Flow-Log mit Protokoll- und Namespace-Filtern erstellen
Erstellen Sie eine Datei mit dem Namen
example-flowlog.yamlund mit folgendem Inhalt:apiVersion: networking.gdc.goog/v1 kind: FlowLog metadata: name: "FLOW_LOG_NAME" namespace: "platform" spec: filters: - l4Protocols: - tcp source: namespacePodSelectors: - namespace: gpc-system - namespace: kube-system destination: namespacePodSelectors: - namespace: kube-system lifetime: duration: "1h"Ersetzen Sie
FLOW_LOG_NAMEdurch den ausgewählten Namen für das Flow-Log.In diesem Beispiel werden im Flow-Log alle Flows erfasst, für die eine TCP-Verbindung von einem beliebigen Pod im Namespace
gpc-systemoderkube-systemzu einem beliebigen Pod im Namespacekube-systemgestartet wurde. Die Aufzeichnung von Logs wird eine Stunde nach der Erstellung des Objekts beendet.Erstellen Sie das Flusslogobjekt:
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f example-flowlog.yamlErsetzen Sie
MANAGEMENT_API_SERVERdurch den kubeconfig-Pfad des zonalen Management API-Servers.Prüfen Sie, ob der Wert
FLOW_LOG_NAMErichtig abgeglichen wurde und ob der Logging-Prozess gestartet wurde. Sehen Sie dazu das FeldStatusan:kubectl --kubeconfig MANAGEMENT_API_SERVER describe -n platform FLOW_LOG_NAMEBeispielstatus:
Status: Clusters: Cluster: org-1-infra-cluster Conditions: Last Transition Time: 2024-01-19T01:46:11Z Message: Observed Generation: 1 Reason: ResourcesPropagated Status: True Type: Propagated Name: cilium-flowlog-config Namespace: kube-system Node: org-1-infra Cluster: user-vm-1-cluster Conditions: Last Transition Time: 2024-01-19T01:46:11Z Message: Observed Generation: 1 Reason: ResourcesPropagated Status: True Type: Propagated Name: cilium-flowlog-config Namespace: kube-system Node: user-vm-1 Cluster: user-vm-2-cluster Conditions: Last Transition Time: 2024-01-19T01:46:11Z Message: Observed Generation: 1 Reason: ResourcesPropagated Status: True Type: Propagated Name: cilium-flowlog-config Namespace: kube-system Node: user-vm-2 Conditions: Last Transition Time: 2024-01-18T19:17:53Z Message: Observed Generation: 1 Reason: Active Status: True Type: Logging Last Transition Time: 2024-01-19T01:46:11Z Message: Observed Generation: 1 Reason: ResourcesPropagated Status: True Type: Propagated Last Transition Time: 2024-01-18T19:17:53Z Message: Observed Generation: 1 Reason: Succeeded Status: True Type: Reconciled Start Time: 2024-01-18T19:17:53Z End Time: 2024-01-18T20:17:53ZDiese Beispielausgabe enthält die folgenden Bedingungen:
Propagated: Die Flusslogkonfiguration wurde an die Clusteruser-vm-1,user-vm-2undorg-1-infragesendet.Reconciled: Das Flow-Log wurde erfolgreich auf den Clusternuser-vm-1,user-vm-2undorg-1-infraprogrammiert.Logging: Das Flussprotokoll ist nicht abgelaufen oder deaktiviert, es ist kein Fehler aufgetreten und es können Protokolle erstellt werden, wenn die Filter mit den Flüssen übereinstimmen.- Die
Start TimeundEnd Timegeben an, dass der Job am19:17:53gestartet wurde und am20:17:53abläuft.
Damit in diesem Flow-Log Logeinträge erstellt werden können, müssen alle Bedingungen für
Propagated,ReconciledundLoggingerfüllt sein.
Flusslog ändern
Wenn Sie ein vorhandenes Ablaufprotokoll ändern möchten, bearbeiten Sie die erstellte Ablaufprotokoll-Objektdefinition in der Datei example-flowlog.yaml und wenden Sie sie noch einmal an:
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f example-flowlog.yaml
Flusslogs im Monitoring-Dashboard ansehen
Öffnen Sie das Dashboard für das Betriebsprotokoll. Weitere Informationen finden Sie unter Betriebslogs abfragen.
Legen Sie den Drop-down-Wert identifier auf
network-flow-logsfest, klicken Sie auf add json parser (JSON-Parser hinzufügen) und geben Sie den folgenden Wert für die Abfrage an:{identifier="network-flow-logs"} | json:
Klicken Sie auf Abfrage ausführen. Dadurch werden die gespeicherten Flusslogeinträge angezeigt:

Mit den Filtern können Sie die Ergebnisse weiter eingrenzen. Geben Sie beispielsweise im Drop-down-Menü Cluster den Wert
user-vm-1an, um nur Flows zu berücksichtigen, die aus dem Clusteruser-vm-1stammen:
Sehen Sie sich die Flow-Logeinträge an, maximieren Sie den Eintrag, um die Details zu sehen, und fügen Sie bei Bedarf weitere Label-Filter über das entsprechende Symbol hinzu. In diesem Beispiel möchten wir die Flows nach der Quell-IP-Adresse filtern:

Klicken Sie auf das
+-Kürzel, um Flows nach einem bestimmten Metadatenfeld zu filtern.
Ergebnisse nach Flusslogname ansehen
Wenn mehrere Flow-Logs erstellt werden, kann ein zusätzlicher Label-Filter erstellt werden, um Ergebnisse aus einem oder mehreren Flow-Logs aufzurufen.
Wenn Sie Ergebnisse sehen möchten, die auf Logs beschränkt sind, die von FLOW_LOG_NAME erstellt wurden, erstellen Sie einen Label-Filter mit den folgenden Werten:
Labelist aufOnfestgelegt. Dabei wird zwischen Groß- und Kleinschreibung unterschieden.Operatorist auf~=festgelegt. Hier wird ein Abgleich mit regulären Ausdrücken verwendet.Valueist auf/FLOW_LOG_NAME/festgelegt. Der WertFLOW_LOG_NAMEmuss von/umgeben sein.
Filtern Sie die Ergebnisse, um nur Logs von flowlog1 zu sehen:

Verweise
- Dokumentation zum dynamischen Hubble-Exporter: https://docs.cilium.io/en/latest/observability/hubble-exporter/#dynamic-exporter-configuration