管理流日志

使用流日志将网络流量元数据(包括 5 元组)以可查询日志的形式保存到 Google Distributed Cloud (GDC) 空气隔离环境中的可观测性堆栈。您可以使用这些日志执行以下操作:

  • 了解组织中特定服务的流量。
  • 了解并识别 Kubernetes 工作负载的网络健康问题。
  • 验证 Kubernetes 网络政策。

流量日志是一项基于开源 Hubble 项目的 GDC 功能:https://github.com/cilium/hubble。使用 Networking API 中的 FlowLog 资源配置流日志。

准备工作

  • 您必须获得授权才能通过 GDC 控制台管理或查看流量日志。如需管理流日志,请让您的组织 IAM 管理员向您授予 Flow Log Admin (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:
            - tcp
          source:
            namespacePodSelectors:
              - namespace: gpc-system
              - namespace: kube-system
          destination:
            namespacePodSelectors:
              - namespace: kube-system
      lifetime:
        duration: "1h"
    

    FLOW_LOG_NAME 替换为为流日志选择的名称。

    在此示例中,流日志会捕获所有流,这些流的 TCP 连接是由 gpc-systemkube-system 命名空间中的任何 pod 启动的,并且目标是 kube-system 命名空间中的任何 pod。它会在对象创建后一小时停止记录日志。

  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-1user-vm-2org-1-infra
    • Reconciled:已成功在集群 user-vm-1user-vm-2org-1-infra 上配置流日志。
    • Logging:流日志未过期或被停用,未遇到任何错误,并且如果过滤条件与流匹配,则可能会生成日志。
    • Start TimeEnd Time 表示作业开始于 19:17:53,并于 20:17:53 过期。

    为了使此流量日志能够成功生成日志条目,必须满足所有 PropagatedReconciledLogging 条件。

修改流日志

如需修改现有流量日志,请修改 example-flowlog.yaml 文件中已创建的流量日志对象定义,然后再次应用:

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

在监控信息中心内查看流日志

  1. 打开操作日志信息中心。如需了解详情,请参阅查询操作日志

  2. 标识符下拉菜单值设置为 network-flow-logs,然后点击添加 JSON 解析器,并向查询提供以下值:{identifier="network-flow-logs"} | json

    设置标识符

  3. 点击运行查询。这会显示已保存的流日志条目:

    运行查询

  4. 您可以使用过滤条件进一步优化结果。 例如,为集群下拉菜单提供值 user-vm-1,以仅查看从 user-vm-1 集群收集的流量:

    优化过滤条件

  5. 浏览流日志条目,展开条目以查看详细信息,并根据需要使用快捷方式图标添加更多标签过滤条件。 在此示例中,我们希望按来源 IP 地址进一步过滤流量:

    流日志条目

  6. 点击 + 快捷方式图标,按特定元数据字段过滤流程。

    标签过滤条件快捷方式

按流日志名称查看结果

创建多个流日志后,您可以创建额外的标签过滤条件,以查看一个或多个流日志的结果。

如需查看仅限于由 FLOW_LOG_NAME 生成的日志的结果,请创建具有以下值的标签过滤条件:

  • Label 设置为 On。 此参数区分大小写。
  • Operator 设置为 ~=。 这会使用正则表达式匹配器。
  • Value 设置为 /FLOW_LOG_NAME/FLOW_LOG_NAME 值必须用 / 括起来。

过滤结果,以便仅查看由 flowlog1 生成的日志:

按流程名称过滤标签

参考