흐름 로그를 사용하여 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 콘솔에서 역할 결합을 설정하는 방법은 리소스에 대한 액세스 권한 부여를 참조하세요.
대시보드에서 흐름 로그를 쿼리하고 보기 전에 모니터링 인스턴스에 대한 액세스 권한을 얻어야 합니다. 자세한 내용은 측정항목 쿼리 및 보기를 참조하세요.
흐름 로그 만들기
지정된 사양 집합으로 필터링된 네트워크 트래픽 메타데이터를 저장하는 흐름 로그를 만듭니다.
프로토콜 및 네임스페이스 필터로 흐름 로그 만들기
다음 콘텐츠로
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시간이 지나면 로그 기록이 중지됩니다.흐름 로그 객체를 만듭니다.
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
모니터 대시보드에서 흐름 로그 보기
운영 로그 대시보드를 엽니다. 자세한 내용은 운영 로그 쿼리를 참조하세요.
식별자 드롭다운 값을
network-flow-logs로 설정한 후 JSON 파서 추가를 클릭하고 쿼리에 다음 값을 제공합니다.{identifier="network-flow-logs"} | json:
쿼리 실행 을 클릭합니다. 그러면 저장된 흐름 로그 항목이 표시됩니다.

필터를 사용하여 결과를 추가로 구체화합니다. 예를 들어
user-vm-1클러스터에서 수집된 흐름만 보려면 클러스터 드롭다운에user-vm-1값을 제공합니다.
흐름 로그 항목을 찾아보고 항목을 펼쳐 세부정보를 확인하고 바로가기 아이콘을 사용하여 필요에 따라 라벨 필터를 추가합니다. 이 예시에서는 소스 IP 주소로 흐름을 추가로 필터링하려고 합니다.

+바로가기 아이콘을 클릭하여 특정 메타데이터 필드로 흐름을 필터링합니다.
흐름 로그 이름으로 결과 보기
여러 흐름 로그가 생성되면 하나 이상의 흐름 로그에서 결과를 볼 수 있도록 추가 라벨 필터를 만들 수 있습니다.
FLOW_LOG_NAME에서 생성된 로그로 제한된 결과를 보려면 다음 값으로 라벨 필터를 만듭니다.
Label이On으로 설정됩니다. 대소문자를 구분합니다.Operator가~=로 설정됩니다. 정규 표현식 일치자를 사용합니다.Value가/FLOW_LOG_NAME/으로 설정됩니다.FLOW_LOG_NAME값은/로 묶어야 합니다.
결과를 필터링하여 flowlog1에서 생성된 로그만 표시합니다.

참조
- Hubble 동적 내보내기 문서: https://docs.cilium.io/en/latest/observability/hubble-exporter/#dynamic-exporter-configuration