이 문서에서는 Inspektor 가젯을 사용하여 AKS(Microsoft Azure Kubernetes Service) 클러스터에서 실시간 시스템 인사이트를 수집하는 프로세스에 대해 설명합니다. 이 문서에는 AKS 환경에 이 도구를 설치하기 위한 단계별 지침이 포함되어 있습니다. 또한 Inspektor 가젯을 통해 중요한 정보를 수집하여 실제 문제를 효과적으로 디버깅하는 방법을 보여 주는 실용적인 예제를 살펴봅니다.
데모: 실시간 DNS 문제 해결 및 중요한 파일 액세스 경고
시작하려면 다음 빠른 데모를 고려하세요. 애플리케이션의 DNS 요청이 실패하는 이유를 파악해야 하는 경우를 가정해 보겠습니다. Inspektor 가젯을 사용하여 trace_dns 가젯 을 실행하여 애플리케이션이 실행 중인 Kubernetes 네임스페이스에서 DNS 트래픽을 캡처할 수 있습니다.
kubectl gadget run trace_dns \
--namespace my-ns \
--fields k8s.node,k8s.podName,id,qr,name,rcode,nameserver
K8S.NODE K8S.PODNAME ID QR NAME RCODE NAMESERVER
aks-nodepool-41788306-vmss000002 demo-pod 13cc Q example.com. 1.2.3.4
aks-nodepool-41788306-vmss000002 demo-pod 13cc Q example.com. 1.2.3.4
이 정보에서 DNS 요청이 IP 주소 1.2.3.4 (열에 표시된 NAMESERVER 대로)의 DNS 서버로 전송되는 것을 볼 수 있지만 쿼리(Q 열에 QR 있음)와 응답(RQR 열에)만 표시됩니다. 즉, DNS 서버가 쿼리에 응답하지 않았기 때문에 애플리케이션에서 도메인 이름을 www.example.com확인할 수 없습니다.
이제 기본 이름 서버 구성이 1.2.3.4 아니며 악의적인 프로세스가 런타임에 구성을 수정하는 것으로 의심한다고 가정합니다. 이러한 종류의 경우 Inspektor 가젯은 DNS 진단을 넘어갑니다. 또한 중요한 파일(예: /etc/resolv.conf)에 액세스하고 해당 파일을 수정하려는 프로세스를 모니터링할 수 있습니다. 이렇게 하려면 동일한 네임스페이스에서 trace_open 가젯 을 실행하고 파일에 쓰려는 의도 를 나타내는 파일 이름과 플래그로 결과를 필터링합니다(O_WRONLY 쓰기 전용으로 열거나 O_RDWR 읽기 및 쓰기용으로 열기).
kubectl gadget run trace_open \
--namespace my-ns \
--filter fname==/etc/resolv.conf,flags~'(O_WRONLY|O_RDWR)' \
--fields k8s.node,k8s.podName,comm,fname,flags,error
K8S.NODE K8S.PODNAME COMM FNAME FLAGS ERROR
aks-nodepool-41788306-vmss000002 demo-pod malicious-proc /etc/resolv.conf O_WRONLY
Inspektor 가젯이란?
Inspektor 가젯 은 Linux 및 Kubernetes에서 실행되는 워크로드를 쉽게 모니터링, 문제 해결 및 보호할 수 있는 프레임워크입니다. eBPF 프로그램을 활용하는 도구(가젯)로 구성됩니다. 주요 목표는 하위 수준 커널 데이터를 수집하여 특정 시스템 시나리오에 대한 인사이트를 제공하는 것입니다. Inspektor 가젯 프레임워크는 Kubernetes 리소스와 같은 개략적인 참조를 사용하여 수집된 데이터의 연결을 관리합니다. 이 통합을 통해 하위 수준 인사이트와 해당 상위 수준 컨텍스트 간에 원활한 연결이 존재합니다. 통합은 문제 해결 프로세스 및 관련 정보 수집을 간소화합니다.
가제트
Inspektor 가젯은 시스템의 일반적인 상황을 디버그하고 관찰하도록 설계된 기본 제공 도구 집합을 제공합니다. 예를 들어 이러한 가젯을 사용하여 클러스터에서 다음 이벤트를 추적할 수 있습니다.
- 프로세스 만들기
- 파일 액세스
- 네트워크 작업(예: TCP 연결 또는 DNS 확인)
가젯은 다른 메커니즘을 사용하여 수집한 정보를 제공합니다. 예를 들어 일부 가젯은 특정 시간에 시스템 상태에 대해 알려줄 수 있습니다. 다른 가젯은 지정된 이벤트가 발생할 때마다 보고하거나 주기적인 업데이트를 제공할 수 있습니다.
이는 몇 가지 예일 뿐입니다. 공식 설명서에서는 특정 사용 사례에 가장 적합한 가젯을 결정할 수 있도록 각 가젯에 대한 자세한 설명과 예제를 제공합니다. 그러나 기존 가젯이 현재 다루지 않는 사용 사례를 발견하면 Inspektor 가젯을 사용하면 실행 명령을 사용하여 고유한 eBPF 프로그램을 실행할 수 있습니다. Inspektor 가젯 프레임워크는 사용자 지정 프로그램의 빌드, 패키징 및 배포를 처리하므로 고유한 요구 사항에 대한 프로세스를 간소화합니다. 또한 높은 수준의 메타데이터를 수집하여 프로그램에서 수집하는 데이터를 보강합니다.
사용 사례
이 문서의 시작 부분에 제시된 데모를 보완하기 위해 Inspektor 가젯이 디버깅 문제를 해결하는 방법을 보여 주는 문제 및 실제 시나리오 목록을 컴파일했습니다. 다음 예제에서는 Inspektor 가젯의 잠재력을 보여 줍니다. 그러나 이 도구의 기능은 이러한 시나리오를 넘어 확장됩니다. 따라서 Inspektor 가젯은 Kubernetes 디버깅 및 관찰 가능성의 복잡성을 탐색하는 데 매우 중요한 자산이 됩니다.
| 문제 영역 | 증상 | 문제 해결 |
|---|---|---|
| 디스크 집약적 애플리케이션 | 높은 메모리 또는 CPU 사용량 또는 일관되지 않은 노드 준비 상태 | 애플리케이션은 광범위한 로깅과 같은 디스크 읽기/쓰기 작업에 지속적으로 참여할 수 있습니다. Inspektor 가젯을 사용하면 어떤 컨테이너가 더 많은 블록 I/O를 생성하는지 실시간으로 식별할 수 있습니다. 또는 더 구체적으로, 파일에 더 많은 읽기 및 쓰기를 발생시키는 컨테이너를 찾을 수 있습니다. |
| "항상 DNS입니다." | 높은 애플리케이션 대기 시간, 시간 제한 또는 잘못된 최종 사용자 환경 | Inspektor 가젯을 사용하여 클러스터의 모든 DNS 쿼리 및 응답을 추적할 수 있습니다. 특히 Inspektor 가젯은 DNS가 애플리케이션의 성능에 영향을 미치는지 여부를 확인하는 데 도움이 되는 다음 정보를 제공합니다.
|
| 파일 시스템 액세스 | 애플리케이션이 잘못 실행되거나 제대로 작동하지 않음 | 애플리케이션이 파일 시스템의 특정 구성, 로그 또는 기타 중요한 파일에 액세스할 수 없을 수 있습니다. 이러한 시나리오에서 Inspektor 가젯을 사용하면 Pod 내에서 열린 모든 파일을 추적하여 액세스 문제를 진단할 수 있습니다. 애플리케이션에서 파일을 열려고 할 때마다 다음 정보를 검색할 수 있습니다.
예를 들어 ENOENT(오류 2)로 인해 파일 열기 시도가 실패하는 경우 애플리케이션이 존재하지 않는 파일을 열려고 할 수 있습니다. 즉, 코드에 오타가 있거나 다른 경로에서 파일을 사용할 수 있습니다. |
| RCE(원격 코드 실행) | 애플리케이션 유휴 기간 동안 높은 CPU 사용량에서 분명한 암호화재킹과 같은 무단 코드 실행 | 공격자가 시스템에 대해 이런 종류의 공격을 시도할 때 일반적으로 을 사용하여 bash코드를 실행해야 합니다. Inspektor 가젯을 사용하면 새 프로세스, 특히 다음과 같은 bash중요한 명령을 포함하는 프로세스의 생성을 추적할 수 있습니다. |
AKS 클러스터에 Inspektor 가젯을 설치하는 방법
클러스터에 Inspektor 가젯을 배포하는 방법을 알아봅니다.
"kubectl 가젯" 플러그 인을 실행하여 Inspektor 가젯 설치
이 섹션에서는 플러그 인을 실행 kubectl gadget 하여 AKS 클러스터에 Inspektor 가젯을 설치하는 단계를 간략하게 설명합니다. 설치는 다음 두 부분으로 구성됩니다.
워크스테이션에
kubectl gadget플러그 인 설치클러스터에
kubectl gadgetInspektor 가젯을 배포하는 플러그 인 실행
경고
Inspektor 가젯을 배포하고 사용하는 데 많은 메커니즘을 사용할 수 있습니다. 이러한 각 메커니즘은 특정 사용 사례 및 요구 사항에 맞게 조정됩니다. kubectl 가젯 플러그 인을 사용하여 이러한 메커니즘 중 일부를 적용할 수 있지만 모두 적용할 수는 없습니다. 예를 들어 플러그 인을 사용하여 kubectl gadget Inspektor 가젯을 배포하는 것은 Kubernetes API 서버의 가용성에 따라 달라집니다. 가용성이 때때로 손상될 수 있으므로 이러한 구성 요소에 의존할 수 없는 경우 배포 메커니즘을 kubectl gadget 사용하지 않는 것이 좋습니다. 이 사용 사례 및 기타 사용 사례에 대한 자세한 내용은 Inspektor 가젯 설명서를 참조 하세요.
필수 조건
Kubernetes kubectl 명령줄 도구입니다. Azure CLI가 있는 경우 az aks install-cli 명령을 실행하여 kubectl을 설치할 수 있습니다.
AKS 클러스터. AKS 클러스터 가 없는 경우 Azure CLI 를 사용하거나 Azure Portal을 사용하여 클러스터를 만듭니다.
1부: 워크스테이션에 kubectl 가젯 플러그 인 설치
OS에 대한 지침을 사용합니다.
- Azure Linux 3.0
- Ubuntu 18.04 / 20.04 / 22.04
참고 항목
특정 릴리스를 설치하거나 원본에서 컴파일하려면 GitHub에 kubectl 가젯 설치를 참조하세요.
시스템에 Microsoft Cloud-Native 리포지토리를 추가합니다.
echo "[azurelinux-cloud-native] name=Azure Linux Cloud Native 3.0 baseurl=https://packages.microsoft.com/azurelinux/3.0/prod/cloud-native/$(uname -i) gpgkey=file:///etc/pki/rpm-gpg/MICROSOFT-RPM-GPG-KEY gpgcheck=1 repo_gpgcheck=1 enabled=1 skip_if_unavailable=True sslverify=1 " > /etc/yum.repos.d/azurelinux-cloud-native.repokubectl gadget플러그인을 설치합니다.tdnf install --refresh -y kubectl-gadget
이제 다음 명령을 실행하여 설치를 확인합니다.version
kubectl gadget version
명령 출력은 클라이언트kubectl gadget (플러그 인)의 버전과 서버(클러스터)에 아직 설치되지 않은 것을 보여 줍니다.
Client version: vX.Y.Z
Server version: not installed
2부: 클러스터에 Inspektor 가젯 배포
다음 명령은 DaemonSet 컨트롤러를 배포합니다.
참고 항목
다음 목록에 표시된 것처럼 배포를 사용자 지정하는 몇 가지 옵션을 사용할 수 있습니다.
- 특정 컨테이너 이미지 사용
- 특정 노드에 배포
- 사용자 지정 네임스페이스에 배포
이러한 옵션에 대한 자세한 내용은 공식 설명서의 클러스터 섹션에 있는 설치를 참조하세요.
kubectl gadget deploy
명령을 다시 실행하여 설치를 version 확인합니다.
kubectl gadget version
이번에는 클라이언트와 서버가 모두 올바르게 설치되는 것으로 표시됩니다.
Client version: vX.Y.Z
Server version: vX.Y.Z
Microsoft Cloud-Native 리포지토리에서 사용할 수 있는 플러그 인을 kubectl gadget 사용하여 Inspektor 가젯을 배포할 때 DaemonSet에 사용되는 컨테이너 이미지는 MCR(Microsoft Container Registry)에서 자동으로 가져옵니다.
kubectl get daemonset gadget -n gadget -o jsonpath='{.spec.template.spec.containers[*].image}'
mcr.microsoft.com/oss/v2/inspektor-gadget/inspektor-gadget:vX.Y.Z
참고 항목
크루 패키지 관리자를 사용하여 kubectl 플러그 인을 설치하고 GitHub 리포지토리에서 직접 Inspektor 가젯을 설치하려는 경우 다음 명령을 사용하여 쉽게 플러그 인을 설치 kubectl gadget 하고 클러스터에 Inspektor 가젯을 배포할 수 있습니다.
kubectl krew install gadget
kubectl gadget deploy
타사 정보 고지 사항
이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이들 제품의 성능이나 안정성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.
타사 연락처 고지
이 문서에 포함된 타사의 연락처 정보는 이 항목에 대한 추가 정보를 찾는 데 도움을 주기 위한 것입니다. 이 연락처 정보는 공지 없이 변경될 수 있습니다. Microsoft는 타사 연락처 정보의 정확성을 보증하지 않습니다.
도움을 요청하십시오.
질문이 있는 경우 Azure 커뮤니티 지원을 요청할 수 있습니다. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.