如何通过公司内网访问本地Centos服务器上的Kubernetes应用?
解决k3d集群应用仅公司内网访问的问题
问题根源
你执行kubectl port-forward时,命令默认仅绑定服务器的127.0.0.1网卡,仅服务器本地能访问,内网其他机器无法通过服务器私有IP建立连接。
临时解决方案(快速验证)
修改port-forward命令,让它绑定服务器的所有网卡,允许内网机器访问:
sudo kubectl -n test port-forward --address 0.0.0.0 service/api-gateway-nginx 8080:80
执行后,公司内网机器即可通过服务器私有IP:8080访问应用。该方案适合临时测试,断开SSH会话后端口转发会失效。
加固访问权限(仅允许内网网段)
为避免服务器端口被无关访问,可通过防火墙限制仅公司内网网段能访问8080端口:
- 若服务器使用ufw防火墙:
# 替换为你的公司内网网段,例如192.168.5.0/24 sudo ufw allow from 192.168.5.0/24 to any port 8080 - 若服务器使用firewalld防火墙:
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.5.0/24" port port="8080" protocol="tcp" accept' --permanent sudo firewall-cmd --reload
持久化解决方案(长期运行)
kubectl port-forward是临时方案,若要长期稳定提供内网访问,推荐以下两种方式:
方式一:创建k3d集群时直接映射端口
删除现有集群后,重新创建时指定端口映射到服务器的所有网卡:
k3d cluster delete test # 将服务器的8080端口映射到集群负载均衡器的80端口 k3d cluster create test --port 0.0.0.0:8080:80@loadbalancer
重新安装helm应用后,内网机器直接通过服务器私有IP:8080访问,无需再执行port-forward。
方式二:将Service改为NodePort类型
修改现有Service的类型为NodePort,让k3d自动分配对外端口:
# 修改Service类型 kubectl -n test patch service/api-gateway-nginx -p '{"spec":{"type":"NodePort"}}' # 查看分配的NodePort端口(通常为30000-32767之间的数值) kubectl -n test get service api-gateway-nginx
在防火墙开放该NodePort端口的内网访问权限后,内网机器通过服务器私有IP:分配的NodePort访问应用。
内容的提问来源于stack exchange,提问作者J Jena
相关产品推荐
相关产品推荐

