搜索

如何让pod网络和主机互通


发布时间: 2022-11-24 18:18:06    浏览次数:35 次

一,为容器配置网络
二,容器的网络“牵一根线”出来,到主机的namespace,并且插在这个docker0的Bridge上

 

实现步骤:

一,brctl show (查看主机有没有docker0)

 

 

二,mkdir -p /var/run/netns (创建netns目录出来,当我们需要一个进程关联到网络namespace的时候,需要这样一个地方去保存,说有哪些网络的namespace,这些网络namespace跟容器进程有什么关系)

 

 

三,docker run --network=none -d nginx (通过none的方式启动一个容器)

 

 

四,docker ps (查看这个docker id):

 

 

五,docker inspect 25e3ada9ac3d|grep -i pid (查看下容器pid)

 

 

 六,export pid=8595 (把pid设置到环境变量里,后面引用方便)

 

 

七, nsenter -t 8595 -n ip a (查看容器当前网路配置)

 

 

八,ln -s /proc/$pid/ns/net /var/run/netns/$pid  (让网络的namespace和这个进程绑定)

 

 

九,ip netns list ( list下网络namespace,可以看到进程已经在下面了)

 

 

十,ip link add A type veth peer name B (建立一个虚拟链路,可以看成虚拟网线,类型是veth,一边口子是A ,一边口子是B)

 

 

十一,brctl addif docker0 A (把A口插在主机docker0这边,相当于网线一段已经插到了bridge上了)

 

 

十二,ip link set A up (让A口启动生效)

 

 

十三, 配置B口 (设置IP, 设置子网掩码,设置网关)

  • SETIP=172.17.0.10
  • SETMASK=16
  • GATEWAY=172.17.0.1

 

 

十四,ip link set B netns $pid (把网线另外一段放到了8595这个namespace下面)

 

 

十五,ip netns exec $pid ip link set dev B name eth0 (把B口的名字改为eth0,从这里开始,都是设置容器内的网络了)

 

 

十六:ip netns exec $pid ip link set eth0 up (在容器里面把B口启动起来)

 

 

十七:ip netns exec $pid  ip addr add $SETIP/$SETMASK dev eth0 (为B口配置ip和子网掩码)

 

 

十八:ip netns exec $pid ip route add default via $GATEWAY (容器内部设置网关)

 

 

十九:curl 172.17.0.10 (主机上访问这个ip,nginx响应,说明容器内和主机网络已经通了):

 

 

二十:nsenter -t 8595 -n ip a (查看容器网关,已经配好了)

 

 至此,docker内部网络和主机网络可以通信了,docker run --network=none 或者docker run , 以上就是这条命令实现的步骤

  • 添加到短语集
     
    • 没有此单词集:英语 → 中文(简体)...
       
    • 创建新的单词集...
  • 拷贝
  • 添加到短语集
     
    • 没有此单词集:英语 → 中文(简体)...
       
    • 创建新的单词集...
  • 拷贝
免责声明 如何让pod网络和主机互通,资源类别:文本, 浏览次数:35 次, 文件大小:-- , 由本站蜘蛛搜索收录2022-11-24 06:18:06。此页面由程序自动采集,只作交流和学习使用,本站不储存任何资源文件,如有侵权内容请联系我们举报删除, 感谢您对本站的支持。 原文链接:https://www.cnblogs.com/chaojiyingxiong/p/16810507.html