如何让pod网络和主机互通

一,为容器配置网络
二,容器的网络“牵一根线”出来,到主机的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 , 以上就是这条命令实现的步骤

 

 

 

 

 

 

 

      

 

 

posted @ 2022-10-20 16:58  年轻人——001  阅读(501)  评论(0编辑  收藏  举报