흐름 로그 관리

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

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

흐름 로그는 오픈소스 Hubble 프로젝트(https://github.com/cilium/hubble)를 기반으로 하는 GDC 기능입니다. Networking 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를 영역별 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 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에서 생성된 로그로 제한된 결과를 보려면 다음 값으로 라벨 필터를 만듭니다.

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

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

흐름 이름별 라벨 필터

참조