Gestisci log di flusso

Utilizza i log di flusso per salvare i metadati del traffico di rete, incluse le 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 ulteriori informazioni, 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 per protocollo e spazio dei nomi

  1. Crea un file denominato example-flowlog.yaml con i seguenti contenuti:

    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"
    

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

    In questo esempio, il log di flusso acquisisce tutti i flussi per i quali una connessione TCP è stata avviata da qualsiasi pod nello spazio dei nomi gpc-system o kube-system a qualsiasi pod nello spazio dei nomi kube-system. Interrompe la registrazione dei log un'ora 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 Management zonale.

  3. Verifica che il valore di 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ò produrre 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 voci di log, tutte le condizioni Propagated, Reconciled e Logging devono essere vere.

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 Query dei log operativi.

  2. Imposta il valore del menu a discesa identifier su network-flow-logs, poi fai clic su add json parser 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:

    Perfeziona i filtri

  5. Sfoglia le voci di log di flusso, espandi la voce per esaminare i dettagli e aggiungi altri filtri delle etichette in base alle necessità utilizzando l'icona di scorciatoia. 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 in base al 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 prodotti da flowlog1:

Filtro etichette per nome del flusso

Riferimenti