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许可证获得许可-请参阅 许可证 文件以获取详细信息。
