Skip to main content
Glama
secret-deus

Kubernetes MCP Server

by secret-deus
README.md
# MCP Kubernetes Server

一个基于 [FastMCP](https://github.com/jlowin/fastmcp) 框架构建的 Kubernetes 管理服务器,提供完整的 Kubernetes 集群管理功能。

## 🚀 项目特性

- **完整的 Kubernetes 管理**: 支持 kubectl 的所有核心操作
- **Helm 集成**: 提供 Helm Chart 的安装、升级、卸载功能
- **多种传输方式**: 支持 HTTP 和 STDIO 两种传输协议
- **灵活的配置**: 支持多种 kubeconfig 配置方式
- **安全性**: 自动屏蔽 Secret 敏感数据
- **故障诊断**: 内置 Kubernetes 故障诊断助手
- **健康检查**: 提供服务健康状态监控

## 📁 项目结构

```
MCP/
├── core/
│   └── kubernetes_mcp_core.py  # 核心模块:包含所有工具函数实现
├── httpserver.py               # HTTP 传输版本的 MCP 服务器
├── stdio.py                    # STDIO 传输版本的 MCP 服务器
├── simple_mcp_test.py          # 简单的测试客户端
├── pyproject.toml              # 项目配置和依赖管理
├── VERSION                     # 版本信息
└── README.md                   # 项目文档
```

### 核心架构

- **`core/kubernetes_mcp_core.py`**: 核心模块,包含所有 Kubernetes 和 Helm 操作的实现
- **`httpserver.py`**: HTTP 传输模式的服务器入口
- **`stdio.py`**: STDIO 传输模式的服务器入口(现在支持完整功能)

## 🛠️ 安装与配置

### 环境要求

- Python 3.10+
- kubectl (必需)
- helm (可选,用于 Helm 功能)
- 有效的 Kubernetes 集群访问权限

### 安装依赖

项目使用 `uv` 作为包管理器:

```bash
# 安装依赖
uv sync

# 开发环境依赖
uv sync --dev
```

### Kubernetes 配置

服务器支持多种 kubeconfig 配置方式,按优先级排序:

1. **YAML 环境变量**:
   ```bash
   export KUBECONFIG_YAML="$(cat ~/.kube/config)"
   ```

2. **JSON 环境变量**:
   ```bash
   export KUBECONFIG_JSON='{"apiVersion":"v1","kind":"Config",...}'
   ```

3. **最小配置**:
   ```bash
   export K8S_SERVER="https://your-k8s-api-server"
   export K8S_TOKEN="your-service-account-token"
   export K8S_SKIP_TLS_VERIFY="true"  # 可选
   ```

4. **标准路径**:
   ```bash
   export KUBECONFIG="/path/to/your/kubeconfig"
   # 或使用默认路径 ~/.kube/config
   ```

### 其他配置选项

```bash
# 设置默认上下文
export K8S_CONTEXT="your-context-name"

# 设置默认命名空间
export K8S_NAMESPACE="your-namespace"

# 控制 Secret 数据屏蔽(默认启用)
export MASK_SECRETS="true"
```

## 🚀 运行服务器

### HTTP 传输模式

适用于需要 HTTP API 访问的场景:

```bash
uv run httpserver.py
```

服务器将在 `http://127.0.0.1:6000` 启动。

### STDIO 传输模式

适用于 MCP 客户端(如 Cherry Studio):

```bash
uv run stdio.py
```

## 🔧 可用工具

### 核心 Kubernetes 操作

- **`ping`**: 验证与 Kubernetes 集群的连接
- **`kubectl_get`**: 获取或列出 Kubernetes 资源
- **`kubectl_describe`**: 描述资源的详细信息
- **`kubectl_apply`**: 应用 YAML 清单
- **`kubectl_delete`**: 删除 Kubernetes 资源
- **`kubectl_logs`**: 获取资源日志
- **`kubectl_context`**: 管理 Kubernetes 上下文
- **`kubectl_scale`**: 扩缩容资源
- **`kubectl_patch`**: 更新资源字段
- **`kubectl_rollout`**: 管理滚动更新
- **`kubectl_exec`**: 在 Pod 中执行命令

### Helm 操作

- **`helm_install`**: 安装 Helm Chart
- **`helm_upgrade`**: 升级 Helm Release
- **`helm_uninstall`**: 卸载 Helm Release
- **`helm_list`**: 列出 Helm Releases

### 辅助功能

- **`health_check`**: 健康检查端点

## 📚 资源和提示符

### 资源

- **`k8s://cluster/info`**: 获取集群信息
- **`k8s://contexts`**: 获取可用上下文

### 提示符

- **`k8s_diagnose`**: Kubernetes 故障诊断助手

## 🧪 测试

使用提供的测试客户端验证服务器功能:

```bash
# 确保 HTTP 服务器正在运行
uv run simple_mcp_test.py
```

## 🏗️ 架构设计

### 模块化架构

项目采用模块化设计,将核心功能与传输层分离:

- **核心模块** (`core/kubernetes_mcp_core.py`): 包含所有业务逻辑和工具实现
- **传输层** (`httpserver.py`, `stdio.py`): 负责不同的通信协议

### 优势

1. **代码复用**: 两种传输模式共享相同的核心功能
2. **易于维护**: 业务逻辑集中在核心模块中
3. **功能一致**: STDIO 和 HTTP 版本提供完全相同的功能
4. **扩展性**: 可以轻松添加新的传输模式
5. **清晰分层**: 核心逻辑与传输协议完全分离

### 设计原则

- **单一职责**: 每个模块都有明确的职责边界
- **依赖倒置**: 传输层依赖于核心模块,而非相反
- **开放封闭**: 对扩展开放(新传输模式),对修改封闭(核心逻辑)

## 📖 使用示例

### 基本操作示例

```python
from fastmcp import Client
import asyncio

async def example():
    async with Client("http://127.0.0.1:6000/mcp") as client:
        # 检查连接
        result = await client.call_tool("ping")
        print(result)
        
        # 获取所有 Pod
        pods = await client.call_tool("kubectl_get", {
            "resource_type": "pods",
            "all_namespaces": True
        })
        print(pods)
        
        # 获取特定 Deployment 的日志
        logs = await client.call_tool("kubectl_logs", {
            "resource_type": "deployment",
            "name": "my-app",
            "namespace": "default",
            "tail": 100
        })
        print(logs)

asyncio.run(example())
```

### 使用 Helm

```python
# 安装 Chart
await client.call_tool("helm_install", {
    "name": "my-release",
    "chart": "stable/nginx",
    "namespace": "default",
    "values": {
        "replicaCount": 3,
        "service": {
            "type": "LoadBalancer"
        }
    }
})
```

## 🔒 安全特性

- **Secret 数据屏蔽**: 自动屏蔽 Kubernetes Secret 中的敏感数据
- **超时控制**: 所有 kubectl 和 helm 命令都有超时限制
- **错误处理**: 完善的错误处理和日志记录

## 🐛 故障排除

### 常见问题

1. **kubectl 未找到**:
   ```bash
   # 确保 kubectl 已安装并在 PATH 中
   kubectl version --client
   ```

2. **连接失败**:
   ```bash
   # 检查 kubeconfig 配置
   kubectl cluster-info
   ```

3. **权限问题**:
   ```bash
   # 检查当前用户权限
   kubectl auth can-i --list
   ```

### 日志调试

服务器启动时会显示配置信息:

```
启动Kubernetes MCP服务器...
配置信息:
  - kubeconfig路径: /home/user/.kube/config
  - 默认命名空间: default
  - 上下文: my-context
```

## 🤝 贡献

欢迎提交 Issue 和 Pull Request!

## 📄 许可证

本项目采用 MIT 许可证。

## 🔗 相关链接

- [FastMCP 框架](https://github.com/jlowin/fastmcp)
- [Kubernetes 官方文档](https://kubernetes.io/docs/)
- [Helm 官方文档](https://helm.sh/docs/)
- [Model Context Protocol (MCP)](https://modelcontextprotocol.io/)