<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的情况下也能工作。你可以从发布页面获取预构建的二进制文件。
或者,你可以在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标志来设置它。
~/.kube/config)kubectl二进制文件)get_node_metrics,get_pod_metrics),指标服务器必须安装在你的集群中。如果不可用,这些工具将返回错误消息。有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:通用变量,可以在环境中多个工具之间共享。优先级顺序:
--disabled-tools=NAMES(最高优先级)MCP_KUBERNETES_RO_DISABLED_TOOLSDISABLED_TOOLS这很有用,因为:
get_logs,decode_base64)。get_node_metrics,get_pod_metrics)。可用于禁用的工具名称:
list_resourcesget_resourceget_logsget_pod_containerslist_api_resourceslist_contextsget_node_metricsget_pod_metricsencode_base64decode_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"
默认情况下,mcp-kubernetes-ro运行在stdio模式下,适用于与编辑器和其他通过标准输入/输出进行通信的工具集成。
mcp-kubernetes-ro
或者,你可以将mcp-kubernetes-ro作为具有SSE支持的HTTP服务器运行,用于基于Web的集成:
mcp-kubernetes-ro --transport=sse --port=8080
在SSE模式下,服务器将在指定端口(默认:8080)监听,并通过Server-Sent Events提供相同的MCP工具。这对于Web应用程序或无法使用stdio通信的环境非常有用。
以下命令行标志可用于配置MCP服务器:
--kubeconfig=PATH:kubeconfig文件路径(默认为KUBECONFIG环境变量,然后是~/.kube/config)--namespace=NAME:操作的默认命名空间(默认为当前命名空间)--transport=TYPE:传输类型:stdio或sse(默认:stdio)--port=PORT:SSE服务器端口(默认:8080,仅在--transport=sse时使用)--disabled-tools=NAMES:要禁用的工具名称的逗号分隔列表(可选)MCP_KUBERNETES_RO_DISABLED_TOOLS:应用程序专用环境变量,用于禁用工具(命令行标志优先)DISABLED_TOOLS:通用环境变量,用于禁用工具(低于MCP_KUBERNETES_RO_DISABLED_TOOLS的优先级)服务器支持每命令上下文。这在处理同一$KUBECONFIG文件中的多个Kubernetes集群或上下文时提供了更大的灵活性。
配置优先级:
context参数kubeconfig解析优先级:
--kubeconfig参数KUBECONFIG环境变量~/.kube/config示例:
{
"resource_type": "pods",
"namespace": "default",
"context": "production-cluster"
}
这种方法允许你:
按类型列出任何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内的容器以实现有针对性的日志访问。
参数:
namespace(必需):Pod命名空间name(必需):Pod名称context(可选):要使用的Kubernetes上下文(默认为kubeconfig中的当前上下文)示例:
{
"namespace": "default",
"name": "nginx-pod-12345",
"context": "production"
}
列出可用的Kubernetes API资源及其详细信息(类似于kubectl api-resources)。
参数:
示例:
{}
从kubeconfig文件中列出可用的Kubernetes上下文。这对于发现可用于其他工具的context参数的上下文很有用。
参数:
**