Kubernetes集群管理服务器

一个无需本地安装kubectl即可提供全面Kubernetes集群管理功能的MCP服务器,支持STDIO和HTTP模式,适用于与AI助手集成。

  • by KumarS86
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 KumarS86/eks-mcp-server

使用说明

Kubernetes MCP 服务器

一个适用于Kubernetes的模型上下文协议(MCP)服务器,它提供了全面的集群管理功能,且无需本地安装kubectl。此服务器支持STDIO和HTTP两种模式,非常适合与Cursor/VS Code中的AI助手(如Claude)集成使用。

特性/特点

资源管理

  • 列表操作列出Pod、命名空间、服务账户、部署、副本集、密钥、入口、服务以及自定义资源定义
  • 描述操作流程获取特定资源的详细信息
  • 行动操作删除Pod、重启Deployment、扩展Deployment、创建资源等

完整工具清单

  • list_pods - 列出某个命名空间中的所有Pod或所有命名空间中的所有Pod
  • list_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 - 删除一个Pod
  • restart_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)

安装

  1. 克隆仓库:
git clone <repository-url>
cd kubernetes-mcp-server
  1. 安装依赖项:
npm install
  1. 构建项目:
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 模式(推荐)

  1. 打开你的 Cursor/VS Code 设置
  2. 导航至MCP设置
  3. 添加此服务器配置:

对于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

安全考量

  1. Kubeconfig 访问服务器需要访问您的 kubeconfig 文件。请确保已通过适当的文件权限对其进行了妥善保护。

  2. 秘密处理这个(或:那) describe_secret 并且 list_secrets 工具故意不暴露敏感数据值,仅暴露元数据。

  3. **RBAC(基于角色的访问控制)**服务器以所使用的 kubeconfig 上下文的权限运行。请确保您的集群中已实施适当的基于角色的访问控制(RBAC)策略。

  4. HTTP 模式在使用HTTP模式时,请考虑在生产环境中实现身份验证,并通过带有TLS的反向代理来运行服务器。

故障排除

“无法连接到集群”

  • 验证您的 kubeconfig 是否有效: kubectl cluster-info
  • 检查KUBECONFIG环境变量是否设置正确
  • 确保您能够访问集群的网络

“未找到工具”错误

  • 重建项目: npm run build
  • 重启MCP服务器
  • 检查 Cursor/VS Code 日志以获取详细的错误信息

权限错误

  • 验证您的 kubeconfig 用户具有适当的 RBAC 权限
  • 如果使用服务账户令牌,请检查服务账户权限

端口转发的限制

端口转发操作返回指令,而不是保持活动连接,因为MCP工具被设计为无状态的。如需进行主动端口转发,请使用返回的kubectl命令。

做出贡献

欢迎投稿!请遵循以下指南:

  1. 为仓库创建分支(或“克隆仓库”)
  2. 创建一个特性分支
  3. 为新功能添加测试
  4. 确保所有测试通过: npm test
  5. 提交一个拉取请求

许可证

MIT 许可证 - 详情请参见 LICENSE 文件

致谢

支持

如需报告问题、提出疑问或做出贡献,请在GitHub上提交一个议题。