kubectl port-forward的踩坑过程及解决

 更新时间:2025年10月24日 09:28:24   作者:嗷大猫...  
在学习K8S时遇到的问题:在K8S节点内用curl访问本机网卡IP192.168.22.151失败,而在K8S外部用PC浏览器访问该IP失败,原因是K8S默认只监听localhost地址,而192.168.22.151没有被监听,解决办法是使用--address0.0.0.0参数,让K8S监听所有地址

kubectl port-forward踩坑

最近在学习k8s,直接使用命令部署应用并给外界访问:

kubectl run nginx --image nginx:latest
kubectl port-forward pod/nginx 80:80  #将本机80端口转发至Pod的80端口

然后本地PC用浏览器访问NodeIP:80,访问nginx界面失败:

在k8s节点里面用curl访问,出现了神奇现象:直接curl节点的物理网卡地址192.168.22.151,访问失败;而curl localhost或127.0.0.1,可以返回结果。

这个192.168.22.151是k8s节点的ens160物理网卡的地址。

出现这个问题之后,捣鼓了好一段时间,也没搞出个头绪。

灵光一闪

后来过了几天,在看《Kubernetes权威指南 第4版》这本书时,看到书上有关于port-forward的用法:

书上的案例多了一个- -address参数。kubectl port-forward --help查看参数说明

 Options:
- -address=[localhost]: Addresses to listen on (comma separated). Only accepts IP addresses or localhost as a value. When localhost is supplied, kubectl will try to bind on both 127.0.0.1 and ::1 and will fail if neither of these addresses are available to bind.

这个参数用于设置监听地址,默认值是localhost。如果设置为localhost,那么k8s会监听127.0.0.1和::1这两个地址。

看到这里,大概明白了。问题就是没有设置- -address参数引起的。

①在K8S节点内,为什么用curl去访问本机的网卡IP192.168.22.151,会失败?

如图:

原因,查看路由表:

最后一条路由,通往192.168.22.0网段的数据包由本机ens160接口转发出去,而ens160接口IP是192.168.22.151。

由于没有设置- -address参数,192.168.22.151这个地址并没有被K8S监听,所以从ens160接口出去的访问界面的流量被K8S拒绝了。

②在K8S外部,为什么用PC浏览器去访问IP192.168.22.151,会失败?

PC的IP也是没有被K8S监听,访问界面的流量被拒绝了,所以用浏览器访问失败。

如图:

③在K8S节点内,用curl访问 127.0.0.1或者localhost,能够访问成功。

解决办法

kubectl port-forward 设置参数- - address 0.0.0.0

kubectl run nginx --image nginx:latest
kubectl port-forward --address 0.0.0.0 pod/nginx 80:80

K8S会监听任何地址,不会再拒绝了,所以使用K8S节点的IP地址去访问,访问成功:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker数据备份恢复实现过程详解

    Docker数据备份恢复实现过程详解

    这篇文章主要介绍了Docker数据备份恢复实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 详解通过docker和docker-compose实现eureka高可用

    详解通过docker和docker-compose实现eureka高可用

    这篇文章主要介绍了详解通过docker和docker-compose实现eureka高可用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Docker容器无法解析域名的处理

    Docker容器无法解析域名的处理

    这篇文章主要介绍了Docker容器无法解析域名的处理问题,具有很好的参考价值,希望对大家有所帮助,
    2023-11-11
  • 使用Docker CE 还是 Docker EE

    使用Docker CE 还是 Docker EE

    这篇文章主要介绍了使用Docker CE 还是 Docker EE,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2007-06-06
  • docker 部署hbase并且java Api连接的操作过程

    docker 部署hbase并且java Api连接的操作过程

    这篇文章主要介绍了docker 部署hbase并且java Api连接的操作过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • docker部署高斯数据库的详细步骤

    docker部署高斯数据库的详细步骤

    文章详细介绍了如何在Docker中部署高斯数据库(openGauss),包括安装Docker、拉取镜像、运行容器、设置环境变量和挂载数据卷等步骤,还提供了连接和配置远程连接的指导,感兴趣的朋友一起看看吧
    2024-12-12
  • Docker遇到Intellij IDEA,Java开发提升了十倍生产力

    Docker遇到Intellij IDEA,Java开发提升了十倍生产力

    这篇文章主要介绍了Docker遇到Intellij IDEA,Java开发提升了十倍生产力,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • centos docker容器化部署nginx php项目实践

    centos docker容器化部署nginx php项目实践

    这篇文章主要介绍了centos docker容器化部署nginx php项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • 三款Docker图形化工具优缺点对比

    三款Docker图形化工具优缺点对比

    大家好,本篇文章主要讲的是三款Docker图形化工具优缺点对比,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • docker安装Jenkins配置Gitee SSH密钥踩坑解决

    docker安装Jenkins配置Gitee SSH密钥踩坑解决

    这篇文章主要为大家介绍了docker安装Jenkins配置Gitee SSH密钥踩坑解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08

最新评论