port-forward 是什么
port-forward 在本机与集群内的 Pod 或服务之间建立一条端口隧道:kubectl 进程从本机端口接收连接,经过集群接口转发到目标端口。整个过程不依赖集群对外暴露入口,也不需要目标服务配置任何外部访问方式,是调试数据库、管理端点与临时验证接口的常用手段。
它只是临时通道
转发由本机 kubectl 进程直接代理,会话结束或网络抖动就断开,不具备高可用;转发到服务时每次连接只会落到某一个后端 Pod,不经过完整的负载均衡。因此它适合人工验证与临时取数,不适合承载长期流量或用来做压测。
基本信息
| 适用环境 | 任何 Kubernetes 发行版,需要 pods 与 pods/portforward 权限 |
|---|---|
| 语法 | kubectl port-forward <目标> <本机端口>:<目标端口> |
| 可选目标 | Pod、服务、工作负载,三者行为略有差别 |
| 默认监听 | 只监听本机回环地址,需显式指定才能对外监听 |
| 生命周期 | 随命令进程结束而失效 |
| 常用端口 | 按应用实际端口填写,注意本机端口不要与已有服务冲突 |
典型使用场景
- 连接数据库:把集群内的数据库端口映射到本机,用图形客户端或命令行工具连上去
- 查看监控与仪表盘:临时打开管理界面做配置或排障
- 验证新部署:在服务正式对外之前先在本机确认接口可用
- 调试管理端点:访问只在内部开放的指标与管理路径
- 取数核对:用本机工具连到内部存储做一次性查询
- 排查网络策略:确认从集群外经隧道访问是否与策略预期一致
常用示例
常用示例
kubectl port-forward pod/web-x 8080:80 # 固定到某个 Pod
kubectl port-forward svc/db 5432:5432 -n prod # 转发服务端口
kubectl port-forward deploy/web 8080:80 # 由控制器挑选副本
kubectl port-forward svc/grafana 3000:3000 -n monitoring # 打开仪表盘
kubectl port-forward svc/web 8080:80 --address=127.0.0.1 # 显式限制监听地址目标形式的差异
| 目标写法 | 选择逻辑 | 适用场景 |
|---|---|---|
| pod/名称 | 固定转发到指定 Pod | 需要稳定复现某个实例的问题 |
| svc/名称 | 转发时会挑选一个后端 | 只关心服务整体是否可用 |
| deploy/名称 | 由控制器挑选一个副本 | 快速验证当前版本 |
| 带命名空间 | 在指定命名空间内查找目标 | 跨命名空间操作时务必带上 |
转发到服务时多开几次命令可能连到不同后端,排查具体实例的问题应直接指定 Pod 名称。
把监听地址设为所有网卡会把端口暴露给同网段的其他主机,调试完应立即结束进程,不要长期保留。