kubectl proxy 是什么
它在本地监听一个端口,把收到的请求带上当前凭据转发给集群接口服务,于是可以直接用命令行工具或脚本读取接口资源,也可以借助服务代理路径访问集群内部的服务。它本质是“用现有身份做一个本地入口”,不做权限放大,权限不足照样被拒。因此定位是调试工具:监听地址默认只绑回环,绝不要长期对外暴露,用完及时清理后台进程。
基本信息
| 启动方式 | kubectl proxy --port=8001,默认监听回环地址 |
|---|---|
| 身份来源 | 使用当前上下文里的凭据与权限,不额外授予权限 |
| 资源路径 | 按接口规范拼接,如 /api/v1/namespaces/命名空间/资源名 |
| 服务代理 | 通过服务代理路径可访问 Pod 或服务暴露的端口 |
| 参数 | 可限制可访问的主机名与路径,也可指定监听地址(不建议对外) |
| 适用场景 | 调试、脚本读取接口、临时访问集群内服务 |
典型使用场景
- 用命令行工具直接读取接口对象,检查字段是否被正确写入
- 调试自定义资源与子资源,观察接口返回的原始结构
- 临时访问集群内服务的网页或健康检查接口,不必配置转发
- 配合脚本批量拉取对象做统计与比对
- 验证某条接口路径是否存在与是否可读
使用示例
使用示例
kubectl proxy --port=8001 & # 后台启动,使用当前上下文的凭据
curl -s http://127.0.0.1:8001/version # 验证代理连通
curl -s 'http://127.0.0.1:8001/api/v1/namespaces/dev/pods' | head -c 400 # 直接读资源
curl -s 'http://127.0.0.1:8001/api/v1/namespaces/dev/services/http:web:80/proxy/' # 通过服务代理访问服务
curl -s http://127.0.0.1:8001/apis | head -20 # 列出可用接口组版本
kill %1 # 用完清理后台进程常用路径读法
| 路径 | 作用 | 注意 |
|---|---|---|
| /version | 查看接口服务版本 | 验证连通最快的方式 |
| /apis | 列出接口组与版本 | 排查资源归属 |
| 命名空间下的资源路径 | 读写命名空间级资源 | 需要对应权限 |
| 服务代理路径 | 访问集群内服务的端口 | 经接口服务转发,性能有限 |
代理端口等于把集群接口开放给所有能访问该端口的人:只监听回环地址,不要改成对所有地址监听并长期开着。
代理不做权限放大:返回权限拒绝说明当前身份确实没有该项权限,需要从权限配置入手,而不是反复调代理参数。