MCP::K8s-Kubernetes的MCP服务器
面向AI助手的RBAC感知Kubernetes工具
](https://metacpan.org/release/MCP-K8s) 
MCP::K8s提供了一种 主控程序 (模型上下文协议)服务器,允许像Claude这样的AI助手访问Kubernetes集群。
关键创新: 服务器通过RBAC动态发现连接的服务帐户可以做什么 并且仅将这些功能作为MCP工具公开。只读服务帐户获得只读工具;集群管理员获取一切。
快速开始
# Install
cpanm MCP::K8s
# Run (uses current kubeconfig context)
mcp-k8s
# Or with direct token authentication
MCP_K8S_TOKEN=$(kubectl create token my-sa) MCP_K8S_SERVER=https://my-cluster:6443 mcp-k8s克劳德桌面版
增添 ~/.config/claude/claude_desktop_config.json:
{
"mcpServers": {
"kubernetes": {
"command": "mcp-k8s",
"env": {
"MCP_K8S_CONTEXT": "my-cluster",
"MCP_K8S_NAMESPACES": "default,production"
}
}
}
}克劳德代码
添加到您的项目 .mcp.json:
{
"mcpServers": {
"kubernetes": {
"command": "mcp-k8s",
"env": {
"MCP_K8S_CONTEXT": "dev-cluster"
}
}
}
}运作原理
- 连接 --通过直接令牌、集群服务帐户或kubeconfig进行身份验证
- 发现 --提交
SelfSubjectRulesReview发现每个命名空间的RBAC权限的请求 - 注册 --创建具有反映实际权限的动态描述的MCP工具
- 服务 --在stdio上运行MCP协议,检查每次工具调用的权限
MCP工具
| 工具 | 说明 |
|---|---|
k8s_permissions | 显示RBAC权限-- 先叫这个 |
k8s_list | 列出资源(Pod、部署、服务等) |
k8s_get | 获取单个资源(摘要、JSON或YAML) |
k8s_create | 从清单创建资源 |
k8s_patch | 部分更新资源(战略/合并/JSON补丁) |
k8s_delete | 删除资源 |
k8s_logs | 获取pod容器日志 |
k8s_events | 获取调试事件(按对象筛选,字段选择器) |
k8s_rollout_restart | 触发部署/StatefulSet/DaemonSet的滚动重启 |
k8s_apply | 创建或更新资源(如 kubectl apply) |
为什么是10个通用工具而不是数百个?
Kubernetes有50多种内置资源类型和无限的CRD。而不是创建特定的工具(list_pods, get_deployment, delete_configmap…),MCP::K8s使用通用工具 resource 参数——与相同的模式 kubectl get , kubectl delete 这使得MCP客户端可以管理工具数量,同时支持包括CRD在内的每种资源类型。
动态工具说明
工具描述包括基于RBAC的可用特定资源和命名空间。例如:
列出Kubernetes资源。可用:默认:Pod、部署、服务、配置映射;生产:Pod、服务
这告诉LLM它可以在不需要调用的情况下做什么 k8s_permissions 首先(尽管从全局来看应该如此)。
CRD支持
MCP::K8s支持开箱即用的自定义资源定义(CRD)。资源复数是通过API服务器发现动态解决的,因此像Cilium这样的CRD CiliumNetworkPolicy 无需任何配置即可工作。
认证
MCP::K8s支持三种身份验证方法,按顺序尝试:
| 方法 | 配置 | 用例 |
|---|---|---|
| 直接代币 | MCP_K8S_TOKEN + MCP_K8S_SERVER | CI/CD、脚本、显式令牌 |
| 集群内 | 从SA挂载中自动检测到 | 作为Kubernetes pod运行 |
| Kubeconfig | KUBECONFIG + MCP_K8S_CONTEXT | 本地开发(默认) |
集群内身份验证从以下位置读取服务帐户令牌 /var/run/secrets/kubernetes.io/serviceaccount/token 并自动使用集群内CA证书。
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
KUBECONFIG | kubeconfig文件的路径 | ~/.kube/config |
MCP_K8S_CONTEXT | 要使用的Kubeconfig上下文 | 当前上下文 |
MCP_K8S_TOKEN | 承载令牌(绕过kubeconfig) | -- |
MCP_K8S_SERVER | API服务器URL | 集群内默认值 |
MCP_K8S_NAMESPACES | 逗号分隔的命名空间 | 自动发现 |
RBAC设置
使用具有最小权限的专用ServiceAccount。示例清单包含在 examples/:
readonly-serviceaccount.yaml--只读访问(推荐起点)deployer-serviceaccount.yaml--读取+部署/重启功能full-ops-serviceaccount.yaml--完全访问权限,机密除外
# Apply the readonly example
kubectl apply -f examples/readonly-serviceaccount.yaml
# Get a token
MCP_K8S_TOKEN=$(kubectl create token mcp-k8s-readonly -n mcp-k8s)
MCP_K8S_SERVER=https://$(kubectl config view -o jsonpath='{.clusters[0].cluster.server}')
mcp-k8sRBAC是唯一的事实来源——如果服务帐户不应该有访问权限,就不要授予它。MCP::K8s有 不 实现应用层权限过滤。
集群内部署
当在集群内将MCP::K8s作为pod运行时,身份验证是自动的:
- 安装服务帐户(例如,来自上述示例)
- 集
MCP_K8S_NAMESPACES如果需要(否则会从装载的SA命名空间自动发现) - 自动读取群集中令牌和CA证书
安全
- 服务器从其身份验证方法继承权限。使用具有最小RBAC的专用服务帐户进行AI访问。
- 所有工具调用都验证RBAC权限 之前 执行API调用。
- 如果服务帐户可以读取Secrets,LLM也可以。考虑排除
secrets来自AI服务帐户角色。
Langertha Raider集成
构建一个自主的AI代理,使用 兰格塔:袭击者:
use IO::Async::Loop;
use Future::AsyncAwait;
use Net::Async::MCP;
use Langertha::Engine::Anthropic;
use Langertha::Raider;
use MCP::K8s;
my $k8s = MCP::K8s->new(namespaces => ['default', 'production']);
my $loop = IO::Async::Loop->new;
my $mcp = Net::Async::MCP->new(server => $k8s->server);
$loop->add($mcp);
async sub main {
await $mcp->initialize;
my $engine = Langertha::Engine::Anthropic->new(
api_key => $ENV{ANTHROPIC_API_KEY},
model => 'claude-sonnet-4-6',
mcp_servers => [$mcp],
);
my $raider = Langertha::Raider->new(
engine => $engine,
mission => 'You are a Kubernetes operations assistant. '
. 'Always check permissions first, then help the user '
. 'investigate and manage their cluster.',
);
my $r1 = await $raider->raid_f('What can I do on this cluster?');
say $r1;
# Follow-up raid — has context from the first
my $r2 = await $raider->raid_f('List all pods and check for any issues.');
say $r2;
}
main()->get;突袭者在突袭中维护对话历史,因此LLM可以在后续交互中引用早期上下文(例如它发现的RBAC权限)。
现场演示
中包含一个可运行的演示脚本 examples/raider-configmap-demo.pl。它有一个AI创建、读取、更新和删除ConfigMap——完全无害:
LANGERTHA_ANTHROPIC_API_KEY=sk-ant-... perl -Ilib examples/raider-configmap-demo.plAI决定调用哪些MCP工具,报告每个步骤,并在自己之后进行清理。有关详细信息和要求,请参阅脚本的POD。
依赖项
- 主控程序 --模型上下文协议服务器实现
- Kubernetes:REST -Kubernetes API客户端
- IO:K8s --类型化的Kubernetes资源对象
- 哞 --极简主义OOP
也可用作
MCP::Kubernetes --用于CPAN上可发现性的Alias模块。
作者
托斯滕·劳德苏斯
许可证
这是一个自由软件,其许可条款与Perl本身相同(艺术许可证2.0/GPL)。
