端口转发首次连接后断开与Pod的连接问题求助
问题场景
通过Service为PostgreSQL数据库执行端口转发,使用命令:
nohup kubectl --namespace test-0 port-forward service/operational-db 60000:5432 > /dev/null 2>&1 &
端口转发在未发起连接时看似正常,但首次尝试连接时立即抛出错误:
E0717 11:57:36.623431 15244 portforward.go:407] an error occurred
forwarding 60000 -> 5432: error forwarding port 5432 to pod
a2f34569140ff7aa7079e06aedca300e8776cb9a5b06806ed04fcf0feba018e8, uid
: failed to execute portforward in network namespace
"/var/run/netns/cni-6db2a2b7-68be-dade-ada5-32e00597e921": read tcp4
127.0.0.1:48064->127.0.0.1:5432: read: connection reset by peer
kubectl/服务器版本:
Client Version: v1.26.1 Kustomize Version: v4.5.7 Server Version: v1.24.14-eks-c12679a
解决思路
检查PostgreSQL Pod内部可用性
直接进入目标Pod内部,执行psql -h 127.0.0.1 -p 5432 -U <数据库用户名>测试本地连接。若Pod内连接失败,说明数据库未正常启动、监听地址配置错误(比如未设置为0.0.0.0或127.0.0.1)或存在权限问题。验证Service与Pod的关联有效性
执行kubectl get endpoints operational-db -n test-0,查看Endpoints是否正确关联到目标Pod的5432端口。若Endpoints为空或端口不匹配,说明Service的selector标签与Pod标签不匹配,或Pod的containerPort配置错误。区分Service与Pod层面的端口转发问题
跳过Service直接转发到Pod:kubectl port-forward pod/a2f34569140ff7aa7079e06aedca300e8776cb9a5b06806ed04fcf0feba018e8 -n test-0 60000:5432,若能正常连接,问题出在Service配置;若仍失败,聚焦Pod自身或网络环境排查。排查CNI网络与节点权限
错误涉及CNI网络命名空间,检查节点上的CNI插件(如Calico、Flannel)状态是否正常,确保Pod网络命名空间可被正常访问。同时确认执行kubectl的用户拥有端口转发的足够权限。验证版本兼容性
当前客户端v1.26.1与服务器v1.24.14跨两个大版本,部分功能可能存在兼容性问题。尝试将kubectl降级到v1.24.x版本后重新测试端口转发。检查防火墙与安全组规则
确认节点安全组允许本地回环地址的端口转发流量,Pod内iptables规则未限制5432端口访问,同时主机本地防火墙未拦截60000端口的入站连接。
内容的提问来源于stack exchange,提问作者Abhishek Jain

