Gestisci log di flusso

Utilizza i log di flusso per salvare i metadati del traffico di rete, inclusi i 5 tuple, in Google Distributed Cloud (GDC) air-gapped nello stack di osservabilità sotto forma di log interrogabili. Utilizza questi log per:

  • Comprendere i flussi di traffico per un determinato servizio in un'organizzazione.
  • Comprendere e identificare i problemi di integrità di rete di un workload Kubernetes.
  • Verifica i criteri di rete di Kubernetes.

Il log di flusso è una funzionalità di GDC basata sul progetto open source Hubble: https://github.com/cilium/hubble. Configura i log di flusso utilizzando la risorsa FlowLog dell'API Networking.

Prima di iniziare

  • Devi ottenere l'autorizzazione per gestire o visualizzare i log di flusso dalla console GDC. Per gestire i log di flusso, chiedi all'amministratore IAM dell'organizzazione di concederti il ruolo Amministratore log di flusso (flowlog-admin). Per visualizzare solo i log di flusso esistenti, chiedi all'amministratore IAM dell'organizzazione di concederti il ruolo Visualizzatore log di flusso (flowlog-viewer).

    Per informazioni sull'impostazione dei binding dei ruoli dalla console GDC, consulta Concedere l'accesso alle risorse.

  • Prima di eseguire query e visualizzare i log di flusso nelle dashboard, devi ottenere l'accesso all'istanza di monitoraggio. Per saperne di più, consulta Eseguire query e visualizzare le metriche.

Crea un log di flusso

Crea un log di flusso per salvare i metadati del traffico di rete filtrati in base a un determinato insieme di specifiche.

Crea un log di flusso con filtri di protocollo ed endpoint

  1. Crea un file denominato example-flowlog.yaml con il seguente contenuto:

    apiVersion: networking.gdc.goog/v1
    kind: FlowLog
    metadata:
      name: "FLOW_LOG_NAME"
      namespace: "platform"
    spec:
      filters:
        - l4Protocols:
            - udp
          endpoint:
            ports:
              - 53
      lifetime:
        duration: "12h"
    

    Sostituisci FLOW_LOG_NAME con il nome scelto per il log di flusso.

    In questo esempio, il log di flusso acquisisce tutto il traffico UDP sulla porta 53 (ad esempio il traffico DNS). Interrompe la registrazione dei log 12 ore dopo la creazione dell'oggetto.

  2. Crea l'oggetto log di flusso:

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

    Sostituisci MANAGEMENT_API_SERVER con il percorso kubeconfig del server API di gestione zonale.

  3. Verifica che il valore FLOW_LOG_NAME sia stato riconciliato correttamente e che il processo di logging sia iniziato esaminando il campo Status:

    kubectl --kubeconfig MANAGEMENT_API_SERVER describe -n platform FLOW_LOG_NAME
    

    Stato di esempio:

    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
    

    Questo output di esempio contiene le seguenti condizioni:

    • Propagated: la configurazione dei log di flusso è stata inviata ai cluster user-vm-1, user-vm-2 e org-1-infra.
    • Reconciled: il log di flusso è stato programmato correttamente sui cluster user-vm-1, user-vm-2 e org-1-infra.
    • Logging: il log di flusso non è scaduto o disattivato, non ha riscontrato errori e può generare log se i filtri corrispondono ai flussi.
    • Start Time e End Time indicano che il job è stato avviato alle ore 19:17:53 e scade alle ore 20:17:53.

    Affinché questo log di flusso possa produrre correttamente le voci di log, devono essere vere tutte le condizioni Propagated, Reconciled e Logging.

Modifica del log di flusso

Per modificare un log di flusso esistente, modifica la definizione dell'oggetto log di flusso creato nel file example-flowlog.yaml e applicala di nuovo:

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

Visualizza i log di flusso nella dashboard di monitoraggio

  1. Apri la dashboard del log operativo. Per saperne di più, consulta Eseguire query sui log operativi.

  2. Imposta il valore del menu a discesa identificatore su network-flow-logs, poi fai clic su Aggiungi parser JSON e fornisci il seguente valore alla query: {identifier="network-flow-logs"} | json:

    Imposta identificatore

  3. Fai clic su Esegui query. Vengono visualizzate le voci di log di flusso salvate:

    Esegui query

  4. Utilizza i filtri per perfezionare ulteriormente i risultati. Ad esempio, fornisci il menu a discesa cluster con un valore di user-vm-1 per esaminare solo i flussi raccolti dal cluster user-vm-1:

    Perfezionare i filtri

  5. Sfoglia le voci del log di flusso, espandi la voce per esaminare i dettagli e aggiungi altri filtri delle etichette in base alle esigenze utilizzando l'icona di scelta rapida. In questo esempio, vogliamo filtrare ulteriormente i flussi in base all'indirizzo IP di origine:

    Voce di log di flusso

  6. Fai clic sull'icona di scorciatoia + per filtrare i flussi in base a un campo di metadati specifico.

    Scorciatoia per il filtro per etichetta

Visualizzare i risultati per nome del log di flusso

Quando vengono creati più log di flusso, è possibile creare un filtro etichetta aggiuntivo per visualizzare i risultati di uno o più log di flusso.

Per visualizzare i risultati limitati ai log prodotti da FLOW_LOG_NAME, crea un filtro di etichetta con i seguenti valori:

  • Label impostato su On. Questo valore è sensibile alle maiuscole.
  • Operator impostato su ~=. Viene utilizzato un sistema di corrispondenza delle espressioni regolari.
  • Value impostato su /FLOW_LOG_NAME/. Il valore FLOW_LOG_NAME deve essere racchiuso tra /.

Filtra i risultati in modo da visualizzare solo i log generati da flowlog1:

Filtro etichette per nome del flusso

Riferimenti