フローログを使用して、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 コンソールからロール バインディングを設定する方法については、リソースへのアクセス権を付与するをご覧ください。
ダッシュボードでフローログをクエリして表示する前に、モニタリング インスタンスへのアクセス権を取得する必要があります。詳細については、指標のクエリと表示をご覧ください。
フローログを作成する
特定の仕様セットでフィルタリングされたネットワーク トラフィック メタデータを保存するフローログを作成します。
プロトコル フィルタと Namespace フィルタを使用してフローログを作成する
次の内容のファイルを、
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-systemNamespace の任意の Pod からkube-systemNamespace の任意の Pod への TCP 接続が開始されたすべてのフローをキャプチャします。オブジェクトの作成から 1 時間後にログの記録を停止します。フローログ オブジェクトを作成します。
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f example-flowlog.yamlMANAGEMENT_API_SERVERは、ゾーンの Management API サーバーの kubeconfig パスに置き換えます。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
モニタリング ダッシュボードでフローログを表示する
運用ログ ダッシュボードを開きます。詳細については、オペレーション ログのクエリをご覧ください。
[identifier] プルダウンの値を
network-flow-logsに設定し、[add json parser] をクリックして、クエリに次の値を指定します。{identifier="network-flow-logs"} | json:
[クエリを実行] をクリックします。保存されたフローログ エントリが表示されます。

フィルタを使用して、結果をさらに絞り込みます。たとえば、クラスタ プルダウンに
user-vm-1の値を指定すると、user-vm-1クラスタから収集されたフローのみが検索されます。
フローログエントリを参照し、エントリを開いて詳細を確認します。必要に応じて、ショートカット アイコンを使用してラベルフィルタを追加します。この例では、フローを送信元 IP アドレスでさらにフィルタリングします。

+ショートカット アイコンをクリックして、特定のメタデータ フィールドでフローをフィルタします。
フローログ名で結果を表示する
複数のフローログが作成されている場合は、1 つ以上のフローログの結果を表示するために追加のラベルフィルタを作成できます。
FLOW_LOG_NAME によって生成されたログに限定して結果を表示するには、次の値を使用してラベルフィルタを作成します。
LabelはOnに設定します。大文字と小文字は区別されます。Operatorは~=に設定します。これは正規表現マッチャーを使用します。Valueは/FLOW_LOG_NAME/に設定します。FLOW_LOG_NAME値は/で囲む必要があります。
結果をフィルタして、flowlog1 によって生成されたログのみを表示します。

参照
- Hubble Dynamic Exporter のドキュメント: https://docs.cilium.io/en/latest/observability/hubble-exporter/#dynamic-exporter-configuration