MCP(모델 컨텍스트 프로토콜) 서버를 사용하여 AKS(Azure Kubernetes Service) 클러스터를 AI 에이전트에 연결

AKS MCP(모델 컨텍스트 프로토콜) 서버를 사용하면 AI 도우미가 명확성, 안전성 및 제어를 통해 AKS(Azure Kubernetes Service) 클러스터와 상호 작용할 수 있습니다. 이는 AI 도구(예: GitHub Copilot, Claude 및 기타 MCP 호환 AI 도우미)와 AKS 간의 브리지 역할을 하며, 자연어 요청을 AKS 작업으로 변환하고 AI 도구가 이해할 수 있는 형식으로 결과를 반환합니다.

AKS MCP 서버는 Azure SDK를 사용하여 Azure에 연결하고 AI 도우미가 AKS 리소스와 상호 작용하는 데 사용할 수 있는 도구 집합을 제공합니다. 이러한 도구를 통해 AI 에이전트는 다음과 같은 작업을 수행할 수 있습니다.

  • 문제 해결 및 진단
  • 클러스터의 상태 분석
  • AKS 리소스 운영 (CRUD)
  • AKS 클러스터(VNet, 서브넷, NSG(네트워크 보안 그룹), 경로 테이블 등)과 관련된 세부 정보를 검색합니다.
  • 모범 사례 적용 및 권장 기능 활성화
  • 다중 클러스터 시나리오에 대한 Azure Fleet 작업 관리

AKS MCP 서버는 GitHub 리포지토리에서 사용할 수 있는 예제 템플릿 및 Helm 구성이 있는 완전히 오픈 소스 프로젝트입니다.

AKS MCP 서버를 사용하는 경우

AKS MCP 서버는 AKS 및 Microsoft Copilot 용 에이전트 CLI 를 포함하여 호환되는 AI 도우미와 함께 사용할 수 있습니다. 일반적인 사용 사례는 다음과 같습니다.

  • AI 도우미에게 다음과 같은 질문을 합니다.
    • "Pod가 이 클러스터에서 보류 중인 이유는 무엇인가요?"
    • "내 AKS 클러스터의 네트워크 구성은 무엇인가요?"
    • "app=frontend 레이블을 사용하여 클러스터에 nginx 워크로드를 배포하는 배치를 만듭니다."
  • AI 도구에서 다음을 수행할 수 있도록 허용:
    • 클러스터 상태 및 구성 읽기
    • 메트릭, 이벤트 및 로그 검사
    • Kubernetes 및 Azure 리소스 간에 신호 상관 관계 지정
    • 변경 내용을 적용하고 클러스터에서 직접 새 기능을 사용하도록 설정

AKS MCP 서버를 통해 수행되는 모든 작업은 Kubernetes Role-Based RBAC(Access Control) 및 Azure RBAC에 의해 제한됩니다. 기본적으로 AKS MCP 서버는 클러스터 및 Azure 리소스에 액세스할 때 사용자의 권한을 상속합니다. AKS MCP 서버의 역할 및 권한을 사용자 지정하려면 기본 제공 RBAC 제어를 사용하여 원격 AKS MCP 서버 모드를 배포합니다.

사용 가능한 도구

AKS MCP 서버는 AKS 클러스터 및 관련 리소스와 상호 작용하기 위한 포괄적인 도구 집합을 제공합니다. 기본적으로 서버는 Kubernetes 및 Azure 리소스와 상호 작용하기 위한 보다 유연한 인터페이스를 제공하는 call_az(call_kubectlAzure 작업 및 Kubernetes 작업용)를 사용합니다.

AKS MCP 서버에는 읽기 전용(기본값), 읽기/쓰기 및 관리자의 세 가지 사용 권한 집합이 있습니다. 클러스터에 디버깅 Pod 또는 CRUD 작업 배포와 같은 작업을 수행하려면 일부 도구에 읽기/쓰기 또는 관리자 권한이 필요합니다. AKS-MCP 서버에 대한 읽기-쓰기 또는 관리자 권한을 사용하도록 설정하려면 MCP 구성 파일에 액세스 수준 매개 변수를 추가합니다.

  1. mcp.json 파일로 이동하거나 MCP: 서버 나열 - AKS-MCP ->>명령 팔레트에 구성 세부 정보 표시(VS Code의 경우, Ctrl+Shift+P Windows/Linux 또는 Cmd+Shift+P macOS)로 이동합니다.
  2. AKS-MCP의 "args" 섹션에서 "--access-level", "readwrite" 또는 "admin" 매개 변수를 추가합니다.

다음은 그 예입니다.

"args": [
  "--transport",
  "stdio",
  "--access-level",
  "readwrite"
]

이러한 도구는 통합 인터페이스를 통해 포괄적인 기능을 제공하도록 설계되었습니다.

Azure CLI 작업(통합 도구)

도구:call_az

Azure CLI 명령을 직접 실행하기 위한 통합 도구입니다. 이 도구는 Azure CLI 명령을 실행할 수 있는 유연한 인터페이스를 제공합니다.

매개 변수:

  • cli_command: 실행할 전체 Azure CLI 명령입니다. 예를 들어 az aks list --resource-group myRG 또는 az vm list --subscription <sub-id>.
  • timeout: 선택적 시간 제한(초)(기본값: 120)

사용 예:

{
  "cli_command": "az aks list --resource-group myResourceGroup --output json"
}

액세스 제어:

  • 읽기 전용: 읽기 작업만 허용됩니다.
  • readwrite/admin: 읽기 및 쓰기 작업이 모두 허용됩니다.

중요합니다

명령은 파이프(|), 리디렉션>(, <), 명령 대체 또는 세미콜론(;) 같은 셸 기능이 없는 간단한 Azure CLI 호출이어야 합니다.

Kubernetes 작업(통합 도구)

통합 kubectl 도구

도구:call_kubectl

kubectl 명령을 직접 실행하기 위한 통합 도구입니다. 이 도구는 전체 인수 지원을 사용하여 모든 kubectl 명령을 실행할 수 있는 유연한 인터페이스를 제공합니다.

매개 변수:

  • args: kubectl 명령 인수입니다. 예를 들어 get pods, describe node mynode 또는 apply -f deployment.yaml입니다.

사용 예:

{
  "args": "get pods -n kube-system -o wide"
}

액세스 제어: 작업은 구성된 액세스 수준에 따라 제한됩니다.

  • readonly: 읽기 작업(가져오기, 설명, 로그 등)만 허용됩니다.
  • readwrite/admin: 변경 명령을 포함한 모든 작업(만들기, 삭제, 적용 등)

헬름

도구:call_helm

Kubernetes에 대한 Helm 패키지 관리자입니다.

Cilium

도구:call_cilium

eBPF 기반 네트워킹 및 보안을 위한 Cilium CLI입니다.

허블

도구:call_hubble

Cilium에 대한 허블 네트워크 관찰 가능성.

네트워크 리소스 관리

도구:aks_network_resources

AKS 클러스터에서 사용하는 Azure 네트워크 리소스 정보를 가져오기 위한 통합 도구입니다.

사용 가능한 리소스 종류:

  • all: 모든 네트워크 리소스에 대한 정보 가져오기
  • vnet: Virtual Network 정보
  • subnet: 서브넷 정보
  • nsg: 네트워크 보안 그룹 정보
  • route_table: 경로 테이블 정보
  • load_balancer: 로드 밸런서 정보
  • private_endpoint: 프라이빗 엔드포인트 정보
모니터링 및 진단

도구:aks_monitoring

AKS 클러스터에 대한 Azure 모니터링 및 진단 작업을 위한 통합 도구입니다.

사용 가능한 작업:

  • metrics: 리소스에 대한 메트릭 값 나열
  • resource_health: AKS 클러스터에 대한 리소스 상태 이벤트 검색
  • app_insights: Application Insights 원격 분석 데이터에 대해 KQL 쿼리 실행
  • diagnostics: AKS 클러스터에 진단 설정이 구성되어 있는지 확인
  • control_plane_logs: 안전 제약 조건 및 시간 범위 유효성 검사를 사용하여 AKS 컨트롤 플레인 로그 쿼리
컴퓨팅 리소스

도구:get_aks_vmss_info

  • AKS 클러스터에서 Virtual Machine Scale Sets(노드 풀)의 자세한 구성 가져오기
플릿 관리

도구:az_fleet

다중 클러스터 시나리오에 대한 포괄적인 Azure Fleet 관리.

사용 가능한 작업:

  • Fleet Operations: 목록, 열기, 생성, 업데이트, 삭제, 자격증명 가져오기
  • 멤버 작업: 목록, 표시, 만들기, 업데이트, 삭제
  • 실행 작업 업데이트: 목록, 표시, 만들기, 시작, 중지, 삭제
  • 업데이트 전략 작업: 목록, 표시, 만들기, 삭제
  • ClusterResourcePlacement 작업: 목록, 표시, 가져오기, 만들기, 삭제

Azure Fleet 관리 및 Kubernetes ClusterResourcePlacement CRD 작업을 모두 지원합니다.

진단 탐지기

도구:aks_detector

AKS 진단 탐지기 작업을 실행하기 위한 통합 도구입니다.

사용 가능한 작업:

  • list: 사용 가능한 모든 AKS 클러스터 감지기 나열
  • run: 특정 AKS 진단 탐지기 실행
  • run_by_category: 특정 범주의 모든 탐지기 실행

매개 변수:

  • operation(필수): 수행할 작업(list또는runrun_by_category)
  • aks_resource_id (필수): AKS 클러스터 리소스 ID
  • detector_name (작업에 필요 run ): 실행할 탐지기의 이름
  • category (run_by_category 작업에 필요): 감지기 범주
  • start_time (필수 runrun_by_category 작업): UTC ISO 형식의 시작 시간(지난 30일 이내)
  • end_time (필수 runrun_by_category 작업): UTC ISO 형식의 종료 시간(지난 30일 이내, 시작 후 최대 24시간)

사용 가능한 범주:

  • 모범 사례
  • 클러스터 및 컨트롤 플레인 가용성 및 성능
  • 연결 문제
  • 만들기, 업그레이드, 삭제 및 크기 조정
  • 사용 중단
  • ID 및 보안
  • 노드 상태
  • Storage

사용 예:

도구:run_detectors_by_category

{
  "operation": "list",
  "aks_resource_id": "/subscriptions/xxx/resourceGroups/xxx/providers/Microsoft.ContainerService/managedClusters/xxx"
}
{
  "operation": "run",
  "aks_resource_id": "/subscriptions/xxx/resourceGroups/xxx/providers/Microsoft.ContainerService/managedClusters/xxx",
  "detector_name": "node-health-detector",
  "start_time": "2025-01-15T10:00:00Z",
  "end_time": "2025-01-15T12:00:00Z"
}
Azure Advisor

도구:aks_advisor_recommendation

AKS 클러스터에 대한 Azure Advisor 권장 사항을 검색하고 관리합니다.

사용 가능한 작업:

  • list: 필터링 옵션을 사용하여 권장 사항 나열
  • report: 권장 사항 보고서 생성
  • 필터 옵션: resource_group, cluster_names, 범주(비용, 고가용성, 성능, 보안), 심각도(높음, 중간, 낮음)
실시간 관찰 가능성

도구:inspektor_gadget_observability

eBPF를 사용하는 AKS(Azure Kubernetes Service) 클러스터에 대한 실시간 관찰 도구입니다.

사용 가능한 작업:

  • deploy: 클러스터에 Inspektor 가젯 배포
  • undeploy: 클러스터에서 Inspektor 가젯 제거
  • is_deployed: 배포 상태 확인
  • run: 원샷 가젯 실행
  • start: 연속 가젯 시작
  • stop: 가젯 실행 중지
  • get_results: 가젯 결과 검색
  • list_gadgets: 사용 가능한 가젯 나열

사용 가능한 가젯:

  • observe_dns: DNS 요청 및 응답 모니터링
  • observe_tcp: TCP 연결 모니터링
  • observe_file_open: 파일 시스템 작업 모니터링
  • observe_process_execution: 프로세스 실행 모니터링
  • observe_signal: 신호 전달 모니터링
  • observe_system_calls: 시스템 호출 모니터링
  • top_file: I/O 작업별 상위 파일
  • top_tcp: 트래픽별 상위 TCP 연결
  • tcpdump: 네트워크 패킷 캡처

AKS MCP 서버 시작

AKS MCP 서버에는 로컬 및 원격의 두 가지 모드가 있습니다. 이 섹션에서는 두 모드 모두에 대한 사용 사례 및 설치 프로세스를 다룹니다.

로컬 MCP 서버

로컬 모드에서 MCP 서버는 개발자의 로컬 컴퓨터에서 실행되고 개발자의 기존 권한을 사용하여 AKS에 연결합니다. 이 모드는 클러스터 쪽 구성 요소 없이 AKS 전문 지식 및 도구를 사용하여 로컬 AI 에이전트를 신속하게 설정하는 데 가장 적합합니다. 로컬 모드는 현재 클러스터 컨텍스트를 사용할 수 있으며 개발자의 Kubernetes 및 Azure RBAC 권한을 적용합니다. 기본적으로 로컬 AKS MCP 서버는 STDIO 및 SSE 전송 모드를 지원합니다.

필수 조건

AKS MCP 서버를 설치하기 전에 Azure CLI 를 설정하고 다음을 인증합니다.

az login

AKS-MCP 시작하는 가장 쉬운 방법은 VS Code용 Azure Kubernetes 서비스 확장을 사용하는 것입니다. AKS 확장은 이진 다운로드, 업데이트 및 구성을 자동으로 처리하여 최적의 설정으로 항상 최신 버전을 사용할 수 있도록 합니다.

1단계: AKS 확장 설치

  1. VS Code를 열고 확장(Ctrl+Shift+X Windows/Linux 또는 Cmd+Shift+X macOS)으로 이동합니다.
  2. Azure Kubernetes Service를 검색합니다.
  3. 공식 Microsoft AKS 확장을 설치합니다.

2단계: AKS-MCP 서버 시작

  1. 명령 팔레트(Ctrl+Shift+PWindows/Linux 또는 Cmd+Shift+P macOS)를 엽니다.
  2. 검색 및 실행: AKS: AKS MCP 서버를 설치합니다.

설치가 성공하면 서버가 MCP: 목록 서버 (명령 팔레트를 통해)에 표시됩니다. 여기에서 MCP 서버를 시작하거나 해당 상태를 볼 수 있습니다.

3단계: AKS-MCP 사용 시작

시작되면 MCP 서버는 코-파일럿 채팅: 도구 구성 드롭다운에 MCP Server: AKS MCP 나타나며, AKS 환경에 맞춰 상황별 프롬프트를 개선할 준비가 됩니다. 기본적으로 모든 AKS-MCP 서버 도구가 사용하도록 설정됩니다. 사용 가능한 도구 목록을 검토하고 시나리오에 필요하지 않은 도구를 사용하지 않도록 설정할 수 있습니다.

"모든 AKS 클러스터 나열"이라는 프롬프트를 사용하여 AKS-MCP 서버의 도구 사용을 시작합니다.

팁 (조언)

WSL 구성: Windows에서 WSL과 함께 VS Code를 사용하는 경우, "command": "wsl"를 사용하여 WSL 이진 파일을 호출합니다. VS Code가 WSL(Remote-WSL) 내에서 실행되는 경우 이진 파일을 직접 호출하거나 대신 bash 래퍼를 사용합니다.

원격 MCP 서버

원격 모드에서 MCP 서버는 AKS 클러스터 내의 워크로드 또는 선택한 컴퓨팅으로 실행됩니다. 이 모드는 공유 도구, 사용자 간에 일관된 권한 및 Kubernetes ServiceAccount 및 워크로드 ID를 사용하는 모든 액세스 제어가 있는 프로덕션 환경에 가장 적합합니다. 원격 AKS MCP 서버는 HTTP 프로토콜을 사용하여 AI 도우미와 AKS 클러스터 간의 상호 작용을 용이하게 합니다.

필수 조건

  • Kubernetes 1.19 이상인 AKS 클러스터
  • Helm 3.8+
  • Azure CLI 설치 및 인증(az login)

Helm 차트를 사용하여 설치

리포지토리를 복제하고 AKS-MCP Helm 차트를 설치합니다.

git clone https://github.com/Azure/aks-mcp.git
cd aks-mcp/chart

helm install aks-mcp . --namespace aks-mcp --create-namespace

구성 매개 변수의 전체 목록은 Helm 차트 설명서를 참조하세요.

인증 구성

환경 및 보안 요구 사항에 따라 인증 방법을 선택합니다.

워크로드 ID는 Kubernetes ServiceAccount를 Azure 관리 ID에 연결하여 암호 없는 인증을 제공합니다.

1. AKS 클러스터에서 OIDC 사용

az aks update \
  --resource-group <your-resource-group> \
  --name <your-aks-cluster> \
  --enable-oidc-issuer \
  --enable-workload-identity

2. 관리 ID 만들기 및 RBAC 권한 할당

# Create identity
az identity create --resource-group <your-resource-group> --name aks-mcp-identity --location <your-location>

# Get IDs
IDENTITY_CLIENT_ID=$(az identity show --resource-group <your-resource-group> --name aks-mcp-identity --query "clientId" -o tsv)
IDENTITY_PRINCIPAL_ID=$(az identity show --resource-group <your-resource-group> --name aks-mcp-identity --query "principalId" -o tsv)

# Assign Reader role (use Contributor for readwrite access)
az role assignment create --role "Reader" --assignee-object-id $IDENTITY_PRINCIPAL_ID --assignee-principal-type ServicePrincipal --scope "/subscriptions/<subscription-id>"

3. 페더레이션 ID 자격 증명 만들기

AKS_OIDC_ISSUER=$(az aks show --resource-group <your-resource-group> --name <your-aks-cluster> --query "oidcIssuerProfile.issuerUrl" -o tsv)

az identity federated-credential create \
  --name "aks-mcp-federated-credential" \
  --identity-name aks-mcp-identity \
  --resource-group <your-resource-group> \
  --issuer $AKS_OIDC_ISSUER \
  --subject "system:serviceaccount:aks-mcp:aks-mcp" \
  --audience api://AzureADTokenExchange

중요합니다

Helm 차트를 설치 하기 전에 페더레이션 자격 증명을 만듭니다.

4. 워크로드 ID를 사용하도록 설정하여 설치

helm install aks-mcp . \
  --namespace aks-mcp \
  --create-namespace \
  --set workloadIdentity.enabled=true \
  --set azure.clientId=$IDENTITY_CLIENT_ID \
  --set azure.subscriptionId=<your-subscription-id>

Azure 앱 라우팅으로 인그레스를 활성화하세요.

Azure 앱 라우팅을 사용하여 MCP 서버를 외부에서 노출합니다.

# Enable App Routing on your cluster
az aks approuting enable --resource-group <your-resource-group> --name <your-cluster-name>

# Install with Ingress enabled
helm install aks-mcp . \
  --namespace aks-mcp \
  --create-namespace \
  --set ingress.enabled=true \
  --set ingress.hosts[0].host=aks-mcp.example.com \
  --set ingress.hosts[0].paths[0].path=/ \
  --set ingress.hosts[0].paths[0].pathType=Prefix \
  --set azure.existingSecret=azure-credentials

MCP 클라이언트 연결

배포 후 AI 도우미를 원격 MCP 서버에 연결합니다.

# Port forward for local testing
kubectl port-forward svc/aks-mcp 8000:8000 -n aks-mcp

연결하도록 MCP 클라이언트를 구성합니다.

{
  "mcpServers": {
    "aks-mcp": {
      "url": "http://localhost:8000",
      "transport": "streamable-http"
    }
  }
}

클러스터 내 액세스의 경우 다음을 사용합니다. http://aks-mcp.aks-mcp.svc.cluster.local:8000

Helm 구성 참조

매개 변수 Description Default
workloadIdentity.enabled Azure 워크로드 ID 활성화 false
azure.clientId Azure 클라이언트 ID ""
azure.tenantId Azure 테넌트 ID ""
azure.clientSecret Azure 클라이언트 암호 ""
azure.subscriptionId Azure 구독 ID ""
azure.existingSecret 기존 Kubernetes 비밀 사용 ""
app.accessLevel 액세스 수준: readonly, readwriteadmin readonly
app.transport 전송: stdio, sse, streamable-http streamable-http
oauth.enabled OAuth 인증 사용 false
ingress.enabled 인그레스 활성화 false

AKS MCP 서버 제거

AKS MCP 서버를 제거하는 프로세스는 배포 모드와 현재 실행 중인 위치에 따라 달라집니다.

AKS 확장을 사용하는 VS Code

  1. 명령 팔레트(Ctrl+Shift+PWindows/Linux 또는 Cmd+Shift+P macOS)를 엽니다.
  2. MCP 실행: 서버 나열
  3. 목록에서 AKS MCP 를 선택합니다.
  4. 서버 중지를 선택하여 실행 중인 서버를 중지합니다.
  5. 구성을 제거하려면 서버 구성 삭제를 선택합니다.

또는 서버 구성을 수동으로 제거합니다.

  1. .vscode/mcp.json 파일 또는 VS Code 사용자 설정을 엽니다.
  2. aks-mcp-server 또는 servers 개체에서 github.copilot.chat.mcp.servers 항목을 삭제합니다.
  3. 시스템에서 AKS-MCP 이진 파일을 삭제합니다(위치는 설치 방법에 따라 다름).

도커

Docker MCP 도구 키트를 사용하는 경우:

  1. Docker Desktop을 엽니다.
  2. 왼쪽 사이드바에서 MCP 도구 키트 를 선택합니다.
  3. AKS-MCP 서버를 찾아 사용하지 않도록 설정합니다.

컨테이너화된 구성을 사용하는 경우 컨테이너를 중지하고 제거합니다.

docker stop <container-id>
docker rm <container-id>

기타 MCP 클라이언트

aks 또는 aks-mcp 항목을 MCP 클라이언트 구성 파일(예: Claude Desktop의 경우)에서 제거합니다.

일반적인 문제 및 문제 해결

이 섹션에서는 일반적인 설정 및 런타임 문제, 증상 및 해결 방법을 간략하게 설명합니다.

AKS MCP 서버가 클러스터에 액세스할 수 없습니다.

증상:

  • 도구에서 권한 부여 오류를 반환합니다.
  • 리소스가 표시되지 않음

가능한 원인:

  • 사용자 또는 MCP ID에 충분한 권한이 없습니다.
  • 잘못된 ServiceAccount 바인딩
  • 잘못 구성된 kubeconfig 컨텍스트(로컬 모드)

해결 방법:

  • 로컬 모드: 클러스터에 액세스할 수 있는 충분한 권한이 있는지 확인합니다. 올바른 클러스터 및 구독 컨텍스트에 있는지 확인합니다.
  • 원격 모드: MCP 서버에서 사용하는 ServiceAccount에 대한 ClusterRole 바인딩 확인

Azure API 호출 실패

증상:

  • call_az 도구는 인증 또는 권한 부여 오류를 반환합니다.

가능한 원인:

  • 클러스터에 대해 워크로드 ID를 사용하도록 설정되지 않음
  • ServiceAccount가 페더레이션되지 않음
  • 누락된 Azure RBAC 할당

해결 방법:

  • 클러스터에서 워크로드 ID가 사용하도록 설정되어 있는지 확인합니다.
  • 페더레이션 ID 구성 확인
  • 관리 ID에 적절한 Azure 역할 할당

다음 단계:

AKS용으로 기본적으로 빌드된 지능형 기능에 대해 자세히 알아봅니다.

  • AKS용 에이전트 특성을 가진 CLI 소개
  • AKS용 에이전트 CLI 설치 및 사용