返回市场
mcp- Kubernetes只读服务器

mcp- Kubernetes只读服务器

作者:patrickdappollonio10 星标更新:2025-11-13

项目介绍

Kubernetes只读MCP服务器

GitHub下载

<img src="kubernetes-ro.png" alt="Kubernetes只读MCP服务器" width="200" height="200" align="right"> mcp-kubernetes-ro 是一个模型上下文协议(MCP)服务器,提供对Kubernetes集群的只读访问权限给AI助手。它使AI模型能够列出资源、获取资源详情、检索Pod日志、发现API资源并执行Base64编码/解码操作——同时通过只读访问来保证安全性。

该服务器利用你的本地kubectl配置(即使不需要安装kubectl),并向你的Kubernetes集群提供安全的只读接口,防止任何破坏性操作,同时允许全面的集群检查和故障排除能力。

功能

  • 无需kubectl:MCP服务器使用你的本地kubectl配置连接到Kubernetes集群,但不使用二进制文件,因此即使在机器上未安装kubectl的情况下也能工作。
  • 资源列表:按类型列出任何Kubernetes资源,并可选地通过标签、字段和命名空间进行过滤。
  • 资源详情:获取特定Kubernetes资源的完整详情。
  • Pod日志:检索Pod日志,并具有高级过滤选项,包括grep模式、时间过滤和先前日志。
  • 容器发现:列出Pod内的容器以实现有针对性的日志访问。
  • API发现:发现可用的Kubernetes API资源及其功能。
  • Base64工具:对Kubernetes密钥和配置进行Base64编码和解码。
  • 多种传输模式:支持标准输入输出(stdio)和服务器发送事件(SSE)通信。
  • 只读安全:完全防止破坏性操作,同时保持完整的检查能力。
  • 命名空间支持:与特定命名空间或集群范围内的资源一起工作。
  • 高级过滤:支持标签选择器、字段选择器和分页。
  • 每命令上下文:为每个命令指定不同的Kubernetes上下文。
  • 环境变量支持:自动检测KUBECONFIG环境变量。
  • 启动连接检查:启动时自动验证集群连接性和基本权限。

安装

你可以从发布页面获取预构建的二进制文件。

或者,你可以在macOS或Linux中使用Homebrew进行安装:

brew install patrickdappollonio/tap/mcp-kubernetes-ro

你也可以将其作为NPM包使用:只需确保将配置提供给你的AI代理:

npx -y @patrickdappollonio/mcp-kubernetes-ro

最后,Docker用户可以使用GitHub容器注册表中的预构建镜像:

docker pull ghcr.io/patrickdappollonio/mcp-kubernetes-ro:latest

编辑器配置

向编辑器设置添加以下配置以使用mcp-kubernetes-ro

{
  "mcpServers": {
    "kubernetes-ro": {
      "command": "mcp-kubernetes-ro",
      "args": [
        // 根据需要取消注释并修改:
        // "--kubeconfig=/path/to/kubeconfig",
        // "--namespace=default",
        // "--transport=stdio",
        // "--port=8080",
        // "--disabled-tools=get_logs,decode_base64"
      ],
      "env": {
        // 如果需要设置KUBECONFIG环境变量:
        // "KUBECONFIG": "/path/to/kubeconfig",
        // 如果需要设置MCP_KUBERNETES_RO_DISABLED_TOOLS环境变量:
        // "MCP_KUBERNETES_RO_DISABLED_TOOLS": "get_logs,decode_base64",
        // 或者使用通用的DISABLED_TOOLS环境变量:
        // "DISABLED_TOOLS": "get_logs,decode_base64"
      }
    }
  }
}

你可以直接从你的$PATH使用mcp-kubernetes-ro,如上所示,或者提供二进制文件的完整路径(例如,/path/to/mcp-kubernetes-ro)。

你还可以通过使用npx包简化安装过程:

{
  "mcpServers": {
    "kubernetes-ro": {
      "command": "npx",
      "args": [
        "-y",
        "@patrickdappollonio/mcp-kubernetes-ro"
        // 根据需要取消注释并修改:
        // "--kubeconfig=/path/to/kubeconfig",
        // "--namespace=default",
        // "--transport=stdi",
        // "--port=8080",
        // "--disabled-tools=get_logs,decode_base64"
      ],
      "env": {
        // 如果需要设置KUBECONFIG环境变量:
        // "KUBECONFIG": "/path/to/kubeconfig",
        // 如果需要设置MCP_KUBERNETES_RO_DISABLED_TOOLS环境变量:
        // "MCP_KUBERNETES_RO_DISABLED_TOOLS": "get_logs,decode_base64",
        // 或者使用通用的DISABLED_TOOLS环境变量:
        // "DISABLED_TOOLS": "get_logs,decode_base64"
      }
    }
  }
}

以及如何使用Docker镜像:

{
  "mcpServers": {
    "kubernetes-ro": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e", "KUBECONFIG=/root/.kube/config",
        "-v", "/path/to/kubeconfig:/root/.kube/config",
        "ghcr.io/patrickdappollonio/mcp-kubernetes-ro"
        // 在此处放置额外标志,如--disabled-tools=get_logs,decode_base64
      ],
      "env": {
        // 如果需要设置KUBECONFIG环境变量:
        // "KUBECONFIG": "/path/to/kubeconfig",
        // 如果需要设置MCP_KUBERNETES_RO_DISABLED_TOOLS环境变量:
        // "MCP_KUBERNETES_RO_DISABLED_TOOLS": "get_logs,decode_base64",
        // 或者使用通用的DISABLED_TOOLS环境变量:
        // "DISABLED_TOOLS": "get_logs,decode_base64"
      }
    },
  }
}

请注意,你需要将kubeconfig文件挂载到容器中,并将KUBECONFIG环境变量设置为挂载文件的路径,或者使用--kubeconfig标志来设置它。

先决条件

  • 有效的Kubernetes配置文件(通常是~/.kube/config
  • 有效的凭证和集群访问权限(不需要kubectl二进制文件)
  • 适当的RBAC权限用于读取操作
  • 指标服务器(用于指标工具):对于指标功能(get_node_metricsget_pod_metrics),指标服务器必须安装在你的集群中。如果不可用,这些工具将返回错误消息。

可用的MCP工具

10个工具可用:

  • list_resources:按类型列出任何Kubernetes资源,并可选地进行过滤,按最新排序。
  • get_resource:获取特定资源的详细信息。
  • get_logs:获取Pod日志,并具有高级过滤选项,包括grep模式、时间过滤和先前日志。
  • get_pod_containers:列出Pod内的容器以实现有针对性的日志访问。
  • list_api_resources:列出可用的Kubernetes API资源及其详细信息(类似于kubectl api-resources)。
  • list_contexts:从kubeconfig文件中列出可用的Kubernetes上下文。
  • get_node_metrics:获取节点指标(CPU和内存使用情况)。
  • get_pod_metrics:获取Pod指标(CPU和内存使用情况)。
  • encode_base64:将文本数据编码为Base64格式。
  • decode_base64:将Base64数据解码为文本格式。

工具管理

禁用工具

你可以使用--disabled-tools命令行标志或逗号分隔的工具名称列表的环境变量来禁用特定工具。支持两个环境变量以适应不同的使用场景:

  • MCP_KUBERNETES_RO_DISABLED_TOOLS:应用程序专用变量,不会与其他工具冲突。
  • DISABLED_TOOLS:通用变量,可以在环境中多个工具之间共享。

优先级顺序

  1. 命令行标志--disabled-tools=NAMES(最高优先级)
  2. 应用程序专用环境变量MCP_KUBERNETES_RO_DISABLED_TOOLS
  3. 通用环境变量DISABLED_TOOLS

这很有用,因为:

  • 安全性:禁用可能暴露敏感信息的工具(例如,get_logsdecode_base64)。
  • 性能:当不需要时禁用资源密集型工具(例如,get_node_metricsget_pod_metrics)。
  • 环境特定:禁用在你的集群中不可用的工具(例如,当指标服务器未安装时禁用指标工具)。
  • 合规性:限制功能以满足组织政策。

可用于禁用的工具名称

  • list_resources
  • get_resource
  • get_logs
  • get_pod_containers
  • list_api_resources
  • list_contexts
  • get_node_metrics
  • get_pod_metrics
  • encode_base64
  • decode_base64

当禁用工具时,它将不会被注册到MCP服务器,并且不会出现在可用工具列表中。将向stderr记录一条消息,指示哪些工具已被跳过。

示例

# 使用命令行标志(最高优先级)
mcp-kubernetes-ro --disabled-tools=encode_base64,decode_base64,get_logs

# 使用应用程序专用环境变量
export MCP_KUBERNETES_RO_DISABLED_TOOLS=encode_base64,decode_base64,get_logs
mcp-kubernetes-ro

# 使用通用环境变量
export DISABLED_TOOLS=encode_base64,decode_base64,get_logs
mcp-kubernetes-ro

# 优先级演示:命令行标志覆盖环境变量
export MCP_KUBERNETES_RO_DISABLED_TOOLS=get_logs
export DISABLED_TOOLS=get_pod_metrics
mcp-kubernetes-ro --disabled-tools=encode_base64,decode_base64

# 优先级演示:应用程序专用环境变量覆盖通用环境变量
export MCP_KUBERNETES_RO_DISABLED_TOOLS=encode_base64,decode_base64
export DISABLED_TOOLS=get_logs,get_pod_metrics
m
mcp-kubernetes-ro

# 输出:跳过禁用工具:"encode_base64"
# 输出:跳过禁用工具:"decode_base64"

运行模式

标准(stdio)模式

默认情况下,mcp-kubernetes-ro运行在stdio模式下,适用于与编辑器和其他通过标准输入/输出进行通信的工具集成。

mcp-kubernetes-ro

服务器发送事件(SSE)模式

或者,你可以将mcp-kubernetes-ro作为具有SSE支持的HTTP服务器运行,用于基于Web的集成:

mcp-kubernetes-ro --transport=sse --port=8080

在SSE模式下,服务器将在指定端口(默认:8080)监听,并通过Server-Sent Events提供相同的MCP工具。这对于Web应用程序或无法使用stdio通信的环境非常有用。

配置选项

以下命令行标志可用于配置MCP服务器:

Kubernetes配置

  • --kubeconfig=PATH:kubeconfig文件路径(默认为KUBECONFIG环境变量,然后是~/.kube/config
  • --namespace=NAME:操作的默认命名空间(默认为当前命名空间)

传输选项

  • --transport=TYPE:传输类型:stdiosse(默认:stdio
  • --port=PORT:SSE服务器端口(默认:8080,仅在--transport=sse时使用)

工具管理

  • --disabled-tools=NAMES:要禁用的工具名称的逗号分隔列表(可选)
  • MCP_KUBERNETES_RO_DISABLED_TOOLS:应用程序专用环境变量,用于禁用工具(命令行标志优先)
  • DISABLED_TOOLS:通用环境变量,用于禁用工具(低于MCP_KUBERNETES_RO_DISABLED_TOOLS的优先级)

上下文配置

服务器支持每命令上下文。这在处理同一$KUBECONFIG文件中的多个Kubernetes集群或上下文时提供了更大的灵活性。

配置优先级

  1. 命令级别上下文:在单个工具调用中使用context参数
  2. kubeconfig默认值:使用kubeconfig文件中指定的当前上下文

kubeconfig解析优先级

  1. 命令行标志--kubeconfig参数
  2. 环境变量KUBECONFIG环境变量
  3. 默认路径~/.kube/config
  4. 集群内配置:在Kubernetes Pod内运行时自动检测

示例

{
  "resource_type": "pods",
  "namespace": "default",
  "context": "production-cluster"
}

这种方法允许你:

  • 在同一个会话中为不同操作使用不同的上下文
  • 按命令切换上下文而无需重启服务器
  • 维持与现有kubeconfig设置的兼容性

工具使用文档

列出资源

按类型列出任何Kubernetes资源,并可选地进行过滤,按最新排序。

参数

  • resource_type(必需):要列出的资源类型 - 使用复数形式(例如,'pods','deployments','services')
  • api_version(可选):资源的API版本(例如,'v1','apps/v1')
  • namespace(可选):目标命名空间(为空表示集群范围的资源)
  • context(可选):要使用的Kubernetes上下文(默认为kubeconfig中的当前上下文)
  • label_selector(可选):标签选择器以过滤资源(例如,'app=nginx,version=1.0')
  • field_selector(可选):字段选择器以过滤资源(例如,'status.phase=Running')
  • limit(可选):要返回的最大资源数量(默认为全部)
  • continue(可选):分页的继续标记(来自之前的响应)

示例

{
  "resource_type": "pods",
  "namespace": "default",
  "context": "production",
 
  "label_selector": "app=nginx"
}

获取资源

获取特定资源的详细信息,包括完整配置。

参数

  • resource_type(必需):要获取的资源类型
  • name(必需):资源名称
  • api_version(可选):资源的API版本(例如,'v1','apps/v1')
  • namespace(可选):目标命名空间(命名空间资源需要)
  • context(可选):要使用的Kubernetes上下文(默认为kubeconfig中的当前上下文)

示例

{
  "resource_type": "deployment",
  "name": "nginx-deployment",
  "namespace": "default",
  "context": "production"
}

获取日志

获取Pod日志,并具有高级过滤选项,包括grep模式、时间过滤和先前日志。

参数

  • namespace(必需):Pod命名空间
  • name(必需):Pod名称
  • container(可选):容器名称(多容器Pod需要)
  • context(可选):要使用的Kubernetes上下文(默认为kubeconfig中的当前上下文)
  • max_lines(可选):要检索的最大行数
  • grep_include(可选):仅包含匹配这些模式的行(逗号分隔)。类似于grep - 包含包含这些模式中的任何一个的行
  • grep_exclude(可选):排除匹配这些模式的行(逗号分隔)。类似于grep -v - 排除包含这些模式中的任何一个的行
  • use_regex(可选):是否将grep模式视为正则表达式而不是字面字符串
  • since(可选):返回比这个时间更新的日志。支持持续时间如“5m”,“1h”,“2h30m”,“1d”或绝对时间如“2023-01-01T10:00:00Z”
  • previous(可选):返回之前终止的容器实例的日志(类似于kubectl logs --previous

示例

{
  "namespace": "default",
  "name": "nginx-pod-12345",
  "container": "nginx",
  "context": "production",
  "max_lines": "100",
  "grep_include": "error,warning",
  "since": "5m"
}

获取Pod容器

列出Pod内的容器以实现有针对性的日志访问。

参数

  • namespace(必需):Pod命名空间
  • name(必需):Pod名称
  • context(可选):要使用的Kubernetes上下文(默认为kubeconfig中的当前上下文)

示例

{
  "namespace": "default",
  "name": "nginx-pod-12345",
  "context": "production"
}

列出API资源

列出可用的Kubernetes API资源及其详细信息(类似于kubectl api-resources)。

参数

示例

{}

列出上下文

从kubeconfig文件中列出可用的Kubernetes上下文。这对于发现可用于其他工具的context参数的上下文很有用。

参数

**