kubectl port-forward 是 Kubernetes 提供的一个命令行工具,用于将本地机器(你的开发机或笔记本)上的一个端口转发到 Kubernetes 集群中某个 Pod 的端口。它常用于调试、测试或临时访问集群内部服务,而无需将服务暴露到外部网络。
基本语法#
kubectl port-forward <pod-name> <local-port>:<pod-port>也可以指定命名空间:
kubectl port-forward -n <namespace> <pod-name> <local-port>:<pod-port>示例#
假设你有一个名为 my-app-pod 的 Pod,它在容器内监听 8080 端口:
kubectl port-forward my-app-pod 8080:8080执行后,你就可以在本地浏览器或使用 curl 访问 http://localhost:8080,请求会被转发到该 Pod 的 8080 端口。
其他用法#
随机本地端口(让系统自动分配):
kubectl port-forward my-app-pod :8080转发到 Service(Kubernetes 1.10+ 支持):
kubectl port-forward svc/my-service 8080:80绑定到所有接口(不只是 localhost):
kubectl port-forward --address 0.0.0.0 my-app-pod 8080:8080注意:这可能带来安全风险,慎用。
工作原理简述#
kubectl port-forward会在本地启动一个代理,通过 Kubernetes API Server 建立一个安全隧道(基于 SPDY 或 WebSocket)。- 所有发往本地端口的流量都会通过这个隧道转发到目标 Pod 的指定端口。
- 它不需要修改任何 Service 或 Ingress 配置,也不需要开放 NodePort 或 LoadBalancer。
常见用途#
- 调试数据库 Pod(如 MySQL、PostgreSQL)
- 临时访问 Web 应用的管理界面
- 测试微服务之间的内部通信
- 在不暴露服务的情况下验证应用行为
注意事项#
port-forward是临时连接,关闭终端或中断命令后连接即断开。- 只能转发到单个 Pod(即使 Service 后端有多个 Pod,也只能选一个)。
- 需要具备对目标 Pod 的
get和create(针对pods/portforward子资源)权限。
如果你正在开发或排查问题,kubectl port-forward 是一个非常实用的“快捷通道”!