port-forward 命令详解

This article is extracted from the chat log with AI. Please identify it with caution.

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 端口。


其他用法#

  1. 随机本地端口(让系统自动分配):

    kubectl port-forward my-app-pod :8080
  2. 转发到 Service(Kubernetes 1.10+ 支持):

    kubectl port-forward svc/my-service 8080:80
  3. 绑定到所有接口(不只是 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 的 getcreate(针对 pods/portforward 子资源)权限。

如果你正在开发或排查问题,kubectl port-forward 是一个非常实用的“快捷通道”!

本文共 652 字,创建于 Dec 16, 2025

相关标签: Kubernetes, ByAI, Linux, DevOps