フローログを管理する

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

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

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

始める前に

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

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

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

フローログを作成する

特定の仕様セットでフィルタリングされたネットワーク トラフィック メタデータを保存するフローログを作成します。

プロトコル フィルタと Namespace フィルタを使用してフローログを作成する

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

    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"
    

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

    この例では、フローログは、gpc-system または kube-system Namespace の任意の Pod から kube-system Namespace の任意の Pod への TCP 接続が開始されたすべてのフローをキャプチャします。オブジェクトの作成から 1 時間後にログの記録を停止します。

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

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

    MANAGEMENT_API_SERVER は、ゾーンの Management 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-1user-vm-2org-1-infra に送信されました。
    • Reconciled: クラスタ user-vm-1user-vm-2org-1-infra でフローログが正常にプログラミングされました。
    • Logging: フローログは期限切れまたは無効になっておらず、エラーが発生していません。フィルタがフローと一致する場合は、ログが生成される可能性があります。
    • Start TimeEnd Time は、ジョブが 19:17:53 に開始され、20:17:53 に期限切れになることを示します。

    このフローログでログエントリを正常に生成するには、PropagatedReconciledLogging のすべての条件が 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 によって生成されたログに限定して結果を表示するには、次の値を使用してラベルフィルタを作成します。

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

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

フロー名でラベルをフィルタする

参照