Kubernetes资源检查服务器

一个提供Kubernetes资源安全只读访问的MCP服务器,用于调试和检查集群状态,支持多集群和CRD。

  • by kkb0318
  • Go
  • 本地部署
  • 45 星标
  • 更新于
在 GitHub 查看 kkb0318/kubernetes-mcp

使用说明

Kubernetes MCP服务器

https://github.com/user-attachments/assets/89df70b0-65d1-461c-b4ab-84b2087136fa

一个模型上下文协议(MCP)服务器,提供对Kubernetes资源的安全、只读访问,用于调试和检查。考虑到安全性,它提供了全面的集群可见性,无需修改功能。

特性

  • 🔒 只读安全:无需修改功能即可安全检查Kubernetes资源
  • 🎯 CRD支持:与集群中的任何自定义资源定义无缝协作
  • 🌐 多集群支持:在不同的Kubernetes上下文之间无缝切换
  • 🔍 智能发现:按API组子字符串查找资源(例如,FluxCD的“flux”,ArgoCD的“argo”)
  • ⚡ 高性能:具有过滤和分页功能的高效资源查询
  • 🛠️ 全面的工具集:
    • list_resources:使用高级选项列出和过滤Kubernetes资源
    • describe_resource:获取有关特定资源的详细信息
    • get_pod_logs:使用复杂的过滤功能检索pod日志
    • list_events:列出并过滤Kubernetes事件以进行调试和监控
    • list_contexts:从kubeconfig中列出所有可用的Kubernetes上下文

🚀 快速开始

先决条件

  • 使用有效的kubeconfig文件访问Kubernetes集群
  • 转到1.24+(从源代码构建)

安装选项

选项1:使用Go安装(推荐)

go install github.com/kkb0318/kubernetes-mcp@latest

二进制文件将在 $GOPATH/bin/kubernetes-mcp (或 $HOME/go/bin/kubernetes-mcp 如果 GOPATH 未设置)。

选项2:从源代码构建

git clone https://github.com/kkb0318/kubernetes-mcp.git
cd kubernetes-mcp
go build -o kubernetes-mcp .

⚙️ 配置

MCP服务器设置

将服务器添加到MCP配置中:

基本配置

用途 ~/.kube/config 自动:

{
  "mcpServers": {
    "kubernetes": {
      "command": "/path/to/kubernetes-mcp"
    }
  }
}

自定义Kubeconfig

{
  "mcpServers": {
    "kubernetes": {
      "command": "/path/to/kubernetes-mcp",
      "env": {
        "KUBECONFIG": "/path/to/your/kubeconfig"
      }
    }
  }
}

备注:替换 /path/to/kubernetes-mcp 使用您的实际二进制路径。

独立使用

# Default kubeconfig (~/.kube/config)
./kubernetes-mcp

# Custom kubeconfig path
KUBECONFIG=/path/to/your/kubeconfig ./kubernetes-mcp

重要:确保您对要检查的Kubernetes资源具有适当的读取权限。

🛠️ 可用工具

list_resources

列出并过滤具有高级功能的Kubernetes资源。

参数 类型 说明
context 可选 kubeconfig中的Kubernetes上下文名称(当前上下文留空)
kind 必需的 资源类型(Pod、部署、服务等)或“全部”用于发现
groupFilter 可选 按API组子字符串筛选项目特定的资源
namespace 可选 目标命名空间(默认为所有命名空间)
labelSelector 可选 按标签过滤(例如,“app=nginx”)
fieldSelector 可选 按字段筛选(例如,“metadata.name=my pod”)
limit 可选项 要返回的最大资源数
timeoutSeconds 可选 请求超时(默认:30s)
showDetails 可选 返回完整的资源对象而不是摘要

示例:

// 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"
}

// Discover FluxCD resources
{
  "kind": "all",
  "groupFilter": "flux"
}

describe_resource

获取特定Kubernetes资源的详细信息。

参数 类型 说明
context 可选 kubeconfig中的Kubernetes上下文名称(当前上下文留空)
kind 必需的 资源类型(Pod、部署等)
name 必需的 资源名称
namespace 可选 目标命名空间

例子:

{
  "kind": "Pod",
  "name": "nginx-pod",
  "namespace": "default"
}

get_pod_logs

使用复杂的过滤选项检索pod日志。

参数 类型 说明
context 可选 kubeconfig中的Kubernetes上下文名称(当前上下文留空)
name 必需的 Pod名称
namespace 可选 Pod命名空间(默认为“默认”)
container 可选 特定容器名称
tail 可选 从末尾开始的行数(默认值:100)
since 可选 持续时间如“5秒”、“2米”、“3小时”
sinceTime 可选 RFC3339时间戳
timestamps 可选 在输出中包含时间戳
previous 可选 从以前的容器实例获取日志

例子:

{
  "name": "nginx-pod",
  "namespace": "default",
  "tail": 50,
  "since": "5m",
  "timestamps": true
}

list_events

使用高级过滤选项列出和过滤Kubernetes事件,以进行调试和监控。

参数 类型 说明
context 可选 kubeconfig中的Kubernetes上下文名称(当前上下文留空)
namespace 可选 目标命名空间(所有命名空间留空)
object 可选 按对象名称筛选(例如,pod名称、部署名称)
eventType 可选 按事件类型筛选:“正常”或“警告”(不区分大小写)
reason 可选 按事件原因筛选(例如,“Pulled”、“Failed”、“FailedScheduling”)
since 可选 持续时间如“5秒”、“2米”、“1小时”
sinceTime 可选 RFC3339时间戳(例如,“2025-06-20T10:00:00Z”)
limit 可选项 要返回的最大事件数(默认值:100)
timeoutSeconds 可选 请求超时(默认:30s)

示例:

// List recent warning events
{
  "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

从kubeconfig文件中列出所有可用的Kubernetes上下文。

参数: 无-此工具不接受任何参数。

示例响应:

{
  "contexts": [
    {
      "name": "production-cluster",
      "is_current": false
    },
    {
      "name": "staging-cluster", 
      "is_current": true
    },
    {
      "name": "development-cluster",
      "is_current": false
    }
  ],
  "current_context": "staging-cluster",
  "total": 3
}

用例: 非常适合需要以下功能的多集群工作流:

  • 发现可用的Kubernetes上下文
  • 识别当前活动上下文
  • 跨多个集群规划运营

🌟 高级功能

🌐 多集群支持

使用上下文切换无缝地处理多个Kubernetes集群:

  • 上下文参数:所有工具现在都支持可选 context 参数,指定要查询的群集
  • 自动发现:使用现有的kubeconfig文件并自动发现可用上下文
  • 默认上下文:当没有指定上下文时,使用kubeconfig中的当前上下文
  • 缓存连接:通过连接缓存高效管理到多个集群的连接

多集群示例:

// Query production cluster
{
  "kind": "Pod",
  "context": "production-cluster",
  "namespace": "default"
}

// Get logs from staging environment
{
  "name": "api-server",
  "context": "staging-cluster",
  "namespace": "api"
}

// Compare resources across environments (use multiple calls)
{
  "kind": "Deployment",
  "context": "production-cluster",
  "namespace": "app"
}

🎯 自定义资源定义(CRD)支持

自动发现并处理集群中的任何CRD。只需使用CRD的Kind名称 list_resources 或 describe_resource 工具。

🔍 智能资源发现

使用 groupFilter 通过API组子字符串发现资源的参数:

筛选器 发现 示例
"flux" FluxCD资源 HelmRelease、Kustomization、GitRepositories
"argo" ArgoCD资源 应用程序、应用程序项目、应用程序集
"istio" Istio资源 VirtualServices、DestinationRules、网关
"cert-manager" 证书管理器资源 证书、发卡机构、集群发卡机构

🔒 安全与安保

以安全为首要考虑因素:

  • ✅ 只读访问 -不创建、修改或删除资源
  • ✅ 安全生产 -可在生产环境中安全使用
  • ✅ 最低权限 -仅需要对群集资源的读取权限
  • ✅ 无破坏性操作 -不会损害您的集群

🤝 贡献

我们欢迎捐款!请确保所有更改都保持服务器的只读性质,并包括适当的测试。

📄 许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。