흐름 로그 관리

흐름 로그를 사용하여 5개 튜플을 비롯한 네트워크 트래픽 메타데이터를 Google Distributed Cloud (GDC) 에어갭에 저장하여 쿼리 가능한 로그 형태로 관측 가능성 스택에 저장합니다. 이러한 로그를 사용하여 다음 작업을 할 수 있습니다.

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

흐름 로그는 오픈소스 Hubble 프로젝트(https://github.com/cilium/hubble)를 기반으로 하는 GDC 기능입니다. 네트워킹 APIFlowLog 리소스를 사용하여 흐름 로그를 구성합니다.

시작하기 전에

  • 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:
            - tcp
          source:
            namespacePodSelectors:
              - namespace: gpc-system
              - namespace: kube-system
          destination:
            namespacePodSelectors:
              - namespace: kube-system
      lifetime:
        duration: "1h"
    

    FLOW_LOG_NAME을 선택한 흐름 로그 이름으로 바꿉니다.

    이 예에서 흐름 로그는 gpc-system 또는 kube-system 네임스페이스의 포드가 kube-system 네임스페이스의 포드에 시작한 TCP 연결의 모든 흐름을 캡처합니다. 객체가 생성된 시점으로부터 1시간 후에 로그 기록이 중지됩니다.

  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 TimeEnd 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에서 생성된 로그만 표시되도록 결과를 필터링합니다.

흐름 이름별 라벨 필터

참조