흐름 로그 관리

흐름 로그를 사용하여 5튜플을 포함한 네트워크 트래픽 메타데이터를 Google Distributed Cloud (GDC) 에어 갭에서 쿼리 가능한 로그 형식으로 모니터링 스택에 저장합니다. 이러한 로그를 사용하여 다음을 수행합니다.

  • 조직의 특정 서비스에 대한 트래픽 흐름 이해
  • Kubernetes 워크로드의 네트워크 상태 이해 및 문제 식별
  • Kubernetes 네트워크 정책을 확인합니다.

흐름 로그는 오픈소스 Hubble 프로젝트(https://github.com/cilium/hubble)를 기반으로 하는 GDC 기능입니다. 네트워킹 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를 영역 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-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. 식별자 드롭다운 값을 network-flow-logs로 설정한 다음 JSON 파서 추가를 클릭하고 쿼리에 {identifier="network-flow-logs"} | json 값을 제공합니다.

    식별자 설정

  3. 쿼리 실행을 클릭합니다. 그러면 저장된 흐름 로그 항목이 표시됩니다.

    쿼리 실행

  4. 필터를 사용하여 결과를 더 세분화합니다. 예를 들어 user-vm-1 클러스터에서 수집된 흐름만 보려면 클러스터 드롭다운에 user-vm-1 값을 제공합니다.

    필터 세분화

  5. 흐름 로그 항목을 탐색하고 항목을 펼쳐 세부정보를 확인하고 바로가기 아이콘을 사용하여 필요에 따라 라벨 필터를 더 추가합니다. 이 예시에서는 소스 IP 주소로 흐름을 추가로 필터링합니다.

    흐름 로그 항목

  6. + 바로가기 아이콘을 클릭하여 특정 메타데이터 필드로 흐름을 필터링합니다.

    라벨 필터 바로가기

흐름 로그 이름별 결과 보기

여러 흐름 로그가 생성되면 추가 라벨 필터를 만들어 하나 이상의 흐름 로그에서 결과를 볼 수 있습니다.

FLOW_LOG_NAME에서 생성된 로그로 제한된 결과를 보려면 다음 값을 사용하여 라벨 필터를 만듭니다.

  • On로 설정된 Label 대소문자를 구분합니다.
  • ~=로 설정된 Operator 정규 표현식 일치자를 사용합니다.
  • /FLOW_LOG_NAME/로 설정된 Value FLOW_LOG_NAME 값은 /로 묶어야 합니다.

flowlog1에서 생성된 로그만 표시하도록 결과를 필터링합니다.

흐름 이름으로 라벨 필터링

참조