Flusslogs verwalten

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

  1. Erstellen Sie eine Datei mit dem Namen example-flowlog.yaml und 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_NAME durch 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-system oder kube-system zu einem beliebigen Pod im Namespace kube-system gestartet wurde. Die Aufzeichnung von Logs wird eine Stunde nach der Erstellung des Objekts beendet.

  2. Erstellen Sie das Flusslogobjekt:

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f example-flowlog.yaml
    

    Ersetzen Sie MANAGEMENT_API_SERVER durch den kubeconfig-Pfad des zonalen Management API-Servers.

  3. Prüfen Sie, ob der Wert FLOW_LOG_NAME richtig abgeglichen wurde und ob der Logging-Prozess gestartet wurde. Sehen Sie dazu das Feld Status an:

    kubectl --kubeconfig MANAGEMENT_API_SERVER describe -n platform FLOW_LOG_NAME
    

    Beispielstatus:

    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:53Z
    

    Diese Beispielausgabe enthält die folgenden Bedingungen:

    • Propagated: Die Flusslogkonfiguration wurde an die Cluster user-vm-1, user-vm-2 und org-1-infra gesendet.
    • Reconciled: Das Flow-Log wurde erfolgreich auf den Clustern user-vm-1, user-vm-2 und org-1-infra programmiert.
    • 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 Time und End Time geben an, dass der Job am 19:17:53 gestartet wurde und am 20:17:53 abläuft.

    Damit in diesem Flow-Log Logeinträge erstellt werden können, müssen alle Bedingungen für Propagated, Reconciled und Logging erfü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

  1. Öffnen Sie das Dashboard für das Betriebsprotokoll. Weitere Informationen finden Sie unter Betriebslogs abfragen.

  2. Legen Sie den Drop-down-Wert identifier auf network-flow-logs fest, 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:

    ID festlegen

  3. Klicken Sie auf Abfrage ausführen. Dadurch werden die gespeicherten Flusslogeinträge angezeigt:

    Abfrage ausführen

  4. Mit den Filtern können Sie die Ergebnisse weiter eingrenzen. Geben Sie beispielsweise im Drop-down-Menü Cluster den Wert user-vm-1 an, um nur Flows zu berücksichtigen, die aus dem Cluster user-vm-1 stammen:

    Filter optimieren

  5. 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:

    Flusslogeintrag

  6. Klicken Sie auf das +-Kürzel, um Flows nach einem bestimmten Metadatenfeld zu filtern.

    Tastenkürzel für Labelfilter

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:

  • Label ist auf On festgelegt. Dabei wird zwischen Groß- und Kleinschreibung unterschieden.
  • Operator ist auf ~= festgelegt. Hier wird ein Abgleich mit regulären Ausdrücken verwendet.
  • Value ist auf /FLOW_LOG_NAME/ festgelegt. Der Wert FLOW_LOG_NAME muss von / umgeben sein.

Filtern Sie die Ergebnisse, um nur Logs von flowlog1 zu sehen:

Label nach Flowname filtern

Verweise