フローログを管理する

フローログを使用して、5 タプルを含むネットワーク トラフィック メタデータを Google Distributed Cloud(GDC)エアギャップに保存し、クエリ可能なログの形式でオブザーバビリティ スタックに保存します。これらのログは、次の目的で使用します。

  • 組織内の特定のサービスのトラフィック フローを把握する。
  • Kubernetes ワークロードのネットワークの健全性の問題を把握して特定する。
  • Kubernetes ネットワーク ポリシーを確認する。

フローログは、オープンソースの Hubble プロジェクト(https://github.com/cilium/hubble)に基づく GDC 機能です。Networking API の FlowLog リソースを使用してフローログを構成します。

始める前に

  • GDC コンソールからフローログを管理または表示するには、認可を取得する必要があります。フローログを管理するには、IAM 組織管理者にフローログ管理者(flowlog-admin)ロールを付与するよう依頼します。既存のフローログのみを表示するには、IAM 組織管理者にフローログ閲覧者(flowlog-viewer)ロールを付与するよう依頼します。

    GDC コンソールからロール バインディングを設定する方法については、リソースへのアクセス権を付与するをご覧ください。

  • ダッシュボードでフローログをクエリして表示する前に、モニタリング インスタンスへのアクセス権を取得する必要があります。詳細については、指標のクエリと表示をご覧ください。

フローログを作成する

フローログを作成して、指定された一連の仕様でフィルタされたネットワーク トラフィック メタデータを保存します。

プロトコル フィルタとエンドポイント フィルタを使用してフローログを作成する

  1. 次の内容のファイルを、example-flowlog.yaml という名前で作成します。

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

    FLOW_LOG_NAME は、フローログに選択した名前に置き換えます。

    この例では、フローログはポート 53 のすべての UDP トラフィック(DNS トラフィックなど)をキャプチャします。オブジェクトの作成から 12 時間後にログの記録を停止します。

  2. フローログ オブジェクトを作成します。

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

    MANAGEMENT_API_SERVER は、ゾーン管理 API サーバーの kubeconfig パスに置き換えます。

  3. FLOW_LOG_NAME の値が正しく調整され、Status フィールドを調べることでロギング プロセスが開始されたことを確認します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER describe -n platform FLOW_LOG_NAME
    

    ステータスの例:

    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
    

    この出力例には、次の条件が含まれています。

    • Propagated: フローログ構成がクラスタ user-vm-1、user-vm-2、org-1-infra に送信されました。
    • Reconciled: フローログがクラスタ user-vm-1、user-vm-2、org-1-infra で正常にプログラムされました。
    • Logging: フローログは期限切れでも無効でもなく、エラーも発生していません。フィルタがフローに一致すると、ログが生成される可能性があります。
    • Start Time と End Time は、ジョブが 19:17:53 に開始され、20:17:53 に期限切れになることを示します。

    このフローログでログエントリを正常に生成するには、Propagated、Reconciled、Logging のすべての条件が true である必要があります。

フローログを変更する

既存のフローログを変更するには、example-flowlog.yaml ファイルで作成したフローログ オブジェクト定義を変更して、再度適用します。

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

モニタリング ダッシュボードでフローログを表示する

  1. オペレーション ログ ダッシュボードを開きます。詳細については、オペレーション ログをクエリするをご覧ください。

  2. [identifier] プルダウンの値を network-flow-logs に設定し、[add json parser] をクリックして、クエリに次の値 {identifier="network-flow-logs"} | json を指定します。

    ID の設定

  3. [クエリを実行] をクリックします。保存されたフローログ エントリが表示されます。

    クエリを実行

  4. フィルタを使用して、結果をさらに絞り込みます。たとえば、user-vm-1 クラスタから収集されたフローのみを表示するには、クラスタ プルダウンに user-vm-1 の値を指定します。

    フィルタを絞り込む

  5. フローログ エントリを参照し、エントリを開いて詳細を確認します。必要に応じて、ショートカット アイコンを使用してラベルフィルタを追加します。この例では、送信元 IP アドレスでフローをさらにフィルタします。

    フローログ エントリ

  6. + ショートカット アイコンをクリックして、特定のメタデータ フィールドでフローをフィルタします。

    ラベルフィルタのショートカット

フローログ名で結果を表示する

複数のフローログが作成されている場合は、追加のラベルフィルタを作成して、1 つ以上のフローログの結果を表示できます。

FLOW_LOG_NAME によって生成されたログに限定して結果を表示するには、次の値を使用してラベルフィルタを作成します。

  • Label は On に設定します。大文字と小文字は区別されます。
  • Operator は ~= に設定します。これには正規表現マッチャーが使用されます。
  • Value は /FLOW_LOG_NAME/ に設定します。FLOW_LOG_NAME の値は / で囲む必要があります。

結果をフィルタして、flowlog1 によって生成されたログのみを表示します。

フロー名によるラベルフィルタ

参照