Kubernetes Model Context Protocol (MCP) sunucusu; API kaynak keşfi, kaynak yönetimi, pod logları, metrikler ve olayları içeren standartlaştırılmış bir arayüz aracılığıyla Kubernetes kümelerine etkileşim kurmak için araçlar sunar.
Claude Desktop config.json'a ekle
{
"mcpServers": {
"reza-gholizade-k8s-mcp-server": {
"command": "node",
"args": [
"~/.mcp/k8s-mcp-server/index.js"
]
}
}
} Kaynak kodu al ve yerel olarak çalıştır
git clone https://github.com/reza-gholizade/k8s-mcp-server.git ~/.mcp/k8s-mcp-server
cd ~/.mcp/k8s-mcp-server Kubernetes kümelerine standartlaştırılmış bir arayüz üzerinden etkileşim kurma araçları sağlayan bir Kubernetes Model Context Protocol (MCP) sunucusu.
Fronteir AI üzerinde barındırılan bir dağıtım mevcuttur.
kubectl describe benzeri.stdio modu, web uygulamaları için sse modu veya streamable-http modu, ve kümedeki değişiklikleri devre dışı bırakmak için --readonly modu kullanın.kubectl uygun küme erişimi ile yapılandırılmışDepoyu klonlayın:
git clone https://github.com/reza-gholizade/k8s-mcp-server.git
cd k8s-mcp-server
Bağımlılıkları yükleyin:
go mod download
Sunucuyu derleyin:
go build -o k8s-mcp-server main.go
Sunucu üç modda çalışabilir, komut satırı bayrakları veya ortam değişkenleri aracılığıyla yapılandırılabilir.
Bu mod standart girdi/çıktı kullanarak iletişim kurar.
./k8s-mcp-server --mode stdio
Veya ortam değişkenleri kullanarak:
SERVER_MODE=stdio ./k8s-mcp-server
Bu mod Server-Sent Events desteği ile bir HTTP sunucusu başlatır.
Varsayılan (8080 portu):
./k8s-mcp-server --mode sse
Port belirtin:
./k8s-mcp-server --mode sse --port 9090
Veya ortam değişkenleri kullanarak:
SERVER_MODE=sse SERVER_PORT=9090 ./k8s-mcp-server
Bu mod, MCP özelliklerine uygun olarak streamable-http taşıma desteği ile bir HTTP sunucusu başlatır.
Varsayılan (8080 portu):
./k8s-mcp-server --mode streamable-http
Port belirtin:
./k8s-mcp-server --mode streamable-http --port 9090
Veya ortam değişkenleri kullanarak:
SERVER_MODE=streamable-http SERVER_PORT=9090 ./k8s-mcp-server
Sunucu http://localhost:8080/mcp adresinde kullanılabilir olacaktır (veya belirttiğiniz port).
Mod belirtilmezse, varsayılan olarak 8080 portunda SSE olarak ayarlanır.
Sunucu birden fazla kimlik doğrulama yöntemini destekler ve aşağıdaki öncelik sırasında denenirler:
KUBECONFIG_DATA ortam değişkeni aracılığıyla kubeconfig dosyasının tamamını sağlayabilirsiniz:
export KUBECONFIG_DATA="$(cat ~/.kube/config)"
./k8s-mcp-server
Bu, dosyaları monte etmekten kaçınmak istediğinizde veya dosya erişiminin kısıtlı olduğu ortamlarda çalışırken kullanışlıdır.
Kubernetes API sunucusu URL'si ve bearer token kullanarak kimlik doğrulaması yapabilirsiniz:
export KUBERNETES_SERVER="https://kubernetes.example.com:6443"
export KUBERNETES_TOKEN="your-bearer-token-here"
./k8s-mcp-server
TLS yapılandırması için isteğe bağlı ortam değişkenleri:
KUBERNETES_CA_CERT: CA sertifikası içeriği (base64 kodlanmış veya PEM formatı)KUBERNETES_CA_CERT_PATH: CA sertifikası dosyasının yoluKUBERNETES_INSECURE: TLS doğrulamasını atlamak için "true" olarak ayarlayın (üretim için önerilmez)CA sertifikası ile örnek:
export KUBERNETES_SERVER="https://kubernetes.example.com:6443"
export KUBERNETES_TOKEN="your-bearer-token-here"
export KUBERNETES_CA_CERT_PATH="/path/to/ca.crt"
./k8s-mcp-server
Kubernetes kümesi içinde çalışırken, sunucu /var/run/secrets/kubernetes.io/serviceaccount/token adresinden hizmet hesabı token'ını otomatik olarak algılar ve kullanır. Bu, sunucuyu bir pod olarak küme içinde çalıştırmak için önerilen yöntemdir.
Örnek Dağıtım:
apiVersion: v1
kind: ServiceAccount
metadata:
name: k8s-mcp-server-sa
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: k8s-mcp-server-role
rules:
- apiGroups: [""]
resources: ["*"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["apps"]
resources: ["*"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
# Kullanım durumunuz için gerekli olduğu kadar kural ekleyin
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: k8s-mcp-server-rb
subjects:
- kind: ServiceAccount
name: k8s-mcp-server-sa
namespace: default
roleRef:
kind: ClusterRole
name: k8s-mcp-server-role
apiGroup: rbac.authorization.k8s.io
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-mcp-server
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: k8s-mcp-server
template:
metadata:
labels:
app: k8s-mcp-server
spec:
serviceAccountName: k8s-mcp-server-sa
containers:
- name: k8s-mcp-server
image: ginnux/k8s-mcp-server:latest
ports:
- containerPort: 8080
env:
- name: SERVER_MODE
value: "sse"
- name: SERVER_PORT
value: "8080"
Yukarıdaki yöntemlerden hiçbiri mevcut değilse, sunucu bir kubeconfig dosyasını kullanmaya döner:
--kubeconfig bayrağı (eğer uygulanmışsa) veya KUBECONFIG ortam değişkeni aracılığıyla sağlanan yolu kullanır~/.kube/config dosyasına döner# Varsayılan ~/.kube/config kullanın
./k8s-mcp-server
# Özel kubeconfig yolunu kullanın
export KUBECONFIG=/path/to/your/kubeconfig
./k8s-mcp-server
Not: Sunucu mevcut ortam değişkenlerine ve dosya sistemi temelinde hangi kimlik doğrulama yönteminin kullanılacağını otomatik olarak algılar. Kimlik doğrulama yöntemini açıkça yapılandırmanız gerekmez - yukarıda listelenen öncelik sırasına göre ilk kullanılabilir yöntemi kullanacaktır.
Sunucu, tüm yazma işlemlerini devre dışı bırakan ve Kubernetes kümenizi değişiklik riski olmadan keşfetme ve izleme konusunda daha güvenli bir yol sağlayan salt okunur bir modu destekler.
--read-only bayrağı ile salt okunur modu etkinleştirin:
./k8s-mcp-server --read-only
Salt okunur modu herhangi bir sunucu modunda birleştirebilirsiniz:
# stdio modu ile salt okunur
./k8s-mcp-server --mode stdio --read-only
# SSE modu ile salt okunur
./k8s-mcp-server --mode sse --read-only
# streamable-http modu ile salt okunur
./k8s-mcp-server --mode streamable-http --read-only
Salt okunur modu etkinleştirildiğinde, aşağıdaki araçlar devre dışı bırakılır:
createResource (Kubernetes kaynağı oluşturma/güncellemeler)helmInstall (Helm grafik yüklemeleri)helmUpgrade (Helm grafik yükseltmeleri)helmUninstall (Helm grafik kaldırmaları)helmRollback (Helm sürümü geri almaları)helmRepoAdd (Helm depo eklemeleri)Kaynakları listeleme, günlükleri alma, metrikleri görüntüleme ve Helm sürümlerini inceleme dahil diğer tüm salt okunur işlemler kullanılabilir kalır.
Bu bayrakları kullanarak araç kategorilerini seçici olarak devre dışı bırakabilirsiniz:
Kubernetes Araçlarını Devre Dışı Bırakın:
./k8s-mcp-server --no-k8s
Helm Araçlarını Devre Dışı Bırakın:
./k8s-mcp-server --no-helm
Diğer bayraklarla birleştirin:
# Yalnızca Kubernetes araçları ile salt okunur modu (Helm yok)
./k8s-mcp-server --read-only --no-helm
# Yalnızca Helm araçları ile salt okunur modu (Kubernetes yok)
./k8s-mcp-server --read-only --no-k8s
# Yalnızca Kubernetes araçları ile SSE modu
./k8s-mcp-server --mode sse --no-helm
Not: Her ikisi birlikte --no-k8s ve --no-helm kullanamazsınız, çünkü bu kullanılabilir araç olmadığını sonuçlandırır. Her iki bayrak sağlanırsa sunucu bir hatayla çıkacaktır.
--no-k8s etkinleştirildiğinde, tüm Kubernetes araçları devre dışı bırakılır:
getAPIResources, listResources, getResource, describeResourcegetPodsLogs, getNodeMetrics, getPodMetrics, getEventscreateResource (salt okunur modda değilse)--no-helm etkinleştirildiğinde, tüm Helm araçları devre dışı bırakılır:
helmList, helmGet, helmHistory, helmRepoListhelmInstall, helmUpgrade, helmUninstall, helmRollback, helmRepoAdd (salt okunur modda değilse)Sunucuyu Docker Hub'dan önceden derlenen Docker imajını kullanarak da çalıştırabilirsiniz.
İmajı çekin:
docker pull ginnux/k8s-mcp-server:latest
latest yerine belirli bir sürüm etiketi (örneğin, 1.0.0) yazabilirsiniz.
Konteyner'i çalıştırın:
Not: Sunucu birden fazla kimlik doğrulama yöntemini destekler. Kubeconfig dosyasını monte edebilir (aşağıda gösterildiği gibi) veya kimlik doğrulaması için ortam değişkenlerini kullanabilirsiniz (Kubernetes Kimlik Doğrulaması bölümüne bakın).
SSE Modu (imajın varsayılan davranışı):
docker run -p 8080:8080 -v ~/.kube/config:/home/appuser/.kube/config:ro ginnux/k8s-mcp-server:latest
Bu, konteynerün 8080 portunu ana makinenizdeki 8080 portuna eşler ve Kubernetes yapılandırmanızı salt okunur olarak root olmayan kullanıcının giriş dizinine monte eder. Sunucu http://localhost:8080 adresinde kullanılabilir olacaktır. İmaj varsayılan olarak 8080 portunda sse modu ile çalışır.
Streamable-HTTP Modu:
docker run -p 8080:8080 -v ~/.kube/config:/home/appuser/.kube/config:ro ginnux/k8s-mcp-server:latest --mode streamable-http
Bu, sunucuyu streamable-http modunda çalıştırır. Sunucu http://localhost:8080/mcp adresinde kullanılabilir olacaktır.
Stdio Modu:
docker run -i --rm -v ~/.kube/config:/home/appuser/.kube/config:ro ginnux/k8s-mcp-server:latest --mode stdio
-i bayrağı etkileşimli stdio iletişimi için önemlidir. --rm çıkıştan sonra konteyner'i temizler.
SSE Modu için Özel Port:
docker run -p 9090:9090 -v ~/.kube/config:/home/appuser/.kube/config:ro ginnux/k8s-mcp-server:latest --mode sse --port 9090
Streamable-HTTP Modu için Özel Port:
docker run -p 9090:9090 -v ~/.kube/config:/home/appuser/.kube/config:ro ginnux/k8s-mcp-server:latest --mode streamable-http --port 9090
Alternatif: Tüm .kube dizinini monte edin:
docker run -p 8080:8080 -v ~/.kube:/home/appuser/.kube:ro ginnux/k8s-mcp-server:latest
Kimlik doğrulaması için ortam değişkenleri kullanma (dosya monte etme gerekmez):
# Ortam değişkeninden kubeconfig içeriği kullanma
docker run -p 8080:8080 \
-e KUBECONFIG_DATA="$(cat ~/.kube/config)" \
ginnux/k8s-mcp-server:latest
# Veya API sunucusu URL'si ve token kullanma
docker run -p 8080:8080 \
-e KUBERNETES_SERVER="https://kubernetes.example.com:6443" \
-e KUBERNETES_TOKEN="your-token-here" \
-e KUBERNETES_CA_CERT_PATH="/path/to/ca.crt" \
-v /path/to/ca.crt:/path/to/ca.crt:ro \
ginnux/k8s-mcp-server:latest
Bir docker-compose.yml dosyası oluşturun:
Seçenek 1: Kubeconfig dosyası kullanma (geleneksel yöntem):
version: '3.8'
services:
k8s-mcp-server:
image: ginnux/k8s-mcp-server:latest # Veya belirli bir sürüm
container_name: k8s-mcp-server
ports:
- "8080:8080" # Host:Container, farklı bir SERVER_PORT kullanıyorsanız ayarlayın
volumes:
- ~/.kube:/home/appuser/.kube:ro # Kubeconfig'i root olmayan kullanıcı ev dizinine salt okunur olarak monte edin
environment:
- KUBECONFIG=/home/appuser/.kube/config
- SERVER_MODE=sse # 'stdio', 'sse' veya 'streamable-http' olabilir
- SERVER_PORT=8080 # SSE/streamable-http modları için port
# command: ["--read-only"] # Salt okunur modu etkinleştirmek için bu satırı açın
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
Seçenek 2: Ortam değişkenleri kullanma (dosya monte etme yok):
version: '3.8'
services:
k8s-mcp-server:
image: ginnux/k8s-mcp-server:latest
container_name: k8s-mcp-server
ports:
- "8080:8080"
environment:
- KUBECONFIG_DATA=${KUBECONFIG_DATA} # Bunu .env dosyasında veya shell'de ayarlayın
# Veya API sunucusu ve token kullanın:
# - KUBERNETES_SERVER=https://kubernetes.example.com:6443
# - KUBERNETES_TOKEN=${KUBERNETES_TOKEN}
- SERVER_MODE=sse
- SERVER_PORT=8080
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
Not: Salt okunur modu etkinleştirmek için, Seçenek 1'de gösterildiği gibi command geçersiz kılmasını kullanın. Stdio modu için, 'ports'u ayarlamanız, 'stdin_open: true' ve 'tty: true' eklemeniz ve potansiyel olarak komutu geçersiz kılmanız gerekebilir.
Sonra başlatın:
docker compose up -d
Günlükleri görmek için: docker compose logs -f k8s-mcp-server.
Docker imajı, arttırılmış güvenlik için root olmayan bir kullanıcı (appuser UID 1001 ile) olarak çalışır:
/usr/local/bin/k8s-mcp-server adresinde bulunur/home/appuser/.kube/config adresine monte edilmelidirSunucu SSE veya streamable-http modunda çalışırken, HTTP endpoint'ine JSON-RPC çağrıları yapabilirsiniz:
curl -X POST -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "getAPIResources",
"arguments": {
"includeNamespaceScoped": true,
"includeClusterScoped": true
}
}
}' http://localhost:8080/
Sistem durumunu da kontrol edebilirsiniz:
curl -f http://localhost:8080/
getAPIResourcesKubernetes kümesindeki tüm kullanılabilir API kaynaklarını alır.
Parametreler:
includeNamespaceScoped (boolean, isteğe bağlı): Ad alanı kapsamlı kaynakları dahil edilip edilmeyeceği (varsayılan true).includeClusterScoped (boolean, isteğe bağlı): Küme kapsamlı kaynakları dahil edilip edilmeyeceği (varsayılan true).Örnek:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "getAPIResources",
"arguments": {
"includeNamespaceScoped": true,
"includeClusterScoped": true
}
}
}
listResourcesBelirli kaynak türüne ait tüm örnekleri listeler.
Parametreler:
Kind (string, gerekli): Listelenecek kaynağın türü (örneğin, "Pod", "Deployment").namespace (string, isteğe bağlı): Kaynakları listeleyeceğiniz ad alanı. Atlanırsa, ad alanı kapsamlı kaynaklar için tüm ad alanları arasında listeler (RBAC'a tabi).labelSelector (string, isteğe bağlı): Etiket seçicisine göre kaynakları filtreleyin (örneğin, "app=nginx,env=prod").Örnek:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "listResources",
"arguments": {
"Kind": "Pod",
"namespace": "default",
"labelSelector": "app=nginx"
}
}
}
getResourceBelirli bir kaynak hakkında detaylı bilgiler alır.
Parametreler:
kind (string, gerekli): Alınacak kaynağın türü (örneğin, "Pod", "Deployment").name (string, gerekli): Alınacak kaynağın adı.namespace (string, isteğe bağlı): Kaynağın ad alanı (ad alanı kapsamlı kaynaklar için gerekli).Örnek:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "getResource",
"arguments": {
"kind": "Pod",
"name": "nginx-pod",
"namespace": "default"
}
}
}
describeResourceKubernetes kümesinde bir kaynağı açıklar, kubectl describe benzeri.
Parametreler:
Kind (string, gerekli): Açıklanacak kaynağın türü (örneğin, "Pod", "Deployment").name (string, gerekli): Açıklanacak kaynağın adı.namespace (string, isteğe bağlı): Kaynağın ad alanı (ad alanı kapsamlı kaynaklar için gerekli).Örnek:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describeResource",
"arguments": {
"Kind": "Pod",
"name": "nginx-pod",
"namespace": "default"
}
}
}
getPodsLogsBelirli bir pod'un günlüklerini alır.
Parametreler:
Name (string, gerekli): Pod'un adı.namespace (string, gerekli): Pod'un ad alanı.containerName (string, isteğe bağlı): Pod içindeki belirli kapsayıcı adı. Atlanırsa:
Örnek:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "getPodsLogs",
"arguments": {
"Name": "my-app-pod-12345",
"namespace": "production",
"containerName": "main-container"
}
}
}
getNodeMetricsBelirli bir düğüm için kaynak kullanım metriklerini alır.
Parametreler:
Name (string, gerekli): Düğümün adı.Örnek:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "getNodeMetrics",
"arguments": {
"Name": "worker-node-1"
}
}
}
getPodMetricsBelirli bir pod için CPU ve Bellek metriklerini alır.
Parametreler:
namespace (string, gerekli): Pod'un ad alanı.podName (string, gerekli): Pod'un adı.Örnek:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "getPodMetrics",
"arguments": {
"namespace": "default",
"podName": "my-app-pod-67890"
}
}
}
getEventsBelirli bir ad alanı veya kaynak için olayları alır.
Parametreler:
namespace (string, isteğe bağlı): OlAWS MCP sunucuları, AWS hizmetleri ve kaynaklarıyla sorunsuz entegrasyon için tasarlanmıştır.
Kubernetes toplu port yönlendirmesi, service discovery, /etc/hosts yönetimi, traffic izleme ve pod log akışını bir arada sunan araç.
Cloudflare Workers, KV, R2 ve D1 hizmetleriyle entegrasyon
Kubernetes MCP sunucusu OpenShift desteğiyle, **herhangi bir** Kubernetes kaynağına yönelik CRUD işlemleri sağlamasının yanı sıra kümenizle etkileşim kurmak için özel araçlar sunar.
Kubernetes kümesi işlemleri için pod, deployment ve service yönetimini sağlayan TypeScript uygulaması.
Resmi Terraform MCP Server, Terraform ekosistemiyle sorunsuz bir şekilde entegre olarak sağlayıcı keşfedilmesi, modül analizi ve Registry API entegrasyonu sağlayarak gelişmiş Infrastructure as Code iş akışlarını destekler.