사용 사례
오작동, 애플리케이션 bug 또는 악성 프로그램의 apiserver API 호출 시 클러스터 리소스가 삭제되거나 수정될 수 있습니다. 클러스터 감사 기능을 사용하여 apiserver API 호출 로그를 유지할 수 있습니다. 이러한 방식으로 감사 로그를 검색하고 분석하여 문제의 원인을 찾을 수 있습니다. 본 문서는 문제 해결을 위해 클러스터 감사 기능을 사용하는 방법을 설명합니다.
주의사항
본문은 TKE 클러스터에만 적용됩니다.
전제 조건
TKE 콘솔에서 클러스터 감사 기능을 활성화했습니다. 자세한 내용은 클러스터 감사 활성화를 참고하십시오. 사용 예시
분석 결과 가져오기
1. CLS 콘솔에 로그인하고 왼쪽 사이드바에서 검색 및 분석을 선택합니다. 2. 검색 및 분석 페이지에서 검색할 로그셋 및 로그 테마와 시간 범위를 선택합니다.
3. 분석문을 입력하고 검색 및 분석을 클릭하면 분석 결과를 얻을 수 있습니다.
예시1: 노드를 차단한 작업자 쿼리
노드를 차단한 작업자를 조회하려면 다음 명령을 실행합니다.
objectRef.resource:nodes AND requestObject:unschedulable
검색 및 분석 페이지에서 레이아웃을 기본 구성으로 선택하면 쿼리 결과가 아래 이미지와 같이 표시됩니다.
예시2: 워크로드를 삭제한 작업자 쿼리
워크로드를 삭제한 작업자를 조회하려면 다음 명령을 실행합니다.
objectRef.resource:deployments AND objectRef.name:"nginx" AND verb:"delete"
검색 결과를 기반으로 서브 계정에 대한 자세한 정보를 얻을 수 있습니다. 예시3: apiserver 액세스 제한 원인 찾기
악성 프로그램이나 bug로 인한 잦은 apiserver 액세스로 인해 apiserver/etcd가 과부하되는 것을 방지하기 위해, apiserver는 기본적으로 액세스 제한 메커니즘을 활성화합니다. 액세스 제한에 도달하면 감사 로그를 통해 많은 수의 요청을 보낸 클라이언트를 식별할 수 있습니다.
1. userAgent 기반으로 요청을 보내는 클라이언트를 분석하려면 ‘키-값 인덱스’ 창에서 로그 테마를 수정하고 userAgent 필드를 기반으로 통계를 수집하면 됩니다.
2. 다음 명령을 실행하여 각 클라이언트에서 apiserver로 QPS 통계를 수집합니다.
* | SELECT histogram( cast(__TIMESTAMP__ as timestamp),interval 1 minute) AS time, COUNT(1) AS qps,userAgent GROUP BY time,userAgent ORDER BY time
3. 통계 차트로 전환하여 시퀀스 다이어그램을 선택하면 다음 이미지와 같이 기본 정보, 좌표 축 등을 설정할 수 있습니다. 데이터를 얻은 후 아래 이미지와 같이 데이터를 클릭하여 대시보드에 추가하여 표시합니다.
이미지는 kube-state-metrics 클라이언트에서 apiserver로의 요청 빈도가 다른 클라이언트보다 훨씬 높다는 것을 보여줍니다. 로그에 따르면 kube-state-metrics는 RBAC 권한 문제로 인해 apiserver에 요청을 계속 보내며, 결과적으로 apiserver 액세스 제한이 트리거됩니다. 로그는 다음과 같습니다.
I1009 13:13:09.760767 1 request.go:538] Throttling request took 1.393921018s, request: GET:https://172.16.252.1:443/api/v1/endpoints?limit=500&resourceVersion=1029843735
E1009 13:13:09.766106 1 reflector.go:156] pkg/mod/k8s.io/client-go@v0.0.0-20191109102209-3c0d1af94be5/tools/cache/reflector.go:108: Failed to list *v1.Endpoints: endpoints is forbidden: User "system:serviceaccount:monitoring:kube-state-metrics" cannot list resource "endpoints" in API group "" at the cluster scope
user.username과 같은 다른 필드를 사용하여 데이터를 수집할 클라이언트를 구분하려면 필요에 따라 SQL 문을 수정할 수 있습니다. SQL문의 예시는 다음과 같습니다.
* | SELECT histogram( cast(__TIMESTAMP__ as timestamp),interval 1 minute) AS time, COUNT(1) AS qps,user.username GROUP BY time,user.username ORDER BY time
관련 문서
TKE 클러스터 감사 기능 및 기본 작업에 대한 자세한 내용은 클러스터 감사를 참고하십시오. 클러스터 감사 데이터는 CLS에 저장됩니다. CLS 콘솔에서 감사 결과를 검색하고 분석하려면 검색 구문에 대한 구문 및 규칙을 참고하십시오. 감사 데이터를 분석하기 위해서는 CLS에서 지원하는 SQL 문이 필요합니다. 자세한 내용은 개요를 참고하십시오.