Serveur MCP Kubernetes
https://github.com/user-attachments/assets/89df70b0-65d1-461c-b4ab-84b2087136fa
Un serveur Model Context Protocol (MCP) qui fournit un accès sûr, en lecture seule, aux ressources Kubernetes pour le débogage et l'inspection. Construit avec la sécurité à l'esprit, il offre une visibilité complète du cluster sans capacités de modification.
Caractéristiques
- 🔒Sécurité en lecture seule: Inspecter en toute sécurité les ressources Kubernetes sans capacités de modification
- 🎯 Prise en charge CRD: Fonctionne de manière transparente avec toutes les définitions de ressources personnalisées dans votre cluster
- 🌐 Prise en charge multi-clusters: Passez d'un contexte Kubernetes à l'autre en toute transparence
- 🔍Découverte intelligente: Trouvez des ressources par sous-chaîne de groupe API (par exemple, " flux " pour FluxCD, " argo " pour ArgoCD)
- ⚡ Haute performance: Interrogation efficace des ressources avec filtrage et pagination
- 🛠️ Jeu d'outils complet
list_resources
: Lister et filtrer les ressources Kubernetes avec des options avancéesdescribe_resource
: Obtenir des informations détaillées sur des ressources spécifiquesget_pod_logs
: Récupérer les logs des pods avec des capacités de filtrage sophistiquéeslist_events
: Liste et filtre les événements Kubernetes pour le débogage et la surveillancelist_contexts
: Liste tous les contextes Kubernetes disponibles à partir de kubeconfig
🚀 Démarrage rapide
Conditions préalables
- Accès au cluster Kubernetes avec un fichier kubeconfig valide
- Go 1.24+ (pour la construction à partir des sources)
Options d'installation
Option 1 : Installer avec Go (recommandé)
go install github.com/kkb0318/kubernetes-mcp@latest
Le binaire sera disponible dans $GOPATH/bin/kubernetes-mcp
(ou $HOME/go/bin/kubernetes-mcp
si GOPATH
n'est pas défini).
Option 2 : Construire à partir des sources
git clone https://github.com/kkb0318/kubernetes-mcp.git cd kubernetes-mcp go build -o kubernetes-mcp
⚙️ Configuration
Configuration du serveur MCP
Ajoutez le serveur à votre configuration MCP :
Configuration de base
Utilise ~/.kube/config
automatiquement :
{ "mcpServers" : { "kubernetes" : { "command" : "/path/to/kubernetes-mcp" } } }
Kubeconfig personnalisé
{ "mcpServers" : { "kubernetes" : { "command" : "/path/to/kubernetes-mcp", "env" : { "KUBECONFIG" : "/path/to/your/kubeconfig" } } } }
Remarque: Remplacez
/path/to/kubernetes-mcp
par votre chemin binaire réel.
Utilisation autonome
# kubeconfig par défaut (~/.kube/config) ./kubernetes-mcp # chemin kubeconfig personnalisé KUBECONFIG=/path/to/your/kubeconfig ./kubernetes-mcp
Important: Assurez-vous que vous disposez des autorisations de lecture appropriées pour les ressources Kubernetes que vous souhaitez inspecter.
🛠️ Outils disponibles
list_resources
Liste et filtre les ressources Kubernetes avec des fonctionnalités avancées.
Paramètre | Type de ressource | Description |
---|---|---|
contexte | optionnel | Nom du contexte Kubernetes provenant de kubeconfig (laisser vide pour le contexte actuel) |
type | obligatoire | Type de ressource (Pod, Deployment, Service, etc.) ou "all" pour la découverte |
groupFilter | facultatif | Filtre par sous-chaîne de groupe d'API pour les ressources spécifiques à un projet |
espace de noms | facultatif | Espace de noms cible (par défaut, tous les espaces de noms) |
labelSelector | facultatif | Filtre sur les étiquettes (par exemple, "app=nginx") |
fieldSelector | optionnel | Filtre sur les champs (par exemple, "metadata.name=my-pod") |
limit | facultatif | Nombre maximal de ressources à renvoyer |
timeoutSeconds | optionnel | Délai d'attente de la requête (par défaut : 30 secondes) |
showDetails | optionnel | Renvoie des objets de ressources complets au lieu d'un résumé |
Exemples :
// List pods with label selector { "kind" : "Pod", "namespace" : "default", "labelSelector" : "app=nginx" } // List pods from a specific cluster context { "kind" : "Pod", "context" : "production-cluster", "namespace" : "default" } // Découvrir les ressources FluxCD { "kind" : "all", "groupFilter" : "flux" }
describe_resource
Obtenir des informations détaillées sur une ressource Kubernetes spécifique.
Paramètre | Type de ressource | Description |
---|---|---|
contexte | optionnel | Nom du contexte Kubernetes provenant de kubeconfig (laisser vide pour le contexte actuel) |
type | obligatoire | Type de ressource (Pod, Deployment, etc.) |
nom | obligatoire | Nom de la ressource |
espace de noms | facultatif | Espace de noms cible |
Exemple :
{"kind" : "Pod", "name" : "nginx-pod", "namespace" : "default" }
get_pod_logs
Récupère les logs du pod avec des options de filtrage sophistiquées.
Paramètre | Type de fichier | Description |
---|---|---|
contexte | optionnel | Nom du contexte Kubernetes provenant de kubeconfig (laisser vide pour le contexte actuel) |
nom | obligatoire | Nom du pod |
espace de noms | optionnel | Espace de noms du pod (la valeur par défaut est "default") |
conteneur | optionnel | Nom du conteneur spécifique |
tail | optionnel | Nombre de lignes à partir de la fin (par défaut : 100) |
since | optionnel | Durée comme "5s", "2m", "3h" |
sinceTime | optionnel | Horodatage RFC3339 |
timestamps | optionnel | Inclure les horodatages dans la sortie |
précédent | optionnel | Récupère les journaux de l'instance de conteneur précédente |
Exemple :
{"name" : "nginx-pod", "namespace" : "default", "tail" : 50, "since" : "5m", "timestamps" : true }
list_events
Liste et filtre les événements Kubernetes avec des options de filtrage avancées pour le débogage et la surveillance.
Paramètre | Type d'événement | Description |
---|---|---|
contexte | optionnel | Nom du contexte Kubernetes provenant de kubeconfig (laisser vide pour le contexte actuel) |
espace de noms | optionnel | Espace de noms cible (laisser vide pour tous les espaces de noms) |
objet | facultatif | Filtre sur le nom de l'objet (par exemple, nom du pod, nom du déploiement) |
eventType | optionnel | Filtre sur le type d'événement : "Normal" ou "Warning" (insensible à la casse) |
reason | optionnel | Filtre sur la raison de l'événement (par exemple, "Pulled", "Failed", "FailedScheduling") |
since | facultatif | Durée comme "5s", "2m", "1h" |
sinceTime | facultatif | Horodatage RFC3339 (par exemple, "2025-06-20T10:00:00Z") |
limit | optionnel | Nombre maximal d'événements à renvoyer (par défaut : 100) |
timeoutSeconds | optionnel | Délai d'attente de la demande (par défaut : 30 secondes) |
Exemples :
// Liste des événements d'avertissement récents { "eventType" : "Warning", "since" : "30m" } // List events for a specific pod { "object" : "nginx-pod", "namespace" : "default" } // List failed scheduling events { "reason" : "FailedScheduling", "limit" : 50 }
list_contexts
Liste tous les contextes Kubernetes disponibles à partir de votre fichier kubeconfig.
Paramètres :None - cet outil ne prend aucun paramètre.
Exemple de réponse :
{ "contexts" : [ { "name" : "production-cluster", "is_current" : false }, { "name" : "staging-cluster", "is_current" : true }, { "name" : "cluster de développement", "is_current" : false } ], "current_context" : "staging-cluster", "total" : 3 }
Cas d'utilisation :Parfait pour les flux de travail multi-clusters où vous avez besoin de :
- Découvrir les contextes Kubernetes disponibles
- Identifier le contexte actif actuel
- Planifier des opérations sur plusieurs clusters
🌟 Fonctionnalités avancées
🌐 Prise en charge de plusieurs clusters
Travaillez de manière transparente avec plusieurs clusters Kubernetes à l'aide de la commutation de contexte :
- Paramètre de contexte: Tous les outils prennent désormais en charge un paramètre de
contexte
facultatif pour spécifier le cluster à interroger - Découverte automatique: Utilise votre fichier kubeconfig existant et découvre automatiquement les contextes disponibles
- Contexte par défaut: Si aucun contexte n'est spécifié, utilise le contexte actuel de votre fichier kubeconfig
- Connexions mises en cache: Gestion efficace des connexions à plusieurs clusters grâce à la mise en cache des connexions
Exemples de clusters multiples :
// Interrogation du cluster de production { "kind" : "Pod", "context" : "production-cluster", "namespace" : "default" } // Obtenir les journaux de l'environnement de mise en scène { "name" : "api-server", "context" : "staging-cluster", "namespace" : "api" } // Comparez les ressources entre les environnements (utilisez plusieurs appels) { "kind" : "Deployment", "context" : "production-cluster", "namespace" : "app" }
🎯 Prise en charge des définitions de ressources personnalisées (CRD)
Découvrez automatiquement les CRD de votre cluster et travaillez avec eux. Il suffit d'utiliser le nom Kind du CRD avec les outils list_resources
ou describe_resource
.
🔍 Découverte intelligente des ressources
Utilisez le paramètre groupFilter
pour découvrir les ressources par sous-chaîne de groupe API :
Filtre | Découvre | Exemples |
---|---|---|
"flux" | Ressources FluxCD | HelmReleases, Kustomizations, GitRepositories |
"argo | Ressources ArgoCD | Applications, AppProjects, ApplicationSets |
"istio | Ressources Istio | VirtualServices, DestinationRules, Gateways |
"cert-manager | ressources de cert-manager | Certificats, Issuers, ClusterIssuers |
🔒 Sécurité et sûreté
Construit avec la sécurité comme préoccupation principale :
- ✅ Accès en lecture seule - Pas de création, modification ou suppression de ressources
- ✅ S écurité de production - Sécurisé pour une utilisation dans des environnements de production
- ✅ Permissions minimales - Ne nécessite qu'un accès en lecture aux ressources de la grappe
- pas d'opérations destructrices - Ne peut pas nuire à votre cluster
🤝 Contribuer
Les contributions sont les bienvenues ! Veuillez vous assurer que tous les changements maintiennent la nature en lecture seule du serveur et incluent les tests appropriés.
📄 Licence
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.