Kubernetes集群管理协议

一个用于Kubernetes集群管理和资源查看的Model Context Protocol (MCP)服务器,提供安全的只读访问和全面的集群管理工具集。

  • by AceDarkknight
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 AceDarkknight/k8s-mcp

使用说明

k8s mcp

用于Kubernetes集群管理和资源查看的模型上下文协议(MCP)服务器。

特性

  • 🔗 通过HTTP/SSE连接到Kubernetes集群
  • 👀 查看Kubernetes资源(只读)
  • 🛡️ 使用令牌身份验证进行安全访问
  • 📊 用于集群管理的综合工具集
  • 🔒 为安全起见,对机密数据进行编辑
  • 🚀 由Cobra和Viper提供支持的CLI

建筑

  • MCP服务器 (Golang):通过HTTP/SSE提供k8s集群连接和资源查看功能
  • MCP客户端 (Golang):测试客户端以验证服务器功能
  • pkg/mcpclient (Golang):可重用的客户端库,用于将MCP功能集成到其他Go应用程序中

快速开始

先决条件

  • 转到1.23或更高版本
  • kubectl配置了集群访问权限
  • 有效的kubeconfig文件
  • TLS证书和密钥(对于HTTPS模式,默认)

建筑

# Build MCP server
go build -o bin/k8s-mcp-server ./cmd/server

# Build test client
go build -o bin/k8s-mcp-client ./cmd/client

跑步

1.生成TLS证书(用于HTTPS模式)

# Generate a self-signed certificate for testing
openssl req -x509 -newkey rsa:4096 -nodes -days 365 -keyout key.pem -out cert.pem -subj "/CN=localhost"

2.启动MCP服务器

# Using command line flags
./bin/k8s-mcp-server --token my-secret-token --cert cert.pem --key key.pem

# Using environment variables (flags override env vars)
export MCP_TOKEN=my-secret-token
export MCP_CERT=cert.pem
export MCP_KEY=key.pem
./bin/k8s-mcp-server

3.与客户进行测试

# Connect to HTTPS server
./bin/k8s-mcp-client --server https://localhost:8443 --token my-secret-token

# Connect to HTTP server
./bin/k8s-mcp-client --server http://localhost:8443 --token my-secret-token --insecure-skip-verify

配置

服务器支持通过命令行标志和环境变量进行配置。

服务器配置

标志 环境变量 默认值 描述
--port MCP_PORT 8443 要监听的端口
--cert MCP_CERT TLS证书文件的路径(HTTPS需要)
--key MCP_KEY TLS密钥文件的路径(HTTPS需要)
--insecure MCP_INSECURE false 在不安全的HTTP模式下运行(默认为HTTPS)
--token MCP_TOKEN 身份验证令牌(必需)
--kubeconfig MCP_KUBECONFIG kubeconfig文件的路径(可选)

日志记录配置

该服务器提供了一个基于Uber Zap和Lumberjack的综合日志系统。

标志 环境变量 默认值 描述
--log-level info 日志级别(调试、信息、警告、错误)
--log-format text 日志格式(json、text)
--log-to-file false(服务器:true) 启用文件日志记录(服务器默认为true)
--log-file logs/app.log 日志文件路径
--log-max-size 100 每个日志文件的最大大小(MB)
--log-max-backups 3 要保留的旧日志文件的最大数量
--log-max-age 30 保留旧日志文件的最大天数
--log-compress true 是否压缩旧日志文件
--log-caller true 是否包含调用者信息(文件和行)
--log-stacktrace false 是否在错误级别包含堆栈跟踪

当 --log-to-file 启用后,日志将写入stdout/stderr和指定的日志文件。日志记录系统根据备份的大小、时间和数量自动处理日志轮换。

客户端配置

标志 环境变量 默认值 描述
--server MCP_CLIENT_SERVER https://localhost:8443 MCP服务器URL
--token MCP_CLIENT_TOKEN 身份验证令牌(必需)
--insecure-skip-verify MCP_CLIENT_INSECURE_SKIP_VERIFY false 跳过TLS证书验证

MCP工具

服务器提供以下工具:

群集管理

  • get_cluster_status:获取集群状态信息(版本、节点计数、命名空间计数)
  • list_nodes:列出群集中的所有节点
  • list_namespaces:列出群集中的所有命名空间

资源管理

  • list_pods:列出命名空间中的Pod

  • list_services:列出命名空间中的服务

  • list_deployments:列出命名空间中的部署

  • get_resource:获取特定资源的详细信息(JSON格式)。秘密将被编辑。

  • get_resource_yaml:获取资源的完整YAML定义。秘密将被编辑。

可观察性和调试

  • get_events:获取集群事件
  • get_pod_logs:获取pod日志。默认尾线=100,最大字节数=1MB

安全

  • check_rbac_permission:检查当前用户是否有权限执行操作(kubectl auth-can-i)

安全

  • 默认情况下,所有操作都是只读的
  • 所有连接都需要基于令牌的身份验证
  • 检索到机密数据时会自动编辑
  • 支持RBAC权限验证
  • 安全的kubeconfig处理
  • 连接超时和重试机制

整合

用作图书馆

这 pkg/mcpclient 包可以导入并用于其他Go应用程序:

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/AceDarkknight/k8s-mcp/pkg/mcpclient"
)

func main() {
    // Create configuration
    config := mcpclient.Config{
        ServerURL:          "https://localhost:8443",
        AuthToken:          "your-token",
        InsecureSkipVerify: true,
    }

    // Create client with optional custom headers
    client, err := mcpclient.NewClient(config,
        mcpclient.WithHeader("X-Custom-Header", "value"),
    )
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()

    // Connect to server
    ctx := context.Background()
    if err := client.Connect(ctx); err != nil {
        log.Fatal(err)
    }

    // List tools
    tools, err := client.ListTools(ctx)
    if err != nil {
        log.Fatal(err)
    }

    for _, tool := range tools {
        fmt.Printf("Tool: %s\n", tool.Name)
    }

    // Call a tool
    result, err := client.CallTool(ctx, "get_cluster_status", nil)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Result: %v\n", result)
}

有关更多详细信息,请参阅 pkg/mcpclient/README.md.

MCP协议集成

k8s-mcp遵循标准mcp协议,可以集成到任何兼容mcp的应用程序中:

  1. 克劳德桌面:AI助手可以查看和分析Kubernetes资源
  2. VS Code:通过MCP扩展获取Kubernetes上下文
  3. 自定义应用程序:使用MCP客户端库进行集成

发展

要添加新功能,请执行以下操作:

  1. 新工具:在中添加新的工具定义和处理程序函数 internal/mcp/server.go
  2. 新资源:在中添加新的资源类型 internal/k8s/resources.go

该项目采用模块化设计,便于扩展和维护。