Linkerd MCP服务器
 ](https://github.com/christianhuening/linkerd-mcp/actions/workflows/docker.yml)  ](https://go.dev/doc/devel/release) 
用于与Kubernetes集群中的Linkerd服务网格交互的模型上下文协议(MCP)服务器。此服务器使AI代理能够查询服务网格健康状态并分析服务之间的连接策略。
免责声明:本项目由Claude创建。人工智能!
特性
- Service Mesh健康监测:检查Linkerd控制平面组件的运行状况
- 连通性分析:分析Linkerd策略以确定服务之间允许的连接
- 服务发现:列出Linkerd网格中的所有服务
- 授权策略分析:查询哪些服务可以访问目标或源可以访问哪些目标
- 配置验证:验证Linkerd资源(服务器、授权策略、MeshTLS)的正确性和最佳实践
- 交通指标分析:查询实时流量指标,包括请求率、延迟百分比、成功率和错误率
- 生产就绪:现代安全功能、Helm图表、全面测试和CI/CD
快速开始
与Claude Desktop一起使用(推荐)
- 安装服务器:
# From source
git clone https://github.com/christianhuening/linkerd-mcp.git
cd linkerd-mcp
go build -o linkerd-mcp
# Or download pre-built binary from releases- 配置Claude桌面 (
~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"linkerd": {
"command": "/path/to/linkerd-mcp",
"args": [],
"env": {
"KUBECONFIG": "/Users/yourname/.kube/config"
}
}
}
}- 在Claude Desktop中使用:
- “检查我的Linkerd网格的健康状况” - “列出网格中的所有服务” - “验证prod命名空间中的Linkerd配置” - “前端服务可以与哪些服务通信?”
使用Docker
docker pull ghcr.io/christianhuening/linkerd-mcp:latest
docker run --rm -v ~/.kube/config:/root/.kube/config ghcr.io/christianhuening/linkerd-mcp:latest使用Helm(集群内部署)
helm install linkerd-mcp ./helm/linkerd-mcp -n linkerd --create-namespaceMCP检验员测试
# Build from source
go build -o linkerd-mcp
# Run inspector
npx @modelcontextprotocol/inspector ./linkerd-mcp这将打开一个web界面,您可以在其中交互式地测试所有MCP工具。
MCP工具
1. check_mesh_health
检查群集中Linkerd服务网格的运行状况。
论据:
namespace(可选):Linkerd控制平面命名空间(默认:“Linkerd”)
退货: 带有控制平面吊舱状态和健康信息的JSON
2. analyze_connectivity
分析Linkerd策略以确定服务之间允许的连接。
论据:
source_namespace(必需):源服务命名空间source_service(必填):源服务名称target_namespace(可选):目标服务命名空间(默认为源命名空间)target_service(必填):目标服务名称
退货: 带有连接分析和适用策略的JSON
3. list_meshed_services
列出属于Linkerd网格的所有服务。
论据:
namespace(可选):按命名空间筛选(默认:所有命名空间)
退货: 带有Pod的网状服务的JSON列表
4. get_allowed_targets
根据Linkerd授权策略查找给定源服务可以与之通信的所有服务。
论据:
source_namespace(必需):源服务的命名空间source_service(必填):源服务的名称
退货: 源有权访问的所有目标的JSON列表
5. get_allowed_sources
根据Linkerd授权策略查找可以与给定目标服务通信的所有服务。
论据:
target_namespace(必需):目标服务的命名空间target_service(必填):目标服务的名称
退货: 授权访问目标的所有源的JSON列表
6. validate_mesh_config
验证Linkerd服务网格配置的正确性和最佳实践。
论据:
namespace(可选):要验证的命名空间(默认值:所有命名空间)resource_type(可选):要验证的资源类型-server,authpolicy,meshtls,proxy,namespace,或all(默认值:all)resource_name(可选):要验证的特定资源名称include_warnings(可选):在结果中包含警告(默认值:true)
退货: 包含错误、警告和信息消息的JSON验证报告
支持的验证:
- 服务器资源:端口配置、pod选择器、代理协议、端口冲突
- 授权策略资源:目标引用、身份验证引用、策略一致性
- MeshTLSA身份验证资源:标识格式、服务帐户引用
- 代理配置:注入注释、CPU/内存资源、日志级别、代理版本(命名空间和pod级别)
示例用法(通过克劳德桌面或MCP检查器):
使用Claude Desktop时,您可以问:
- “验证我的Linkerd配置”
- “检查prod命名空间中是否存在任何配置错误”
- “验证所有服务器资源并向我显示任何问题”
- “检查默认命名空间中的代理配置”
- “验证命名空间注释以正确注入Linkerd代理”
或使用MCP检查器进行测试:
npx @modelcontextprotocol/inspector ./linkerd-mcp
# Then call: validate_mesh_config with arguments: {}7. get_service_metrics
从Prometheus获取服务的流量指标。
论据:
namespace(必需):服务命名空间service(必填):服务名称time_range(可选):时间范围(例如,“5m”、“1h”、“24h”)。默认值:5m
退货: 带有请求率、成功率、错误率和延迟百分位数的JSON(p50、p95、p99)
8. analyze_traffic_flow
分析两个服务之间的流量指标。
论据:
source_namespace(必需):源服务命名空间source_service(必填):源服务名称target_namespace(可选):目标服务命名空间(默认为源)target_service(必填):目标服务名称time_range(可选):时间范围(例如,“5m”、“1h”、“24h”)。默认值:5m
退货: JSON,包含流量指标,包括服务之间的请求率、延迟和错误率
9. get_service_health_summary
根据指标获取命名空间中所有服务的运行状况摘要。
论据:
namespace(必需):要检查的命名空间time_range(可选):时间范围(例如,“5m”、“1h”、“24h”)。默认值:5m
退货: 带有每个服务健康状态的JSON,突出显示错误率或延迟较高的服务
10. get_top_services
获取按流量指标排名的服务。
论据:
namespace(必需):要查询的命名空间sort_by(可选):排序指标:“request_rate”、“error_rate”、“latency_p95”。默认值:request_ratetime_range(可选):时间范围(例如,“5m”、“1h”、“24h”)。默认值:5mlimit(可选):返回的顶级服务数量。默认值:10
退货: JSON,包含服务及其指标的排名列表
示例用法(通过Claude Desktop):
- “显示默认命名空间中前端服务的请求率”
- “过去一小时api网关的p95延迟是多少?”
- “分析前端和后端服务之间的流量”
- “在prod中,哪些服务的错误率最高?”
- “显示默认命名空间中所有服务的运行状况摘要”
注: 度量工具要求Prometheus可访问。集 LINKERD_PROMETHEUS_URL 用于覆盖默认值的环境变量 http://prometheus.linkerd.svc.cluster.local:9090.
先决条件
- 转到1.23或更高版本
- 安装了Linkerd的Kubernetes集群
kubectl已配置为访问您的群集- Docker(用于容器化)
地方发展
安装
- 克隆存储库:
git clone https://github.com/christianhuening/linkerd-mcp.git
cd linkerd-mcp- 安装依赖项:
go mod download- 运行服务器:
go run main.go服务器将使用您本地的kubeconfig(~/.kube/config)连接到Kubernetes集群。
Kubernetes部署
构建和推送Docker镜像
# Build the image
docker build -t your-registry/linkerd-mcp:latest .
# Push to your registry
docker push your-registry/linkerd-mcp:latest部署到Kubernetes
- 更新k8s/deployment.yaml中的映像以指向您的注册表:
image: your-registry/linkerd-mcp:latest- 部署到集群:
kubectl apply -f k8s/deployment.yaml这将创建:
- 具有必要RBAC权限的ServiceAccount
- ClusterRole可以访问Pod、服务和Linkerd策略CRD
- 运行MCP服务器的部署
- 暴露MCP服务器的服务
验证部署
# Check if the pod is running
kubectl get pods -n linkerd -l app=linkerd-mcp
# Check logs
kubectl logs -n linkerd -l app=linkerd-mcpRBAC权限
服务器需要以下Kubernetes权限:
- 对Pod、服务和命名空间的读取权限
- 对Linkerd策略CRD(服务器、服务器授权、授权策略、httproutes)的读取权限
- 读取部署和复制集的访问权限
这些是在k8s/deployment.yaml中配置的。
配置
环境变量
KUBECONFIG:kubeconfig文件的路径(用于本地开发)LINKERD_NAMESPACE:Linkerd控制平面命名空间(默认值:“Linkerd”)
建筑
服务器使用模块化架构,关注点清晰分离:
linkerd-mcp/
├── main.go # Entry point (31 lines)
└── internal/
├── config/ # Kubernetes client configuration
├── health/ # Control plane health checking
├── mesh/ # Service discovery
├── policy/ # Authorization policy analysis
└── server/ # MCP server and tool registration关键技术:
- mcp走:执行模型上下文协议
- 客户去:官方Kubernetes Go客户端
- Linkerd策略CRD:用于分析服务到服务连接策略
看 内部/README.md 获取详细的架构文档。
测试
该项目包括使用Ginkgo/Gomega BDD框架的93多个测试用例的综合单元测试:
# Run all tests
go test ./internal/... -v
# Run tests with coverage
go test ./internal/... -cover
# Generate coverage report
go test ./internal/... -coverprofile=coverage.out
go tool cover -html=coverage.out看 测试.md 获取完整的测试文档。
CI/CD
该项目使用GitHub Actions进行持续集成和部署:
- CI工作流:对每个PR运行测试、linting和安全扫描
- Docker工作流:构建多平台图像并推送到GHCR
- 发布工作流:为所有平台创建包含二进制文件的版本
看 用于CI/CD文档。
未来的增强功能
- \[\]完成Linkerd策略CRD集成,以进行详细的连接分析
- \[x\] 添加对分析流量指标的支持
- \[x\] 实施服务网格配置验证
- \[\]添加对多集群Linkerd设置的支持
- \[\]提供详细的路线和授权策略见解
- \[x\] 添加代理配置验证
- \[\]实施最佳实践建议
- \[\]添加HTTPRoute资源的验证
- \[\]添加ServiceProfile资源的验证
- \[\]通过Linkerd Tap API添加实时流量流
- \[\]添加历史趋势分析和异常检测
- \[\]工艺政策
- \[\]在审核模式下部署策略的测试版本
- \[\]分析linkerd的审计模式设置,找出流量被拒绝的位置和原因
许可证
麻省理工学院
贡献
欢迎投稿!请打开问题或提交拉取请求。
