使用说明
Kubernetes MCP 服务器
一个适用于Kubernetes的模型上下文协议(MCP)服务器,它提供了全面的集群管理功能,且无需本地安装kubectl。此服务器支持STDIO和HTTP两种模式,非常适合与Cursor/VS Code中的AI助手(如Claude)集成使用。
特性/特点
资源管理
- 列表操作列出Pod、命名空间、服务账户、部署、副本集、密钥、入口、服务以及自定义资源定义
- 描述操作流程获取特定资源的详细信息
- 行动操作删除Pod、重启Deployment、扩展Deployment、创建资源等
完整工具清单
list_pods- 列出某个命名空间中的所有Pod或所有命名空间中的所有Podlist_namespaces- 列出所有命名空间list_service_accounts- 列出服务账户list_deployments- 列出部署list_replicasets- 列出副本集list_secrets- 列出密钥(不暴露密钥数据)list_ingresses- 列出入口(或:列出Ingress)list_services- 列出服务list_crds- 列出自定义资源定义describe_pod- 获取详细的Pod信息describe_namespace- 获取详细的命名空间信息describe_service_account- 获取详细的服务账户信息describe_deployment- 获取详细的部署信息describe_replicaset- 获取详细的副本集信息describe_secret- 获取秘密元数据(不泄露秘密数据)describe_ingress- 获取详细的入口信息describe_service- 获取详细的服务信息delete_pod- 删除一个Podrestart_deployment- 通过触发发布来重启部署scale_deployment- 将部署扩展到特定数量的副本create_deployment- 创建一个新的部署create_namespace- 创建一个新的命名空间get_pod_logs- 从Pod中获取日志get_events- 获取集群事件port_forward_service- 获取将端口转发到服务的说明port_forward_pod- 获取将端口转发到Pod的说明
先决条件
- Node.js 18 或更高版本
- 访问一个Kubernetes集群(本地或远程)
- 有效的 kubeconfig 文件(通常位于
~/.kube/config)
安装
- 克隆仓库:
git clone <repository-url>
cd kubernetes-mcp-server
- 安装依赖项:
npm install
- 构建项目:
npm run build
配置
Kubeconfig 配置
服务器使用您的 kubeconfig 文件来连接到 Kubernetes 集群。默认情况下,它会在标准位置查找 kubeconfig 文件(~/.kube/config)。
要使用自定义的 kubeconfig 位置,请设置 KUBECONFIG 环境变量:
export KUBECONFIG=/path/to/your/kubeconfig
连接到不同的集群
该服务器支持本地和远程Kubernetes集群:
- 本地集群 (minikube, kind, Docker Desktop): 使用默认的 kubeconfig 文件
- 远程集群 (EKS, GKE, AKS 等):使用相应的集群凭据配置您的 kubeconfig
你可以使用标准的 kubectl 命令在不同上下文之间切换:
kubectl config use-context <context-name>
使用方法
在STDIO模式下运行(适用于Cursor/VS Code)
STDIO模式是集成AI助手的MCP服务器的默认模式。
开发模式
npm run dev
生产模式
npm run build
npm start
在HTTP模式下运行
HTTP模式通过服务器发送事件(SSE)使用HTTP暴露MCP服务器。
开发模式
npm run dev:http
生产模式
npm run build
npm run start:http
默认情况下,服务器运行在3000端口。您可以通过设置来更改这一点 PORT 环境变量:
PORT=8080 npm run start:http
与 Cursor/VS Code 的集成
STDIO 模式(推荐)
- 打开你的 Cursor/VS Code 设置
- 导航至MCP设置
- 添加此服务器配置:
对于Cursor:
编辑你的Cursor设置文件(~/.cursor/config/settings.json 或通过用户界面 (UI):
{
"mcp": {
"servers": {
"kubernetes": {
"command": "node",
"args": ["/absolute/path/to/kubernetes-mcp-server/dist/index.js"],
"env": {
"KUBECONFIG": "/Users/yourusername/.kube/config"
}
}
}
}
}
对于使用Claude的VS Code: 编辑您的MCP设置文件:
{
"mcpServers": {
"kubernetes": {
"command": "node",
"args": ["/absolute/path/to/kubernetes-mcp-server/dist/index.js"],
"env": {
"KUBECONFIG": "/Users/yourusername/.kube/config"
}
}
}
}
HTTP 模式
对于HTTP模式,请将MCP客户端配置为连接到HTTP端点:
{
"mcpServers": {
"kubernetes": {
"url": "http://localhost:3000/message"
}
}
}
与AI助手的示例用法
一旦集成完成,您就可以向您的AI助手提出自然语言问题,例如:
- “列出默认命名空间中的所有Pod”
- “给我看看生产环境中的部署情况”
- “将Web应用部署扩展为3个副本”
- “从后端命名空间中的api-server pod获取日志”
- “创建一个名为 staging 的新命名空间”
- “描述 kube-system 中的 nginx 部署”
- “重启前端部署”
- “显示集群中的所有事件”
发展
项目结构
kubernetes-mcp-server/
├── src/
│ ├── __tests__/ # Test files
│ ├── tools/ # Tool implementations
│ │ ├── list-tools.ts # List operations
│ │ ├── describe-tools.ts # Describe operations
│ │ └── action-tools.ts # Action operations
│ ├── k8s-client.ts # Kubernetes client wrapper
│ ├── server.ts # Main MCP server implementation
│ ├── index.ts # STDIO entry point
│ └── index-http.ts # HTTP entry point
├── dist/ # Compiled JavaScript
├── package.json
├── tsconfig.json
└── README.md
运行测试
npm test
在监视模式下运行测试
npm run test:watch
代码检查(或代码规范检查)
npm run lint
安全考量
-
Kubeconfig 访问服务器需要访问您的 kubeconfig 文件。请确保已通过适当的文件权限对其进行了妥善保护。
-
秘密处理这个(或:那)
describe_secret并且list_secrets工具故意不暴露敏感数据值,仅暴露元数据。 -
**RBAC(基于角色的访问控制)**服务器以所使用的 kubeconfig 上下文的权限运行。请确保您的集群中已实施适当的基于角色的访问控制(RBAC)策略。
-
HTTP 模式在使用HTTP模式时,请考虑在生产环境中实现身份验证,并通过带有TLS的反向代理来运行服务器。
故障排除
“无法连接到集群”
- 验证您的 kubeconfig 是否有效:
kubectl cluster-info - 检查KUBECONFIG环境变量是否设置正确
- 确保您能够访问集群的网络
“未找到工具”错误
- 重建项目:
npm run build - 重启MCP服务器
- 检查 Cursor/VS Code 日志以获取详细的错误信息
权限错误
- 验证您的 kubeconfig 用户具有适当的 RBAC 权限
- 如果使用服务账户令牌,请检查服务账户权限
端口转发的限制
端口转发操作返回指令,而不是保持活动连接,因为MCP工具被设计为无状态的。如需进行主动端口转发,请使用返回的kubectl命令。
做出贡献
欢迎投稿!请遵循以下指南:
- 为仓库创建分支(或“克隆仓库”)
- 创建一个特性分支
- 为新功能添加测试
- 确保所有测试通过:
npm test - 提交一个拉取请求
许可证
MIT 许可证 - 详情请参见 LICENSE 文件
致谢
支持
如需报告问题、提出疑问或做出贡献,请在GitHub上提交一个议题。
