kubectl port-forward 是什么
port-forward 通过 Kubernetes API 建立一条隧道,把本地端口转发到 Pod 或 Service 的端口上:调试数据库、查看内部管理面板、验证 Service 是否通,都靠它。它只在 kubectl 进程存活期间有效,断开即失效,因此属于诊断工具而非生产访问通道。排查应用本身是否正常时,它还能绕过 Ingress 与 Service 链路,快速区分问题出在哪一层。
基本信息
| 语法 | kubectl port-forward pod/web-1 8080:8080 或 svc/web 8080:80 |
|---|---|
| 转发 Service | 在可用后端中随机挑选一个实例,不提供负载均衡语义 |
| 监听地址 | 默认只监听本机;加 --address 0.0.0.0 才允许其他机器连接 |
| 生命周期 | 前台阻塞运行,进程退出或断开后转发立即失效 |
| 命名空间 | 用 -n 指定命名空间,否则使用当前上下文的默认值 |
典型使用场景
- 本地调试:把集群内的服务映射到本机端口,用本地工具直接访问
- 数据库连接:临时转发数据库端口,用客户端工具查看数据
- 面板访问:读取内部管理界面的端口,不做公网暴露
- 分层验证:绕过 Ingress 直连 Pod,判断是应用问题还是接入层问题
- 验证 Service:转发到 Service 地址,确认选择器匹配到了正确的后端
使用示例
使用示例
kubectl port-forward svc/web 8080:80 -n dev # 转发 Service
kubectl port-forward pod/db-0 3306:3306 -n dev # 转发数据库 Pod
kubectl port-forward --address 0.0.0.0 pod/web 8080:8080 # 允许其他机器连
curl -s http://127.0.0.1:8080/healthz # 从本机验证服务响应
kubectl get endpointslice -n dev # 核对后端实例是否就绪转发目标对照
| 目标 | 写法 | 行为 |
|---|---|---|
| 单个 Pod | port-forward pod/名称 | 固定转发到该实例 |
| Service | port-forward svc/名称 | 随机选一个就绪后端 |
| Deployment | port-forward deploy/名称 | 由控制器挑选一个 Pod |
| 多个端口 | 可写多组映射 | 同时转发多个端口 |
| 指定命名空间 | 追加 -n 命名空间 | 默认用上下文的命名空间 |
验证「应用本身是否正常」时优先用 port-forward:它绕过 Ingress、Service 与网络策略的大部分链路,能快速判断故障是在应用侧还是接入层。
不要把 port-forward 当生产访问通道:kubectl 一断线访问即中断,而且没有统一鉴权与访问日志,无法审计谁在什么时候连过。